fix(renderer): prevent stale SwiftShader layers

This commit is contained in:
Miguel Ángel
2026-07-16 04:56:36 +00:00
parent 33a4f82dca
commit 54a3ef2000
7 changed files with 484 additions and 0 deletions
@@ -121,6 +121,12 @@ type TestMetadata = {
* guard; omit for the default screenshot/BeginFrame capture.
*/
experimentalFastCapture?: boolean;
/**
* Pin the browser capture path for a regression fixture. The producer's
* software-GPU default normally prefers screenshots, so BeginFrame-only
* compositor regressions must opt out explicitly to exercise that path.
*/
captureMode?: "screenshot" | "beginframe";
/**
* Render-time variable overrides, equivalent to `hyperframes render
* --variables '<json>'`. Injected as `window.__hfVariables` before any
@@ -390,6 +396,15 @@ function validateMetadata(meta: unknown): TestMetadata {
"meta.json: 'renderConfig.experimentalFastCapture' must be a boolean (or omit for false)",
);
}
if (
rc.captureMode !== undefined &&
rc.captureMode !== "screenshot" &&
rc.captureMode !== "beginframe"
) {
throw new Error(
"meta.json: 'renderConfig.captureMode' must be 'screenshot' or 'beginframe' (or omitted)",
);
}
if (
rc.variables !== undefined &&
(rc.variables === null || typeof rc.variables !== "object" || Array.isArray(rc.variables))
@@ -1037,7 +1052,12 @@ async function runTestSuite(
// var, scoped to this suite's render so it never leaks to other suites.
const useFast = suite.meta.renderConfig.experimentalFastCapture === true;
const prevFast = process.env.PRODUCER_EXPERIMENTAL_FAST_CAPTURE;
const captureMode = suite.meta.renderConfig.captureMode;
const prevForceScreenshot = process.env.PRODUCER_FORCE_SCREENSHOT;
if (useFast) process.env.PRODUCER_EXPERIMENTAL_FAST_CAPTURE = "true";
if (captureMode) {
process.env.PRODUCER_FORCE_SCREENSHOT = captureMode === "screenshot" ? "true" : "false";
}
try {
const job = createRenderJob({
fps: suite.meta.renderConfig.fps,
@@ -1056,6 +1076,10 @@ async function runTestSuite(
if (prevFast === undefined) delete process.env.PRODUCER_EXPERIMENTAL_FAST_CAPTURE;
else process.env.PRODUCER_EXPERIMENTAL_FAST_CAPTURE = prevFast;
}
if (captureMode) {
if (prevForceScreenshot === undefined) delete process.env.PRODUCER_FORCE_SCREENSHOT;
else process.env.PRODUCER_FORCE_SCREENSHOT = prevForceScreenshot;
}
}
}