@dyno-cloud/schema 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/json/budget.schema.json +239 -0
- package/json/catalogue.schema.json +1984 -0
- package/json/compare.schema.json +823 -0
- package/json/devices.json +399 -0
- package/json/doctor.schema.json +144 -0
- package/json/driver-message.schema.json +724 -0
- package/json/dyno-toml.schema.json +80 -0
- package/json/exposure-checkpoint.schema.json +97 -0
- package/json/games.schema.json +66 -0
- package/json/library-bucket.schema.json +22 -0
- package/json/library.schema.json +19 -0
- package/json/measures.json +407 -0
- package/json/probe-event.schema.json +465 -0
- package/json/result.schema.json +1907 -0
- package/json/run-request.schema.json +161 -0
- package/json/unclean-exit.schema.json +99 -0
- package/package.json +22 -4
- package/ts/AssetChange.ts +8 -0
- package/ts/AssetChangeKind.ts +6 -0
- package/ts/AudioState.ts +6 -0
- package/ts/BrowserEngine.ts +6 -0
- package/ts/BudgetId.ts +6 -0
- package/ts/BudgetLimit.ts +8 -0
- package/ts/BudgetRef.ts +15 -0
- package/ts/BudgetVerdict.ts +22 -0
- package/ts/BuildLink.ts +6 -0
- package/ts/BuildManifest.ts +17 -0
- package/ts/CatalogueEntry.ts +7 -0
- package/ts/CatalogueResult.ts +22 -0
- package/ts/CheckResult.ts +16 -0
- package/ts/CompareDeterministic.ts +42 -0
- package/ts/CompareResult.ts +12 -0
- package/ts/CompareRun.ts +17 -0
- package/ts/ContextKind.ts +6 -0
- package/ts/Covers.ts +6 -0
- package/ts/Deterministic.ts +35 -0
- package/ts/DeviceClass.ts +6 -0
- package/ts/DeviceEntry.ts +25 -0
- package/ts/DeviceKind.ts +6 -0
- package/ts/DoctorCheck.ts +16 -0
- package/ts/DoctorCheckId.ts +6 -0
- package/ts/DoctorReport.ts +20 -0
- package/ts/DriverInfo.ts +10 -0
- package/ts/DriverMessage.ts +30 -0
- package/ts/Environment.ts +13 -0
- package/ts/EnvironmentBrowser.ts +23 -0
- package/ts/EnvironmentDevice.ts +27 -0
- package/ts/EnvironmentOs.ts +12 -0
- package/ts/Evidence.ts +11 -0
- package/ts/ExposureCheckpoint.ts +9 -0
- package/ts/ExposureSample.ts +15 -0
- package/ts/FileKind.ts +6 -0
- package/ts/Finding.ts +29 -0
- package/ts/Fix.ts +22 -0
- package/ts/FixAction.ts +7 -0
- package/ts/FrameState.ts +6 -0
- package/ts/GameHookKind.ts +6 -0
- package/ts/HostProfile.ts +47 -0
- package/ts/Inputs.ts +34 -0
- package/ts/Library.ts +6 -0
- package/ts/LibraryBucket.ts +6 -0
- package/ts/LiveFrame.ts +19 -0
- package/ts/Machine.ts +14 -0
- package/ts/ManifestFile.ts +12 -0
- package/ts/Measure.ts +50 -0
- package/ts/MeasureChange.ts +14 -0
- package/ts/MeasureEntry.ts +13 -0
- package/ts/MeasureId.ts +6 -0
- package/ts/MeasureItem.ts +15 -0
- package/ts/MeasureStatus.ts +6 -0
- package/ts/MeasureValue.ts +7 -0
- package/ts/MessageDirection.ts +6 -0
- package/ts/Method.ts +6 -0
- package/ts/OsName.ts +6 -0
- package/ts/ProbeEvent.ts +48 -0
- package/ts/ProfileRef.ts +6 -0
- package/ts/Quantity.ts +7 -0
- package/ts/RelPath.ts +9 -0
- package/ts/Release.ts +12 -0
- package/ts/ResultRef.ts +15 -0
- package/ts/RuleId.ts +6 -0
- package/ts/RunCoverage.ts +8 -0
- package/ts/RunInfo.ts +50 -0
- package/ts/RunMark.ts +6 -0
- package/ts/RunRequest.ts +24 -0
- package/ts/Scenario.ts +6 -0
- package/ts/Scope.ts +12 -0
- package/ts/Severity.ts +6 -0
- package/ts/Shard.ts +17 -0
- package/ts/Source.ts +6 -0
- package/ts/SourceKind.ts +7 -0
- package/ts/Statistic.ts +7 -0
- package/ts/Status.ts +9 -0
- package/ts/Target.ts +15 -0
- package/ts/Tier.ts +9 -0
- package/ts/TierReport.ts +26 -0
- package/ts/ToolBuild.ts +14 -0
- package/ts/Uncertainty.ts +19 -0
- package/ts/UncertaintyKind.ts +6 -0
- package/ts/UncleanExit.ts +16 -0
- package/ts/Unit.ts +6 -0
- package/ts/Verdict.ts +6 -0
- package/ts/VerdictChange.ts +12 -0
- package/ts/Versions.ts +22 -0
- package/ts/Viewport.ts +6 -0
- package/ts/index.ts +89 -0
- package/README.md +0 -3
|
@@ -0,0 +1,823 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "CompareResult",
|
|
4
|
+
"description": "The output of `dyno compare`.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"deterministic": {
|
|
8
|
+
"$ref": "#/$defs/CompareDeterministic"
|
|
9
|
+
},
|
|
10
|
+
"result_hash": {
|
|
11
|
+
"description": "Lowercase hex SHA-256 of the RFC 8785 canonical JSON of `deterministic`.",
|
|
12
|
+
"type": "string"
|
|
13
|
+
},
|
|
14
|
+
"run": {
|
|
15
|
+
"$ref": "#/$defs/CompareRun"
|
|
16
|
+
},
|
|
17
|
+
"schema_version": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"format": "uint32",
|
|
20
|
+
"minimum": 0
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"required": [
|
|
24
|
+
"schema_version",
|
|
25
|
+
"result_hash",
|
|
26
|
+
"deterministic",
|
|
27
|
+
"run"
|
|
28
|
+
],
|
|
29
|
+
"$defs": {
|
|
30
|
+
"AssetChange": {
|
|
31
|
+
"description": "One file that differs between the two build manifests.",
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": {
|
|
34
|
+
"base_bytes": {
|
|
35
|
+
"type": [
|
|
36
|
+
"integer",
|
|
37
|
+
"null"
|
|
38
|
+
],
|
|
39
|
+
"format": "uint64",
|
|
40
|
+
"minimum": 0
|
|
41
|
+
},
|
|
42
|
+
"change": {
|
|
43
|
+
"$ref": "#/$defs/AssetChangeKind"
|
|
44
|
+
},
|
|
45
|
+
"head_bytes": {
|
|
46
|
+
"type": [
|
|
47
|
+
"integer",
|
|
48
|
+
"null"
|
|
49
|
+
],
|
|
50
|
+
"format": "uint64",
|
|
51
|
+
"minimum": 0
|
|
52
|
+
},
|
|
53
|
+
"path": {
|
|
54
|
+
"$ref": "#/$defs/RelPath"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"required": [
|
|
58
|
+
"path",
|
|
59
|
+
"change"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"AssetChangeKind": {
|
|
63
|
+
"description": "How a file changed.",
|
|
64
|
+
"oneOf": [
|
|
65
|
+
{
|
|
66
|
+
"type": "string",
|
|
67
|
+
"enum": [
|
|
68
|
+
"added",
|
|
69
|
+
"removed"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"description": "Same path, different SHA-256.",
|
|
74
|
+
"type": "string",
|
|
75
|
+
"const": "changed"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"BudgetId": {
|
|
80
|
+
"description": "Every budget a budget file can set. Each id is the key path in the file.",
|
|
81
|
+
"oneOf": [
|
|
82
|
+
{
|
|
83
|
+
"description": "Decoded audio at 48 kHz.",
|
|
84
|
+
"type": "string",
|
|
85
|
+
"const": "audio.decoded_mb"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"description": "Decoded bytes at 48 kHz that a mono export of every stereo sound would save.",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"const": "audio.stereo_saving_mb"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"description": "A sprite map's share of time that no sprite covers.",
|
|
94
|
+
"type": "string",
|
|
95
|
+
"const": "audio.silence_share_bp"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"description": "Decoded bytes at 48 kHz in a sprite map's time that no sprite covers.",
|
|
99
|
+
"type": "string",
|
|
100
|
+
"const": "audio.silence_saving_mb"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"description": "Decoded textures, one copy.",
|
|
104
|
+
"type": "string",
|
|
105
|
+
"const": "textures.decoded_mb"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"description": "Antialias on.",
|
|
109
|
+
"type": "string",
|
|
110
|
+
"const": "render.antialias"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"description": "Resolution uncapped.",
|
|
114
|
+
"type": "string",
|
|
115
|
+
"const": "render.resolution_uncapped"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"description": "Two or more files with the same SHA-256.",
|
|
119
|
+
"type": "string",
|
|
120
|
+
"const": "files.duplicate"
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
"BudgetRef": {
|
|
125
|
+
"description": "Which budget file a result used.",
|
|
126
|
+
"type": "object",
|
|
127
|
+
"properties": {
|
|
128
|
+
"name": {
|
|
129
|
+
"description": "The file's `name`, if it has one.",
|
|
130
|
+
"type": [
|
|
131
|
+
"string",
|
|
132
|
+
"null"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
"sha256": {
|
|
136
|
+
"description": "Lowercase hex SHA-256 of the parsed budgets as canonical JSON. The same budgets in TOML\nand JSON give the same hash, and comments do not change it.",
|
|
137
|
+
"type": "string"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"required": [
|
|
141
|
+
"sha256"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
"CompareDeterministic": {
|
|
145
|
+
"description": "Everything the same two results, tool version and budget file give on any machine.",
|
|
146
|
+
"type": "object",
|
|
147
|
+
"properties": {
|
|
148
|
+
"base": {
|
|
149
|
+
"$ref": "#/$defs/ResultRef"
|
|
150
|
+
},
|
|
151
|
+
"budget": {
|
|
152
|
+
"description": "The budget file applied to both sides. Null to keep each result's own verdicts.",
|
|
153
|
+
"anyOf": [
|
|
154
|
+
{
|
|
155
|
+
"$ref": "#/$defs/BudgetRef"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "null"
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
"head": {
|
|
163
|
+
"$ref": "#/$defs/ResultRef"
|
|
164
|
+
},
|
|
165
|
+
"measures": {
|
|
166
|
+
"description": "Every deterministic measure that moved. Sorted by id, then by canonical JSON.",
|
|
167
|
+
"type": "array",
|
|
168
|
+
"items": {
|
|
169
|
+
"$ref": "#/$defs/MeasureChange"
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"reason": {
|
|
173
|
+
"description": "Why the status is incomplete or invalid. Null otherwise.",
|
|
174
|
+
"type": [
|
|
175
|
+
"string",
|
|
176
|
+
"null"
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
"scoring": {
|
|
180
|
+
"type": "integer",
|
|
181
|
+
"format": "uint32",
|
|
182
|
+
"minimum": 0
|
|
183
|
+
},
|
|
184
|
+
"status": {
|
|
185
|
+
"description": "Fail when a budget verdict got worse. Incomplete when either side is incomplete. Invalid\nwhen either side's hash does not match its content.",
|
|
186
|
+
"$ref": "#/$defs/Status"
|
|
187
|
+
},
|
|
188
|
+
"suspect_assets": {
|
|
189
|
+
"description": "Files that differ between the two build manifests. Sorted by path, then by canonical\nJSON.",
|
|
190
|
+
"type": "array",
|
|
191
|
+
"items": {
|
|
192
|
+
"$ref": "#/$defs/AssetChange"
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"tool": {
|
|
196
|
+
"description": "The dyno version, such as \"0.1.0\".",
|
|
197
|
+
"type": "string"
|
|
198
|
+
},
|
|
199
|
+
"verdicts": {
|
|
200
|
+
"description": "Every budget verdict that changed. Sorted by budget id, then by canonical JSON.",
|
|
201
|
+
"type": "array",
|
|
202
|
+
"items": {
|
|
203
|
+
"$ref": "#/$defs/VerdictChange"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"required": [
|
|
208
|
+
"tool",
|
|
209
|
+
"scoring",
|
|
210
|
+
"base",
|
|
211
|
+
"head",
|
|
212
|
+
"status",
|
|
213
|
+
"measures",
|
|
214
|
+
"verdicts",
|
|
215
|
+
"suspect_assets"
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
"CompareRun": {
|
|
219
|
+
"description": "What differs between machines and runs. The hash excludes it.",
|
|
220
|
+
"type": "object",
|
|
221
|
+
"properties": {
|
|
222
|
+
"base_release": {
|
|
223
|
+
"description": "The release labels of each side, from its own run part.",
|
|
224
|
+
"$ref": "#/$defs/Release"
|
|
225
|
+
},
|
|
226
|
+
"duration_ms": {
|
|
227
|
+
"type": "integer",
|
|
228
|
+
"format": "uint64",
|
|
229
|
+
"minimum": 0
|
|
230
|
+
},
|
|
231
|
+
"head_release": {
|
|
232
|
+
"$ref": "#/$defs/Release"
|
|
233
|
+
},
|
|
234
|
+
"machine": {
|
|
235
|
+
"$ref": "#/$defs/Machine"
|
|
236
|
+
},
|
|
237
|
+
"started_at": {
|
|
238
|
+
"description": "RFC 3339 UTC time the compare started.",
|
|
239
|
+
"type": "string"
|
|
240
|
+
},
|
|
241
|
+
"tool_build": {
|
|
242
|
+
"$ref": "#/$defs/ToolBuild"
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
"required": [
|
|
246
|
+
"started_at",
|
|
247
|
+
"duration_ms",
|
|
248
|
+
"machine",
|
|
249
|
+
"tool_build",
|
|
250
|
+
"base_release",
|
|
251
|
+
"head_release"
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
"Machine": {
|
|
255
|
+
"description": "The machine dyno ran on. No host name or user name.",
|
|
256
|
+
"type": "object",
|
|
257
|
+
"properties": {
|
|
258
|
+
"arch": {
|
|
259
|
+
"description": "\"aarch64\" or \"x86_64\".",
|
|
260
|
+
"type": "string"
|
|
261
|
+
},
|
|
262
|
+
"cpus": {
|
|
263
|
+
"type": "integer",
|
|
264
|
+
"format": "uint32",
|
|
265
|
+
"minimum": 0
|
|
266
|
+
},
|
|
267
|
+
"os": {
|
|
268
|
+
"description": "\"macos\", \"linux\" or \"windows\".",
|
|
269
|
+
"type": "string"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"required": [
|
|
273
|
+
"os",
|
|
274
|
+
"arch",
|
|
275
|
+
"cpus"
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
"MeasureChange": {
|
|
279
|
+
"description": "One deterministic measure that moved.",
|
|
280
|
+
"type": "object",
|
|
281
|
+
"properties": {
|
|
282
|
+
"base": {
|
|
283
|
+
"anyOf": [
|
|
284
|
+
{
|
|
285
|
+
"$ref": "#/$defs/MeasureValue"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"type": "null"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
"base_status": {
|
|
293
|
+
"$ref": "#/$defs/MeasureStatus"
|
|
294
|
+
},
|
|
295
|
+
"delta": {
|
|
296
|
+
"description": "Head minus base, for integer values on both sides. Null otherwise.",
|
|
297
|
+
"type": [
|
|
298
|
+
"integer",
|
|
299
|
+
"null"
|
|
300
|
+
],
|
|
301
|
+
"format": "int64"
|
|
302
|
+
},
|
|
303
|
+
"head": {
|
|
304
|
+
"anyOf": [
|
|
305
|
+
{
|
|
306
|
+
"$ref": "#/$defs/MeasureValue"
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"type": "null"
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
"head_status": {
|
|
314
|
+
"$ref": "#/$defs/MeasureStatus"
|
|
315
|
+
},
|
|
316
|
+
"id": {
|
|
317
|
+
"$ref": "#/$defs/MeasureId"
|
|
318
|
+
},
|
|
319
|
+
"unit": {
|
|
320
|
+
"$ref": "#/$defs/Unit"
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
"required": [
|
|
324
|
+
"id",
|
|
325
|
+
"unit",
|
|
326
|
+
"base_status",
|
|
327
|
+
"head_status"
|
|
328
|
+
]
|
|
329
|
+
},
|
|
330
|
+
"MeasureId": {
|
|
331
|
+
"description": "Every measure that Phases 1 and 2 name.",
|
|
332
|
+
"oneOf": [
|
|
333
|
+
{
|
|
334
|
+
"description": "Number of supplied files.",
|
|
335
|
+
"type": "string",
|
|
336
|
+
"const": "static.inventory.files"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"description": "Bytes of every supplied file, with one item per file kind.",
|
|
340
|
+
"type": "string",
|
|
341
|
+
"const": "static.bytes.by_type"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"description": "Gzip bytes of the text files (js, css, html, data), with one item per file kind.",
|
|
345
|
+
"type": "string",
|
|
346
|
+
"const": "static.bytes.compressed"
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"description": "Bytes in files that repeat another file byte for byte (same SHA-256), one item per copy.",
|
|
350
|
+
"type": "string",
|
|
351
|
+
"const": "static.bytes.duplicates"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"description": "Decoded texture bytes of all supplied images, one copy: width x height x 4, plus the mip\nlevels the engine or the file makes. The uncertainty gives the range up to two copies.",
|
|
355
|
+
"type": "string",
|
|
356
|
+
"const": "static.textures.decoded"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"description": "Decoded audio bytes at 48 kHz: seconds x channels x 48,000 x 4, one item per sound\ngroup.",
|
|
360
|
+
"type": "string",
|
|
361
|
+
"const": "static.audio.decoded_48k"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"description": "Decoded audio bytes at 24 kHz, one item per sound group.",
|
|
365
|
+
"type": "string",
|
|
366
|
+
"const": "static.audio.decoded_24k"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"description": "Number of stereo sound groups, one item per group's representative file.",
|
|
370
|
+
"type": "string",
|
|
371
|
+
"const": "static.audio.stereo_files"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"description": "Number of stereo sound groups whose two channels match once decoded, so a mono export\nsounds the same. One item per decoded stereo group, with what a mono export does to it:\n`safe_to_make_mono`, `changes_the_sound` or `cancels`.",
|
|
375
|
+
"type": "string",
|
|
376
|
+
"const": "static.audio.stereo_mono_safe"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"description": "Largest share of silence in a Howler sprite map, one item per sprite map.",
|
|
380
|
+
"type": "string",
|
|
381
|
+
"const": "static.audio.sprite_silence"
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"description": "Share of the decoded time of every sound group that is silent, in 10 ms windows at or\nbelow -60 dBFS. One item per decoded group.",
|
|
385
|
+
"type": "string",
|
|
386
|
+
"const": "static.audio.silence_by_decode"
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"description": "Whether the bundle turns antialias on.",
|
|
390
|
+
"type": "string",
|
|
391
|
+
"const": "static.render.antialias"
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"description": "Whether the bundle renders at a resolution above 2, the cap that a fix suggests.",
|
|
395
|
+
"type": "string",
|
|
396
|
+
"const": "static.render.resolution_uncapped"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"description": "The renderer the bundle asks for: webgl, webgl2, webgpu or canvas2d.",
|
|
400
|
+
"type": "string",
|
|
401
|
+
"const": "static.render.backend"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"description": "Canvas bytes: one WebGL context plus the backing store at the bundle's resolution.",
|
|
405
|
+
"type": "string",
|
|
406
|
+
"const": "static.render.canvas"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"description": "Number of libraries found in the bundle, one item per library with its version, keyed\n`<bucket>.<library>` such as `rendering.pixi` (`library::Library`).",
|
|
410
|
+
"type": "string",
|
|
411
|
+
"const": "static.bundle.engines"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"description": "Number of URLs in the bundle that point outside the build, one item per URL.\nThe build id does not cover them.",
|
|
415
|
+
"type": "string",
|
|
416
|
+
"const": "static.bundle.external_urls"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"description": "JavaScript bytes per source module, from source maps.",
|
|
420
|
+
"type": "string",
|
|
421
|
+
"const": "static.bundle.source_map"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"description": "Time from navigation to the game frame's first animation frame.",
|
|
425
|
+
"type": "string",
|
|
426
|
+
"const": "lab.time.first_frame"
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"description": "Time from navigation to the host profile's ready message, such as `reels:ready`.",
|
|
430
|
+
"type": "string",
|
|
431
|
+
"const": "lab.time.ready"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"description": "Bytes the game frame loaded by idle, one item per file kind.",
|
|
435
|
+
"type": "string",
|
|
436
|
+
"const": "lab.bytes.loaded_by_idle"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"description": "Bytes the game frame loaded before its playable hook. Unsupported when the game sends no\nplayable hook. The host's ready message is not that signal.",
|
|
440
|
+
"type": "string",
|
|
441
|
+
"const": "lab.bytes.to_playable"
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"description": "Audio bytes decoded by idle, at the audio context's rate: length x channels x 4.",
|
|
445
|
+
"type": "string",
|
|
446
|
+
"const": "lab.audio.decoded"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"description": "The audio context's sample rate.",
|
|
450
|
+
"type": "string",
|
|
451
|
+
"const": "lab.audio.context_rate"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"description": "Texture bytes uploaded by idle, re-uploads included. One item per source path, such as\n`/assets/a.png`. An ImageBitmap, a `blob:` object URL or a response made from a\nfetched file keeps that file's path. Uploads with no http source are `empty` (no\npixels), `canvas` (a canvas the game drew) or `other` (data, `data:` URLs, or a field\nprobe that does not tell). A path always starts with `/`, so it never meets these.",
|
|
455
|
+
"type": "string",
|
|
456
|
+
"const": "lab.textures.uploaded"
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"description": "Texture bytes the GPU holds at idle: the last upload of each level of each texture the\ngame did not delete.",
|
|
460
|
+
"type": "string",
|
|
461
|
+
"const": "lab.textures.resident"
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"description": "Number of canvas rendering contexts the game created.",
|
|
465
|
+
"type": "string",
|
|
466
|
+
"const": "lab.canvas.contexts"
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"description": "Canvas buffer bytes from the contexts' sizes, DPR and antialias.",
|
|
470
|
+
"type": "string",
|
|
471
|
+
"const": "lab.canvas.bytes"
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"description": "JavaScript heap in use at idle. Chromium's heap, not the iPhone's.",
|
|
475
|
+
"type": "string",
|
|
476
|
+
"const": "lab.js_heap"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"description": "Whether an audio context ran while the frame was inactive.",
|
|
480
|
+
"type": "string",
|
|
481
|
+
"const": "lab.inactive.audio_running"
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
"description": "Frames per second the game rendered while inactive.",
|
|
485
|
+
"type": "string",
|
|
486
|
+
"const": "lab.inactive.frame_rate"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"description": "Audio decode and texture upload bytes before activation. A diagnostic, never a fail.",
|
|
490
|
+
"type": "string",
|
|
491
|
+
"const": "lab.inactive.allocated"
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
"description": "The game frame's device pixel ratio, in thousandths. The run is invalid unless it is 3\n(3,000).",
|
|
495
|
+
"type": "string",
|
|
496
|
+
"const": "lab.self_check.frame_dpr"
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"description": "Requests the game frame made. The run is invalid when it made none.",
|
|
500
|
+
"type": "string",
|
|
501
|
+
"const": "lab.self_check.frame_requests"
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"description": "The WebGL renderer string. CI runners often fall back to a software renderer.",
|
|
505
|
+
"type": "string",
|
|
506
|
+
"const": "lab.self_check.webgl_renderer"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"description": "Modelled iPhone footprint while active: decoded audio at the context rate, textures,\ncanvas buffers, decoded images that are not textures, and k times the JS heap, plus a\nfixed b. The model fit sets k and b.",
|
|
510
|
+
"type": "string",
|
|
511
|
+
"const": "model.footprint"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"description": "Modelled iPhone footprint while inactive, for the preloadable tier.",
|
|
515
|
+
"type": "string",
|
|
516
|
+
"const": "model.footprint_inactive"
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
"description": "Spins played in the demo-only session.",
|
|
520
|
+
"type": "string",
|
|
521
|
+
"const": "play.spins"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"description": "Peak bytes during the spin loop.",
|
|
525
|
+
"type": "string",
|
|
526
|
+
"const": "play.peak"
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"description": "Memory growth per 100 spins (Theil-Sen slope). Negative when memory shrinks.",
|
|
530
|
+
"type": "string",
|
|
531
|
+
"const": "play.growth_per_100_spins"
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"description": "Peak bytes during a bonus round.",
|
|
535
|
+
"type": "string",
|
|
536
|
+
"const": "play.bonus_peak"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"description": "The `phys_footprint` of the game's process on the iPhone, at the first sample after the\nframe went idle. Its peak in the run window is an item too, for readers from before\n`device.phys_footprint_peak`.",
|
|
540
|
+
"type": "string",
|
|
541
|
+
"const": "device.phys_footprint"
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"description": "The largest `phys_footprint` of the game's process on the iPhone in the run window,\nfrom the answer to the page's `hello` to the end of the run, with the slack of a sample\nat each end that places the run on the trace's clock.",
|
|
545
|
+
"type": "string",
|
|
546
|
+
"const": "device.phys_footprint_peak"
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"description": "The median `phys_footprint` peak of N runs of the game, minus the median peak of N runs\nof the empty build, on the same phone. Needs `--runs`. A difference, so a game within\nthe noise of the empty page can give a value below 0.",
|
|
550
|
+
"type": "string",
|
|
551
|
+
"const": "device.footprint_over_baseline"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"description": "Runs that the iPhone killed: the game's process left the trace before the run ended, as\na process that iOS kills does. One item per kill.",
|
|
555
|
+
"type": "string",
|
|
556
|
+
"const": "device.kills"
|
|
557
|
+
}
|
|
558
|
+
]
|
|
559
|
+
},
|
|
560
|
+
"MeasureStatus": {
|
|
561
|
+
"description": "How far to trust a measure. \"Not measured\" is never 0.",
|
|
562
|
+
"oneOf": [
|
|
563
|
+
{
|
|
564
|
+
"description": "Observed directly in a browser run or on a phone.",
|
|
565
|
+
"type": "string",
|
|
566
|
+
"const": "measured"
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
"description": "Computed from the build's files or from the model. Never a measure of iPhone memory.",
|
|
570
|
+
"type": "string",
|
|
571
|
+
"const": "estimated"
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
"description": "dyno cannot measure this for this target, for example bytes to playable when the game\nsends no playable hook.",
|
|
575
|
+
"type": "string",
|
|
576
|
+
"const": "unsupported"
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"description": "There is no value.",
|
|
580
|
+
"type": "string",
|
|
581
|
+
"const": "missing"
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"description": "A value failed a check, for example a frame DPR that is not 3. The value stays, unless it\nwas outside the safe integer range.",
|
|
585
|
+
"type": "string",
|
|
586
|
+
"const": "invalid"
|
|
587
|
+
}
|
|
588
|
+
]
|
|
589
|
+
},
|
|
590
|
+
"MeasureValue": {
|
|
591
|
+
"description": "A value. Integers carry every number, so float formatting never changes the output. They are\nsigned, because a change such as memory growth can be negative.",
|
|
592
|
+
"anyOf": [
|
|
593
|
+
{
|
|
594
|
+
"type": "integer",
|
|
595
|
+
"format": "int64"
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
"type": "boolean"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
"type": "string"
|
|
602
|
+
}
|
|
603
|
+
]
|
|
604
|
+
},
|
|
605
|
+
"RelPath": {
|
|
606
|
+
"description": "A path relative to the build root, with '/' between parts on every platform.\n\nConstruction normalizes the separators, so the same file gives the same bytes in a result on\nmacOS, Linux and Windows.",
|
|
607
|
+
"type": "string"
|
|
608
|
+
},
|
|
609
|
+
"Release": {
|
|
610
|
+
"description": "Labels the caller gives. Outside the hash, so two callers who name a release differently\nstill get the same hash.",
|
|
611
|
+
"type": "object",
|
|
612
|
+
"properties": {
|
|
613
|
+
"game": {
|
|
614
|
+
"type": [
|
|
615
|
+
"string",
|
|
616
|
+
"null"
|
|
617
|
+
]
|
|
618
|
+
},
|
|
619
|
+
"game_id": {
|
|
620
|
+
"description": "The game's id on the dyno site, a UUID: from `--game-id`, or from the `dyno.toml` entry\nfor the build. Null when neither gives one.",
|
|
621
|
+
"type": [
|
|
622
|
+
"string",
|
|
623
|
+
"null"
|
|
624
|
+
],
|
|
625
|
+
"default": null
|
|
626
|
+
},
|
|
627
|
+
"version": {
|
|
628
|
+
"type": [
|
|
629
|
+
"string",
|
|
630
|
+
"null"
|
|
631
|
+
]
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"ResultRef": {
|
|
636
|
+
"description": "One side of a comparison.",
|
|
637
|
+
"type": "object",
|
|
638
|
+
"properties": {
|
|
639
|
+
"build_id": {
|
|
640
|
+
"type": [
|
|
641
|
+
"string",
|
|
642
|
+
"null"
|
|
643
|
+
]
|
|
644
|
+
},
|
|
645
|
+
"hash_matches": {
|
|
646
|
+
"description": "Whether `result_hash` matches the result's deterministic part.",
|
|
647
|
+
"type": "boolean"
|
|
648
|
+
},
|
|
649
|
+
"result_hash": {
|
|
650
|
+
"type": "string"
|
|
651
|
+
},
|
|
652
|
+
"status": {
|
|
653
|
+
"$ref": "#/$defs/Status"
|
|
654
|
+
},
|
|
655
|
+
"tool": {
|
|
656
|
+
"description": "The dyno version that made the result.",
|
|
657
|
+
"type": "string"
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
"required": [
|
|
661
|
+
"result_hash",
|
|
662
|
+
"hash_matches",
|
|
663
|
+
"status",
|
|
664
|
+
"tool"
|
|
665
|
+
]
|
|
666
|
+
},
|
|
667
|
+
"Status": {
|
|
668
|
+
"description": "The overall status of a result. The exit code comes from it alone.\n\nWhen several statuses apply, the worst wins. From worst to best: fail, invalid, incomplete,\nwarn, pass. The variants below are not declared in that order.",
|
|
669
|
+
"oneOf": [
|
|
670
|
+
{
|
|
671
|
+
"description": "None of the other statuses applies.",
|
|
672
|
+
"type": "string",
|
|
673
|
+
"const": "pass"
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"description": "A budget or a static rule warns. Nothing fails.",
|
|
677
|
+
"type": "string",
|
|
678
|
+
"const": "warn"
|
|
679
|
+
},
|
|
680
|
+
{
|
|
681
|
+
"description": "A budget or a static rule fails. Nothing offsets a fail.",
|
|
682
|
+
"type": "string",
|
|
683
|
+
"const": "fail"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"description": "A required measure is missing or absent from the result, a budget could not be checked, or\na static rule could not be checked because a value from the build is missing. Never a pass.",
|
|
687
|
+
"type": "string",
|
|
688
|
+
"const": "incomplete"
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"description": "A required measure failed its check, such as a run whose frame DPR was not 3, or a measure\nin the result does not fit the check.",
|
|
692
|
+
"type": "string",
|
|
693
|
+
"const": "invalid"
|
|
694
|
+
}
|
|
695
|
+
]
|
|
696
|
+
},
|
|
697
|
+
"ToolBuild": {
|
|
698
|
+
"description": "The dyno binary that made the result.",
|
|
699
|
+
"type": "object",
|
|
700
|
+
"properties": {
|
|
701
|
+
"git_sha": {
|
|
702
|
+
"description": "The commit the binary was built from. Null for a local build.",
|
|
703
|
+
"type": [
|
|
704
|
+
"string",
|
|
705
|
+
"null"
|
|
706
|
+
]
|
|
707
|
+
},
|
|
708
|
+
"profile": {
|
|
709
|
+
"description": "\"debug\" or \"release\".",
|
|
710
|
+
"type": "string"
|
|
711
|
+
},
|
|
712
|
+
"version": {
|
|
713
|
+
"type": "string"
|
|
714
|
+
}
|
|
715
|
+
},
|
|
716
|
+
"required": [
|
|
717
|
+
"version",
|
|
718
|
+
"profile"
|
|
719
|
+
]
|
|
720
|
+
},
|
|
721
|
+
"Unit": {
|
|
722
|
+
"description": "The unit of a value. Sizes are always integer bytes. Only a change in size can be negative.",
|
|
723
|
+
"oneOf": [
|
|
724
|
+
{
|
|
725
|
+
"description": "A size.",
|
|
726
|
+
"type": "string",
|
|
727
|
+
"const": "bytes"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"description": "A change in size, such as growth per 100 spins. It is negative when memory shrinks.",
|
|
731
|
+
"type": "string",
|
|
732
|
+
"const": "bytes_change"
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"description": "Milliseconds.",
|
|
736
|
+
"type": "string",
|
|
737
|
+
"const": "ms"
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
"description": "A number of things.",
|
|
741
|
+
"type": "string",
|
|
742
|
+
"const": "count"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"description": "Times a second, such as a frame rate or an audio sample rate.",
|
|
746
|
+
"type": "string",
|
|
747
|
+
"const": "hertz"
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"description": "Hundredths of a percent: 10,000 is 100%.",
|
|
751
|
+
"type": "string",
|
|
752
|
+
"const": "basis_points"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"description": "Thousandths: a device pixel ratio of 3 is 3,000.",
|
|
756
|
+
"type": "string",
|
|
757
|
+
"const": "milli"
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"description": "True or false.",
|
|
761
|
+
"type": "string",
|
|
762
|
+
"const": "flag"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"description": "A string, such as a renderer name.",
|
|
766
|
+
"type": "string",
|
|
767
|
+
"const": "text"
|
|
768
|
+
}
|
|
769
|
+
]
|
|
770
|
+
},
|
|
771
|
+
"Verdict": {
|
|
772
|
+
"description": "The outcome of one budget, rule or doctor check.",
|
|
773
|
+
"oneOf": [
|
|
774
|
+
{
|
|
775
|
+
"type": "string",
|
|
776
|
+
"enum": [
|
|
777
|
+
"pass",
|
|
778
|
+
"warn",
|
|
779
|
+
"fail"
|
|
780
|
+
]
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"description": "It could not be checked, because the inputs it needs are missing, invalid or partial.",
|
|
784
|
+
"type": "string",
|
|
785
|
+
"const": "incomplete"
|
|
786
|
+
}
|
|
787
|
+
]
|
|
788
|
+
},
|
|
789
|
+
"VerdictChange": {
|
|
790
|
+
"description": "One budget verdict that changed.",
|
|
791
|
+
"type": "object",
|
|
792
|
+
"properties": {
|
|
793
|
+
"base": {
|
|
794
|
+
"description": "Null when the side has no verdict for this budget.",
|
|
795
|
+
"anyOf": [
|
|
796
|
+
{
|
|
797
|
+
"$ref": "#/$defs/Verdict"
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"type": "null"
|
|
801
|
+
}
|
|
802
|
+
]
|
|
803
|
+
},
|
|
804
|
+
"budget": {
|
|
805
|
+
"$ref": "#/$defs/BudgetId"
|
|
806
|
+
},
|
|
807
|
+
"head": {
|
|
808
|
+
"anyOf": [
|
|
809
|
+
{
|
|
810
|
+
"$ref": "#/$defs/Verdict"
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
"type": "null"
|
|
814
|
+
}
|
|
815
|
+
]
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
"required": [
|
|
819
|
+
"budget"
|
|
820
|
+
]
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
}
|