diff --git a/packages/engine/src/config.test.ts b/packages/engine/src/config.test.ts index 6ca3fba90d..e89078c713 100644 --- a/packages/engine/src/config.test.ts +++ b/packages/engine/src/config.test.ts @@ -114,6 +114,36 @@ describe("resolveConfig", () => { expect(config.disableGpu).toBe(false); }); + describe("forceScreenshot / BeginFrame env compatibility", () => { + it("disables BeginFrame when PRODUCER_ENABLE_BEGIN_FRAME is falsey", () => { + setEnv("PRODUCER_ENABLE_BEGIN_FRAME", "false"); + for (const v of ["false", "off", "0", "FALSE"]) { + process.env.PRODUCER_ENABLE_BEGIN_FRAME = v; + expect(resolveConfig().forceScreenshot).toBe(true); + } + }); + + it("keeps BeginFrame eligible when PRODUCER_ENABLE_BEGIN_FRAME is truthy or invalid", () => { + setEnv("PRODUCER_ENABLE_BEGIN_FRAME", "true"); + for (const v of ["true", "on", "1", "maybe"]) { + process.env.PRODUCER_ENABLE_BEGIN_FRAME = v; + expect(resolveConfig().forceScreenshot).toBe(false); + } + }); + + it("preserves PRODUCER_FORCE_SCREENSHOT as the direct force-screenshot knob", () => { + setEnv("PRODUCER_FORCE_SCREENSHOT", "true"); + setEnv("PRODUCER_ENABLE_BEGIN_FRAME", "true"); + + expect(resolveConfig().forceScreenshot).toBe(true); + }); + + it("lets explicit overrides beat both env knobs", () => { + setEnv("PRODUCER_ENABLE_BEGIN_FRAME", "false"); + expect(resolveConfig({ forceScreenshot: false }).forceScreenshot).toBe(false); + }); + }); + it("reads browser GPU mode from env", () => { setEnv("PRODUCER_BROWSER_GPU_MODE", "hardware"); diff --git a/packages/engine/src/config.ts b/packages/engine/src/config.ts index 9efae85fa9..e58b35f5b3 100644 --- a/packages/engine/src/config.ts +++ b/packages/engine/src/config.ts @@ -284,6 +284,10 @@ export function resolveConfig(overrides?: Partial): EngineConfig { if (raw === undefined) return fallback; return raw === "true"; }; + const envFalse = (key: string): boolean => { + const raw = env(key)?.trim().toLowerCase(); + return raw === "false" || raw === "off" || raw === "0"; + }; const envVp9CpuUsed = (): number => { const raw = env("PRODUCER_VP9_CPU_USED"); if (raw === undefined || raw === "") return DEFAULT_CONFIG.vp9CpuUsed; @@ -306,6 +310,9 @@ export function resolveConfig(overrides?: Partial): EngineConfig { const raw = env("HF_STATIC_DEDUP")?.trim().toLowerCase(); return !(raw === "false" || raw === "off" || raw === "0"); }; + const resolveForceScreenshot = (): boolean => + envBool("PRODUCER_FORCE_SCREENSHOT", DEFAULT_CONFIG.forceScreenshot) || + envFalse("PRODUCER_ENABLE_BEGIN_FRAME"); // Env-var layer (backward compat) const fromEnv: Partial = { @@ -330,7 +337,7 @@ export function resolveConfig(overrides?: Partial): EngineConfig { ? Number(env("PRODUCER_EXPECTED_CHROMIUM_MAJOR")) : undefined, - forceScreenshot: envBool("PRODUCER_FORCE_SCREENSHOT", DEFAULT_CONFIG.forceScreenshot), + forceScreenshot: resolveForceScreenshot(), staticFrameDedup: resolveStaticFrameDedup(), lowMemoryMode: resolveLowMemoryMode(), enablePageSideCompositing: envBool(