@flighthq/tool-capture 0.3.0-next.906.07cea63 → 0.3.0
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/README.md +1 -1
- package/dist/baselineStore.d.ts +1 -1
- package/dist/baselineStore.d.ts.map +1 -1
- package/dist/bin.js +19 -3
- package/dist/bin.js.map +1 -1
- package/dist/captureBrowser.d.ts +1 -0
- package/dist/captureBrowser.d.ts.map +1 -1
- package/dist/captureBrowser.js +20 -4
- package/dist/captureBrowser.js.map +1 -1
- package/dist/captureEntry.d.ts +3 -1
- package/dist/captureEntry.d.ts.map +1 -1
- package/dist/captureEntry.js +72 -23
- package/dist/captureEntry.js.map +1 -1
- package/dist/captureFlightPreset.js +12 -2
- package/dist/captureFlightPreset.js.map +1 -1
- package/dist/captureFormat.d.ts +1 -1
- package/dist/captureFormat.d.ts.map +1 -1
- package/dist/captureFormat.js +2 -1
- package/dist/captureFormat.js.map +1 -1
- package/dist/capturePage.d.ts +4 -2
- package/dist/capturePage.d.ts.map +1 -1
- package/dist/capturePage.js +14 -0
- package/dist/capturePage.js.map +1 -1
- package/dist/captureProtocol.d.ts +2 -0
- package/dist/captureProtocol.d.ts.map +1 -1
- package/dist/captureProtocol.js.map +1 -1
- package/dist/captureRegistryMiss.d.ts +8 -0
- package/dist/captureRegistryMiss.d.ts.map +1 -0
- package/dist/captureRegistryMiss.js +41 -0
- package/dist/captureRegistryMiss.js.map +1 -0
- package/dist/captureServer.d.ts.map +1 -1
- package/dist/captureServer.js +13 -19
- package/dist/captureServer.js.map +1 -1
- package/dist/captureSourceHash.d.ts +4 -0
- package/dist/captureSourceHash.d.ts.map +1 -0
- package/dist/captureSourceHash.js +22 -0
- package/dist/captureSourceHash.js.map +1 -0
- package/dist/captureSuite.d.ts.map +1 -1
- package/dist/captureSuite.js +6 -2
- package/dist/captureSuite.js.map +1 -1
- package/dist/captureTimeout.d.ts +4 -0
- package/dist/captureTimeout.d.ts.map +1 -0
- package/dist/captureTimeout.js +39 -0
- package/dist/captureTimeout.js.map +1 -0
- package/dist/captureValidation.d.ts +39 -0
- package/dist/captureValidation.d.ts.map +1 -1
- package/dist/captureValidation.js +274 -32
- package/dist/captureValidation.js.map +1 -1
- package/dist/captureWorkerCount.d.ts +2 -0
- package/dist/captureWorkerCount.d.ts.map +1 -0
- package/dist/captureWorkerCount.js +20 -0
- package/dist/captureWorkerCount.js.map +1 -0
- package/dist/captureWorkflow.d.ts +8 -0
- package/dist/captureWorkflow.d.ts.map +1 -1
- package/dist/captureWorkflow.js +15 -5
- package/dist/captureWorkflow.js.map +1 -1
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/functionalVerify.d.ts +3 -3
- package/dist/functionalVerify.d.ts.map +1 -1
- package/dist/functionalVerify.js +93 -33
- package/dist/functionalVerify.js.map +1 -1
- package/package.json +7 -5
- package/src/captureEntry.test.ts +36 -0
- package/src/captureEyes.e2e.test.ts +32 -1
- package/src/captureFlightPreset.test.ts +12 -0
- package/src/captureFormat.test.ts +22 -0
- package/src/capturePage.test.ts +25 -2
- package/src/captureRegistryMiss.test.ts +106 -0
- package/src/captureServer.test.ts +31 -5
- package/src/captureSourceHash.test.ts +62 -0
- package/src/captureTimeout.test.ts +77 -0
- package/src/captureValidation.test.ts +221 -1
- package/src/captureWorkerCount.test.ts +28 -0
- package/src/captureWorkflow.test.ts +8 -1
- package/src/functionalVerify.test.ts +73 -3
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ The adapter is inert outside a tool-capture browser. During capture it registers
|
|
|
87
87
|
await verifyCaptureTarget(exampleModule, renderer);
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Fingerprints use the `<grid-size>:<rgb-hex>` format produced by `
|
|
90
|
+
Fingerprints use the `<grid-size>:<rgb-hex>` format produced by `formatBitmapFingerprint`. Once the page reaches a terminal verification state, validation is turn-key:
|
|
91
91
|
|
|
92
92
|
```sh
|
|
93
93
|
tool-capture validate --dir dist --no-regression
|
package/dist/baselineStore.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type BaselineField = 'fingerprint' | 'sha256';
|
|
1
|
+
export type BaselineField = 'fingerprint' | 'sourceHash' | 'sha256';
|
|
2
2
|
export declare function baselinePath(root: string, subject: string, name: string): string;
|
|
3
3
|
export declare function getBaselineField(root: string, subject: string, name: string, column: string, field: BaselineField): string | null;
|
|
4
4
|
export declare function setBaselineField(root: string, subject: string, name: string, column: string, field: BaselineField, value: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baselineStore.d.ts","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"baselineStore.d.ts","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC;AASpE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,MAAM,GAAG,IAAI,CAEf;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,GACZ,IAAI,CAKN"}
|
package/dist/bin.js
CHANGED
|
@@ -15,7 +15,9 @@ import { isBrowserClosedError } from './captureInterrupt.js';
|
|
|
15
15
|
import { readCaptureManifest } from './captureManifest.js';
|
|
16
16
|
import { resolveCaptureDirectoryServer, resolveServer, resolveStaticServer } from './captureServer.js';
|
|
17
17
|
import { runCaptureSuite } from './captureSuite.js';
|
|
18
|
+
import { resolveCaptureTimeoutMs, setCaptureTimeoutMs } from './captureTimeout.js';
|
|
18
19
|
import { runCaptureValidation } from './captureValidation.js';
|
|
20
|
+
import { resolveCaptureWorkerCount } from './captureWorkerCount.js';
|
|
19
21
|
import { runCaptureBatch } from './captureWorkflow.js';
|
|
20
22
|
const USAGE = `usage:
|
|
21
23
|
tool-capture observe <url> [--out <dir>] [--wait <ms>] [--frames <n>] [--retries <n>]
|
|
@@ -30,7 +32,7 @@ const USAGE = `usage:
|
|
|
30
32
|
capture options:
|
|
31
33
|
--filter <name> --renderer <ids> --out <dir> --wait <ms> --frames <n>
|
|
32
34
|
--parallel <n> --sequential --dev --build --update-baseline --fail-on-changed
|
|
33
|
-
--fail-on-error --verify --no-verify --observe --retries <n>
|
|
35
|
+
--fail-on-error --verify --no-verify --observe --retries <n> --capture-timeout <ms>
|
|
34
36
|
|
|
35
37
|
Every command writes a versioned aggregate JSON report beneath its artifact directory.
|
|
36
38
|
|
|
@@ -38,6 +40,10 @@ validation options:
|
|
|
38
40
|
--report --update-fingerprints --no-regression --no-parity
|
|
39
41
|
--stability-epsilon <n> --regression-tolerance <n> --parity-tolerance <n>
|
|
40
42
|
|
|
43
|
+
FLIGHT_CAPTURE_WORKER_COUNT pins worker concurrency when --parallel is omitted.
|
|
44
|
+
FLIGHT_CAPTURE_TIMEOUT_MS pins the per-wait budget (page load, frame poll, verification) when
|
|
45
|
+
--capture-timeout is omitted; default 15000. Raise it on contended or software-adapter machines.
|
|
46
|
+
|
|
41
47
|
benchmark options:
|
|
42
48
|
--warmup <n> --iterations <n> --samples <n> --sample-duration <ms> --benchmark-reference <renderer>
|
|
43
49
|
--performance-tolerance <fraction> --stability-tolerance <fraction> --retries <n> --update-benchmarks
|
|
@@ -156,7 +162,7 @@ function captureOptions(argv) {
|
|
|
156
162
|
rendererFilter: (flag(argv, 'renderer') ?? '').split(',').filter(Boolean),
|
|
157
163
|
extraWait: parseNonNegativeInteger(flag(argv, 'wait'), 0),
|
|
158
164
|
captureFrames: parseNonNegativeInteger(frames?.split(',')[0], 0),
|
|
159
|
-
workerCount:
|
|
165
|
+
workerCount: captureWorkerCount(argv),
|
|
160
166
|
sequential: hasFlag(argv, 'sequential'),
|
|
161
167
|
updateBaseline: hasFlag(argv, 'update-baseline'),
|
|
162
168
|
failOnChanged: hasFlag(argv, 'fail-on-changed'),
|
|
@@ -180,7 +186,7 @@ function validationOptions(argv, subject, manifest) {
|
|
|
180
186
|
regressionTolerance: parseNumber(flag(argv, 'regression-tolerance')),
|
|
181
187
|
parityTolerance: parseNumber(flag(argv, 'parity-tolerance')),
|
|
182
188
|
sequential: hasFlag(argv, 'sequential'),
|
|
183
|
-
workerCount:
|
|
189
|
+
workerCount: captureWorkerCount(argv),
|
|
184
190
|
fingerprintSkip: manifest?.validation?.fingerprintSkip ?? (manifest === null ? preset.fingerprintSkip : []),
|
|
185
191
|
paritySkip: manifest?.validation?.paritySkip ?? (manifest === null ? preset.paritySkip : {}),
|
|
186
192
|
parityGroups: manifest?.validation?.parityGroups ?? (manifest === null ? preset.parityGroups : undefined),
|
|
@@ -244,6 +250,11 @@ async function batch(argv) {
|
|
|
244
250
|
}
|
|
245
251
|
async function main() {
|
|
246
252
|
const [command, ...argv] = process.argv.slice(2);
|
|
253
|
+
// Pinned once for the process rather than threaded through every option bag: the budget governs
|
|
254
|
+
// waits in the capture core, the validation loader and the stall reason alike, and those are reached
|
|
255
|
+
// from three different call shapes. One resolution point is also what keeps `--capture-timeout` and
|
|
256
|
+
// FLIGHT_CAPTURE_TIMEOUT_MS from being able to mean different things in different waits.
|
|
257
|
+
setCaptureTimeoutMs(resolveCaptureTimeoutMs(flag(argv, 'capture-timeout'), process.env['FLIGHT_CAPTURE_TIMEOUT_MS']));
|
|
247
258
|
if (command === 'observe') {
|
|
248
259
|
const url = argv[0];
|
|
249
260
|
if (url === undefined || url.startsWith('--'))
|
|
@@ -270,6 +281,11 @@ async function main() {
|
|
|
270
281
|
console.error(USAGE);
|
|
271
282
|
process.exit(2);
|
|
272
283
|
}
|
|
284
|
+
function captureWorkerCount(argv) {
|
|
285
|
+
// The resolver's four-worker EXPEDIENT keeps today's capture legs usable under both CPU starvation
|
|
286
|
+
// and workspace-mount descriptor bursts; available parallelism, not four itself, is the sizing rule.
|
|
287
|
+
return resolveCaptureWorkerCount(flag(argv, 'parallel'), process.env['FLIGHT_CAPTURE_WORKER_COUNT']);
|
|
288
|
+
}
|
|
273
289
|
function parseNonNegativeInteger(value, fallback) {
|
|
274
290
|
if (value === undefined)
|
|
275
291
|
return fallback;
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,wBAAwB;AACxB,yFAAyF;AACzF,8FAA8F;AAC9F,2EAA2E;AAC3E,gGAAgG;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA6B8B,CAAC;AAE7C,SAAS,IAAI,CAAC,IAAuB,EAAE,GAAW;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACvC,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC;AAED,SAAS,OAAO,CAAC,IAAuB,EAAE,GAAW;IACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AACnC,CAAC;AAUD,KAAK,UAAU,sBAAsB,CAAC,IAAuB;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,QAAQ,GAA2B,IAAI,CAAC;IAC5C,IAAI,OAAe,CAAC;IACpB,IAAI,OAAgB,CAAC;IAErB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;QAC5D,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;QACpD,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAChE,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC;QAC5C,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;QACxG,QAAQ,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;QACpD,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC;IACX,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,IAAI,CAAC,CAAC;QAChD,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAChE,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,cAAc,CAAC,CAAC;aACrE,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,QAAQ,CAAC,CAAC;;YAClF,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,iDAAiD,CAAC,CAAC;QACvF,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YAC3B,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC,CAAC,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,sDAAsD,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAuB;IAC5C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,GAAG,cAAc,CAAC,IAAI,CAAC;QACvB,OAAO;QACP,OAAO;QACP,MAAM;QACN,IAAI;KACL,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAuB;IAC7C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;QACxC,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7C,OAAO;QACP,OAAO;QACP,MAAM;QACN,IAAI;KACL,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAuB;IAC9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;QACnC,OAAO;QACP,OAAO;QACP,MAAM;QACN,IAAI;KACL,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,IAAuB;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,YAAY;QAC1C,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACzE,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,aAAa,EAAE,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAChD,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAC/C,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;QAC3C,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACvF,UAAU,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAuB,EACvB,OAAe,EACf,QAAgC;IAEhC,MAAM,MAAM,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACzE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC/B,kBAAkB,EAAE,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC;QACxD,cAAc,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;QAC/C,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;QACvC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QAC9D,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QACpE,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAC5D,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;KAC1G,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAuB,EACvB,QAAgC;IAEhC,MAAM,UAAU,GAAG,QAAQ,EAAE,SAAS,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACzE,gBAAgB,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,gBAAgB,IAAI,CAAC,CAAC;QAClG,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QACxG,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;QAC9F,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,IAAI,UAAU,EAAE,gBAAgB;QAC5F,UAAU,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC;QACvF,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,UAAU,EAAE,SAAS;QACrE,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,IAAI,UAAU,EAAE,mBAAmB;QACxG,kBAAkB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,IAAI,UAAU,EAAE,kBAAkB;QACpG,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAAuB;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,yBAAyB,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ;SAC/B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;SAChE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,CAAC,OAAO;YACX,yFAAyF;YACzF,gEAAgE;YAChE,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;YAC1E,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK;gBACxE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;oBACpC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;oBAC/D,CAAC,CAAC,KAAK;gBACT,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;aAC/F,CAAC;QACJ,CAAC;KACF,CAAC,CAAC,CAAC;IACN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,QAAQ;QACR,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,2BAA2B,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IAC/B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;YACxC,MAAM;YACN,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,aAAa,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YACpE,UAAU,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAyB,EAAE,QAAgB;IAC1E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAuB;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,IAAI,CACtD,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,KAAK,KAAK,SAAS,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,CAAC,CACvF,CAAC;QACF,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxC,IAAI,QAAQ,KAAK,KAAK,GAAG,EAAE;YAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/captureBrowser.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captureBrowser.d.ts","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"captureBrowser.d.ts","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIhE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,wBAAsB,aAAa,CACjC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChG,OAAO,CAAC,qBAAqB,CAAC,CAgThC"}
|
package/dist/captureBrowser.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// has no top-level Playwright cost and pulls no browser driver into a consumer's module graph until a
|
|
6
6
|
// capture is actually run. Only the `chromium` value is loaded this way; the Browser/BrowserContext
|
|
7
7
|
// types are erased at compile time.
|
|
8
|
+
import { getCaptureTimeoutMs } from './captureTimeout.js';
|
|
8
9
|
export async function launchBrowser(options = {}) {
|
|
9
10
|
const { chromium } = await import('@playwright/test');
|
|
10
11
|
// Headless Chromium exposes navigator.gpu but withholds a Wgpu adapter on a software-only,
|
|
@@ -35,11 +36,18 @@ export async function launchBrowser(options = {}) {
|
|
|
35
36
|
const captureFrames = options.captureFrames ?? 0;
|
|
36
37
|
const verify = options.verify ?? true;
|
|
37
38
|
const observe = options.observe ?? false;
|
|
39
|
+
// The in-page verifier bounds its own waits, and those bounds only mean anything relative to the
|
|
40
|
+
// budget the runner gives one page. Hand it the same number the runner-side waits use, so raising the
|
|
41
|
+
// budget for a contended machine moves every wait together instead of leaving the page's pinned to
|
|
42
|
+
// whatever the runner default happened to be when they were written.
|
|
43
|
+
const timeoutMs = options.timeoutMs ?? getCaptureTimeoutMs();
|
|
38
44
|
await context.addInitScript((args) => {
|
|
39
45
|
const flags = window;
|
|
40
|
-
const { frames, verify, observe } = args;
|
|
46
|
+
const { frames, verify, observe, timeoutMs } = args;
|
|
41
47
|
flags.__flightCapture = true;
|
|
42
48
|
flags.__flightCaptureVerify = verify;
|
|
49
|
+
// Set before the frame-halt early-return below: the verifier reads this budget in every mode.
|
|
50
|
+
flags.__ftCaptureTimeoutMs = timeoutMs;
|
|
43
51
|
// Inline mulberry32 — the exact algorithm of the SDK's createRandomSource (@flighthq/math). It is
|
|
44
52
|
// copied (not imported) on purpose: addInitScript is serialized and injected before any module
|
|
45
53
|
// loads, and the SDK function's *built* source references bundler helpers (e.g. __name) that do
|
|
@@ -175,6 +183,7 @@ export async function launchBrowser(options = {}) {
|
|
|
175
183
|
// freeze at frame N), so this changes no committed hash.
|
|
176
184
|
const observeWarmupCeiling = frames + 120;
|
|
177
185
|
let count = 0;
|
|
186
|
+
let lastCountedFrameTime = -1;
|
|
178
187
|
const realRequestAnimationFrame = window.requestAnimationFrame.bind(window);
|
|
179
188
|
// Expose the un-hijacked rAF so the render verifier can await a genuine presented frame before it
|
|
180
189
|
// reads the canvas back. The override below stops invoking callbacks past the halt frame, so a
|
|
@@ -194,7 +203,11 @@ export async function launchBrowser(options = {}) {
|
|
|
194
203
|
callback(time);
|
|
195
204
|
return;
|
|
196
205
|
}
|
|
197
|
-
|
|
206
|
+
// Browsers invoke every queued rAF callback with the same timestamp for one presented frame.
|
|
207
|
+
// Count that timestamp once: applications, verifier waits, and the harness frame driver may all
|
|
208
|
+
// have callbacks queued together, but they must not make an N-frame capture run N times faster.
|
|
209
|
+
const isNewFrame = time !== lastCountedFrameTime;
|
|
210
|
+
if (isNewFrame && count >= frames) {
|
|
198
211
|
const targetKind = flags.__ftTarget?.kind;
|
|
199
212
|
const gpuVerifying = verify && (targetKind === 'webgl' || targetKind === 'webgpu');
|
|
200
213
|
let done;
|
|
@@ -261,10 +274,13 @@ export async function launchBrowser(options = {}) {
|
|
|
261
274
|
}
|
|
262
275
|
// else: still warming up — fall through to render another frame
|
|
263
276
|
}
|
|
264
|
-
|
|
277
|
+
if (isNewFrame) {
|
|
278
|
+
count++;
|
|
279
|
+
lastCountedFrameTime = time;
|
|
280
|
+
}
|
|
265
281
|
callback(time);
|
|
266
282
|
});
|
|
267
|
-
}, { frames: captureFrames, verify, observe });
|
|
283
|
+
}, { frames: captureFrames, verify, observe, timeoutMs });
|
|
268
284
|
return { browser, context };
|
|
269
285
|
}
|
|
270
286
|
//# sourceMappingURL=captureBrowser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captureBrowser.js","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,uGAAuG;AACvG,EAAE;AACF,uGAAuG;AACvG,sGAAsG;AACtG,oGAAoG;AACpG,oCAAoC;
|
|
1
|
+
{"version":3,"file":"captureBrowser.js","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"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"}
|
package/dist/captureEntry.d.ts
CHANGED
|
@@ -98,7 +98,7 @@ export interface CaptureEntryOptions {
|
|
|
98
98
|
displayLabel?: string;
|
|
99
99
|
/**
|
|
100
100
|
* Forces (true) or disables (false) the in-page render-verification wait + surface readback. Defaults
|
|
101
|
-
*
|
|
101
|
+
* by `isVerifiedCaptureTool(tool)`. An external subject (reference) sets it true once its pages register a
|
|
102
102
|
* functional target, so its WebGL captures read the fingerprinted surface instead of a black canvas.
|
|
103
103
|
*/
|
|
104
104
|
verify?: boolean;
|
|
@@ -183,5 +183,7 @@ export interface CaptureUrlOptions {
|
|
|
183
183
|
/** Additional fresh-browser attempts after a blank, timeout, or navigation failure. Default: 2. */
|
|
184
184
|
maxRetries?: number;
|
|
185
185
|
}
|
|
186
|
+
export declare function isRejectedCaptureBaselineHash(hash: string): boolean;
|
|
186
187
|
export declare function isTransientCaptureError(message: string): boolean;
|
|
188
|
+
export declare function isVerifiedCaptureTool(tool: string): boolean;
|
|
187
189
|
//# sourceMappingURL=captureEntry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captureEntry.d.ts","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAQ,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"captureEntry.d.ts","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"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"}
|
package/dist/captureEntry.js
CHANGED
|
@@ -10,14 +10,15 @@
|
|
|
10
10
|
import { createHash } from 'node:crypto';
|
|
11
11
|
import { mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
12
12
|
import { join, resolve } from 'node:path';
|
|
13
|
-
import pc from 'picocolors';
|
|
14
13
|
import { getBaselineField, setBaselineField } from './baselineStore.js';
|
|
15
14
|
import { launchBrowser } from './captureBrowser.js';
|
|
16
15
|
import { BACKEND_UNAVAILABLE, getCaptureEntryRoute, rendererMatchesFilter, routeSegment } from './captureEntries.js';
|
|
17
|
-
import {
|
|
16
|
+
import { formatStatusLine } from './captureFormat.js';
|
|
18
17
|
import { isBrowserClosedError } from './captureInterrupt.js';
|
|
19
18
|
import { CAPTURE_PROTOCOL_VERSION } from './captureProtocol.js';
|
|
19
|
+
import { findUndrawnRegistryMisses, formatUndrawnRegistryMisses } from './captureRegistryMiss.js';
|
|
20
20
|
import { writeCaptureReport } from './captureReport.js';
|
|
21
|
+
import { getCaptureTimeoutMs } from './captureTimeout.js';
|
|
21
22
|
// Empty-frame threshold for the coverage-derived blank flag: a frame whose measured non-background
|
|
22
23
|
// coverage is at or below this reads as "nothing distinguishable rendered". Small but non-zero so a
|
|
23
24
|
// stray antialiased edge pixel does not count as content.
|
|
@@ -63,9 +64,16 @@ export async function captureEntry(opts) {
|
|
|
63
64
|
const { context, entry, renderers, baseUrl, tool, outBase, root, updateBaseline = false, extraWait = 0, captureFrames = 0, failOnError = false, observe = false, isAborted = () => false, } = opts;
|
|
64
65
|
const { displayLabel } = opts;
|
|
65
66
|
// The in-page render verifier drives the surface readback (__ftRenderImage) that avoids Docker's
|
|
66
|
-
// compositor-only black WebGL screenshots. It is implicit for the
|
|
67
|
-
// (reference) opts in via `verify` once its pages register a functional target.
|
|
68
|
-
|
|
67
|
+
// compositor-only black WebGL screenshots. It is implicit for the monorepo's own subjects; an external
|
|
68
|
+
// subject (reference) opts in via `verify` once its pages register a functional target.
|
|
69
|
+
//
|
|
70
|
+
// Examples are verified for the same reason functional scenes are, plus one specific to them: a
|
|
71
|
+
// software WebGPU adapter cannot present to the swapchain, so a plain Playwright screenshot of an
|
|
72
|
+
// examples page is blank for EVERY scene — nine unrelated scenes produced one identical hash while the
|
|
73
|
+
// same scenes read back correctly through the verifier. Without verification an examples capture means
|
|
74
|
+
// "the page loaded and a screenshot was taken", which a black frame passes; with it, the capture reads
|
|
75
|
+
// the surface the scene actually rendered.
|
|
76
|
+
const verify = opts.verify ?? isVerifiedCaptureTool(tool);
|
|
69
77
|
let anyFailed = false;
|
|
70
78
|
let anyChanged = false;
|
|
71
79
|
// Detail lines below the caller's [N/M] header drop the entry name (the header carries it) and
|
|
@@ -130,7 +138,7 @@ export async function captureEntry(opts) {
|
|
|
130
138
|
});
|
|
131
139
|
});
|
|
132
140
|
try {
|
|
133
|
-
await page.goto(url, { waitUntil: 'domcontentloaded', timeout:
|
|
141
|
+
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: getCaptureTimeoutMs() });
|
|
134
142
|
let earlyObserveIntercept = null;
|
|
135
143
|
let observeTimedOut = false;
|
|
136
144
|
if (!verify) {
|
|
@@ -138,18 +146,27 @@ export async function captureEntry(opts) {
|
|
|
138
146
|
await page.waitForSelector(selector, { timeout: 8_000 }).catch(() => { });
|
|
139
147
|
}
|
|
140
148
|
if (!verify && captureFrames && captureFrames > 0) {
|
|
141
|
-
// A one-shot/static scene may never schedule its own rAF.
|
|
142
|
-
//
|
|
143
|
-
//
|
|
149
|
+
// A one-shot/static scene may never schedule its own rAF. Keep the injected frame controller
|
|
150
|
+
// ticking until it freezes the page, so every scene can reach the requested deterministic frame.
|
|
151
|
+
// launchBrowser counts shared rAF timestamps rather than callbacks, so this driver does not make
|
|
152
|
+
// an application that already owns an animation loop advance twice as fast.
|
|
144
153
|
await page.evaluate(() => {
|
|
145
|
-
|
|
154
|
+
const flags = window;
|
|
155
|
+
const timer = setInterval(() => {
|
|
156
|
+
if (flags.__captureFramesReached) {
|
|
157
|
+
clearInterval(timer);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
requestAnimationFrame(() => { });
|
|
161
|
+
}, 16);
|
|
146
162
|
});
|
|
147
163
|
earlyObserveIntercept = observe ? await grabInterceptedGlFrame(page) : null;
|
|
148
164
|
const alreadyObserved = (earlyObserveIntercept?.coverage ?? (observe ? await measureObservedCanvasCoverage(page) : null) ?? 0) >
|
|
149
165
|
OBSERVE_BLANK_COVERAGE;
|
|
150
166
|
// --frames=N mode: wait until the page has rendered N frames and the halt has frozen it
|
|
151
|
-
// (see launchBrowser).
|
|
152
|
-
//
|
|
167
|
+
// (see launchBrowser). Timer polling is required because the halt deliberately stops rAF;
|
|
168
|
+
// Playwright's default rAF polling would deadlock after the flag becomes true. There is no fixed
|
|
169
|
+
// short delay that could shoot a varying earlier frame, so frame N is captured deterministically.
|
|
153
170
|
if (!alreadyObserved && observe) {
|
|
154
171
|
const observed = await waitForObservedPixels(page, OBSERVE_WARMUP_TIMEOUT_MS);
|
|
155
172
|
earlyObserveIntercept ??= observed.intercept;
|
|
@@ -157,7 +174,8 @@ export async function captureEntry(opts) {
|
|
|
157
174
|
}
|
|
158
175
|
else if (!alreadyObserved) {
|
|
159
176
|
await page.waitForFunction(() => window.__captureFramesReached === true, null, {
|
|
160
|
-
|
|
177
|
+
polling: 100,
|
|
178
|
+
timeout: getCaptureTimeoutMs(),
|
|
161
179
|
});
|
|
162
180
|
}
|
|
163
181
|
}
|
|
@@ -315,6 +333,13 @@ export async function captureEntry(opts) {
|
|
|
315
333
|
let baselineHash = null;
|
|
316
334
|
let changed = null;
|
|
317
335
|
if (updateBaseline) {
|
|
336
|
+
// Hard reject, not a judgment call: this exact hash is a known blank frame, produced when a
|
|
337
|
+
// software WebGPU adapter cannot present to the swapchain. It was nearly committed as ground
|
|
338
|
+
// truth once, caught only because someone opened the PNG. Vigilance is not a control — the write
|
|
339
|
+
// path refuses it regardless of who is driving.
|
|
340
|
+
if (isRejectedCaptureBaselineHash(hash)) {
|
|
341
|
+
throw new Error(`refusing to baseline ${entry.name}/${renderer}: capture produced the known blank frame (${hash.slice(0, 12)}…). Re-run where the backend can actually present, or fix the render.`);
|
|
342
|
+
}
|
|
318
343
|
setBaselineField(root, tool, entry.name, renderer, 'sha256', hash);
|
|
319
344
|
baselineHash = hash;
|
|
320
345
|
changed = false;
|
|
@@ -326,14 +351,13 @@ export async function captureEntry(opts) {
|
|
|
326
351
|
}
|
|
327
352
|
if (changed === true)
|
|
328
353
|
anyChanged = true;
|
|
329
|
-
// A successful capture whose hash drifted is still a
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
}
|
|
354
|
+
// A successful capture whose hash drifted is still a PASS — it rendered, and a smoke leg captures
|
|
355
|
+
// rather than compares, so this must not fail the run. What changes is only the GLYPH: it carries
|
|
356
|
+
// the strongest signal on the line rather than the capture outcome alone, because a drift encoded
|
|
357
|
+
// only in the message text reads as an ordinary green tick to anyone scanning for trouble.
|
|
358
|
+
console.log(changed === true
|
|
359
|
+
? statusLine('changed', renderer, 'changed (hash differs from baseline)')
|
|
360
|
+
: statusLine('pass', renderer, ''));
|
|
337
361
|
const status = {
|
|
338
362
|
protocolVersion: CAPTURE_PROTOCOL_VERSION,
|
|
339
363
|
state: 'ready',
|
|
@@ -363,6 +387,14 @@ export async function captureEntry(opts) {
|
|
|
363
387
|
anyFailed = true;
|
|
364
388
|
}
|
|
365
389
|
}
|
|
390
|
+
// A registry miss that means undrawn output fails the target even though the guards report it
|
|
391
|
+
// at warn level. Checked after the error branch and independently of it: a target can draw a
|
|
392
|
+
// partial picture with no page error at all, which is exactly the case that used to pass.
|
|
393
|
+
const undrawn = findUndrawnRegistryMisses(logs);
|
|
394
|
+
if (undrawn.length > 0) {
|
|
395
|
+
console.error(statusLine('fail', renderer, formatUndrawnRegistryMisses(undrawn)));
|
|
396
|
+
anyFailed = true;
|
|
397
|
+
}
|
|
366
398
|
}
|
|
367
399
|
}
|
|
368
400
|
catch (err) {
|
|
@@ -558,7 +590,7 @@ async function waitForRenderVerification(page) {
|
|
|
558
590
|
if (verification.render === 'dom')
|
|
559
591
|
return true;
|
|
560
592
|
return verification.fingerprint !== null && typeof w.__ftRenderImage === 'string' && w.__ftRenderImage !== '';
|
|
561
|
-
}, null, { polling: 100, timeout:
|
|
593
|
+
}, null, { polling: 100, timeout: getCaptureTimeoutMs() })
|
|
562
594
|
.catch(() => { });
|
|
563
595
|
return page
|
|
564
596
|
.evaluate(() => window.__ftVerification ?? null)
|
|
@@ -732,7 +764,7 @@ async function captureUrlAttempt(url, options, attempt) {
|
|
|
732
764
|
});
|
|
733
765
|
});
|
|
734
766
|
try {
|
|
735
|
-
await page.goto(url, { waitUntil: 'domcontentloaded', timeout:
|
|
767
|
+
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: getCaptureTimeoutMs() });
|
|
736
768
|
await page.evaluate(() => {
|
|
737
769
|
requestAnimationFrame(() => requestAnimationFrame(() => { }));
|
|
738
770
|
});
|
|
@@ -874,7 +906,24 @@ function betterObservedGlFrame(current, candidate) {
|
|
|
874
906
|
return current;
|
|
875
907
|
return current === null || candidate.coverage > current.coverage ? candidate : current;
|
|
876
908
|
}
|
|
909
|
+
// Subjects whose pages register an in-page render verifier, so a capture can read back the rendered
|
|
910
|
+
// surface instead of trusting the compositor. `reference` is external and opts in explicitly via `verify`.
|
|
911
|
+
// Screenshot hashes that must never become a baseline, whatever produced them. This is a denylist of
|
|
912
|
+
// frames observed to be content-free, kept as an explicit constant so the refusal survives a rewrite of
|
|
913
|
+
// the surrounding logic and cannot be argued with at the call site.
|
|
914
|
+
export function isRejectedCaptureBaselineHash(hash) {
|
|
915
|
+
return REJECTED_CAPTURE_BASELINE_HASHES.has(hash);
|
|
916
|
+
}
|
|
877
917
|
export function isTransientCaptureError(message) {
|
|
878
918
|
return /timeout|net::ERR_|page crashed|execution context was destroyed|target page|navigation failed|protocol error|render verifier did not reach/i.test(message);
|
|
879
919
|
}
|
|
920
|
+
export function isVerifiedCaptureTool(tool) {
|
|
921
|
+
return VERIFIED_CAPTURE_TOOLS.has(tool);
|
|
922
|
+
}
|
|
923
|
+
const VERIFIED_CAPTURE_TOOLS = new Set(['examples', 'functional']);
|
|
924
|
+
// The uniform white frame a software WebGPU adapter yields when it cannot present to the swapchain.
|
|
925
|
+
// Observed identically across nine unrelated example scenes, which is what identified it.
|
|
926
|
+
const REJECTED_CAPTURE_BASELINE_HASHES = new Set([
|
|
927
|
+
'a4f2105ecdefec94c5fe749c1dc5f2fb9dd74b9832cba0afcd3434f38c0380d0',
|
|
928
|
+
]);
|
|
880
929
|
//# sourceMappingURL=captureEntry.js.map
|