Files
libretro/schemas/core-probe-data.schema.json
T
Abdessamad Derraz 6109d7abd5 feat: split probe records into line and sidecar
A record is now one line of records/<emulator>.jsonl in the measurements repository, under 20 KB, and a gzip sidecar holding every repetition, the core logs and the raw timings, its sha256 in the line. record_version 2, core-probe-data.schema.json for the sidecar. core_probe --record appends to a measurements clone and refuses a directory inside this repository's tracked tree.

The seven records of issue 85 moved to Abdess/retrobios-measurements: each line plus its sidecar rebuilds the first file, and keeps its first id.
2026-10-27 08:30:07 +01:00

205 lines
4.6 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://abdess.github.io/retrobios/api/v1/schemas/core-probe-data.schema.json",
"title": "RetroBIOS core probe record data",
"description": "The sidecar of a core probe record, data/<emulator>/<id>.json.gz: every repetition in full, the raw timing values and compared values too large for the record line. With the record it rebuilds the full result.",
"type": "object",
"additionalProperties": false,
"required": [
"variants",
"timing_raw",
"group_values"
],
"properties": {
"variants": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"label",
"repetitions"
],
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"repetitions": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/repetition"
}
}
}
}
},
"timing_raw": {
"type": "object",
"additionalProperties": {
"type": "array",
"minItems": 1,
"items": {
"type": "number"
}
}
},
"group_values": {
"type": "object",
"propertyNames": {
"pattern": "^[0-9a-f]{40}$"
}
}
},
"$defs": {
"sha1": {
"type": "string",
"pattern": "^[0-9a-f]{40}$"
},
"repetition": {
"type": "object",
"required": [
"loaded",
"library_name",
"logs"
],
"properties": {
"loaded": {
"type": "boolean"
},
"library_name": {
"type": "string"
},
"library_version": {
"type": "string"
},
"fps_nominal": {
"type": "number"
},
"frames": {
"type": "integer",
"minimum": 1
},
"warmup": {
"type": "integer",
"minimum": 0
},
"wall_s": {
"type": "number",
"minimum": 0
},
"ms_per_frame": {
"type": "number",
"minimum": 0
},
"fps": {
"type": "number",
"minimum": 0
},
"observables": {
"type": "object"
},
"logs": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"frame",
"level",
"text"
],
"properties": {
"frame": {
"type": "integer",
"minimum": 0
},
"level": {
"type": "string"
},
"text": {
"type": "string"
}
}
}
},
"options_declared": {
"type": "object"
},
"env_unanswered": {
"type": "object"
},
"last_frame_size": {
"type": "array",
"items": {
"type": "integer"
}
},
"tracing": {
"type": "string"
},
"input_queries": {
"type": "integer",
"minimum": 0
},
"input_pressed": {
"type": "integer",
"minimum": 0
},
"files_opened": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"path",
"sha1_after",
"sha1_staged"
],
"properties": {
"path": {
"type": "string"
},
"sha1_after": {
"$ref": "#/$defs/sha1"
},
"sha1_staged": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/$defs/sha1"
}
]
}
}
}
}
]
},
"files_probed_absent": {
"oneOf": [
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
}
}
}