mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-04 07:19:52 +00:00
fix(engine): software-GPU browsers imply screenshot capture
When `browserGpuMode === "software"`, set `forceScreenshot = true` in `resolveConfig`. Explicit opt-outs (`PRODUCER_FORCE_SCREENSHOT=false` or `overrides.forceScreenshot === false`) are honored. This is defense-in-depth on top of the existing platform gates: 1. Linux + software (SwiftShader host) skips BeginFrame, avoiding the compositor stall on shader-heavy frames under CPU raster (same motivation as the closed PR #822). 2. `renderOrchestrator`'s reported `captureMode` field is derived from `cfg.forceScreenshot ? "screenshot" : "beginframe"` — without this clamp it misreports `"beginframe"` for the actual screenshot capture on darwin + software. 3. Any new BeginFrame or drawElement entry point that forgets to gate on GPU mode still routes to screenshot here. Does NOT fix SwiftShader-on-darwin text-rasterization artifacts (an ANGLE-SwiftShader issue on macOS text — the fix there is to use `--browser-gpu`, which routes to `--use-angle=metal`).
This commit is contained in:
@@ -296,6 +296,49 @@ describe("resolveConfig", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("forceScreenshot (software-GPU clamp)", () => {
|
||||
it("forces screenshot capture when browserGpuMode resolves to software", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "software");
|
||||
unsetEnv("PRODUCER_FORCE_SCREENSHOT");
|
||||
const config = resolveConfig();
|
||||
expect(config.forceScreenshot).toBe(true);
|
||||
});
|
||||
|
||||
it("leaves forceScreenshot alone on hardware GPU (default off)", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "hardware");
|
||||
unsetEnv("PRODUCER_FORCE_SCREENSHOT");
|
||||
const config = resolveConfig();
|
||||
expect(config.forceScreenshot).toBe(false);
|
||||
});
|
||||
|
||||
it("does not force screenshot on auto (auto probes to hardware on real GPUs)", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "auto");
|
||||
unsetEnv("PRODUCER_FORCE_SCREENSHOT");
|
||||
const config = resolveConfig();
|
||||
expect(config.forceScreenshot).toBe(false);
|
||||
});
|
||||
|
||||
it("explicit env opt-out (PRODUCER_FORCE_SCREENSHOT=false) is honored on software", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "software");
|
||||
setEnv("PRODUCER_FORCE_SCREENSHOT", "false");
|
||||
const config = resolveConfig();
|
||||
expect(config.forceScreenshot).toBe(false);
|
||||
});
|
||||
|
||||
it("explicit programmatic opt-out is honored on software", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "software");
|
||||
unsetEnv("PRODUCER_FORCE_SCREENSHOT");
|
||||
const config = resolveConfig({ forceScreenshot: false });
|
||||
expect(config.forceScreenshot).toBe(false);
|
||||
});
|
||||
|
||||
it("caller override forceScreenshot=true stays true regardless of GPU mode", () => {
|
||||
setEnv("PRODUCER_BROWSER_GPU_MODE", "hardware");
|
||||
const config = resolveConfig({ forceScreenshot: true });
|
||||
expect(config.forceScreenshot).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("lowMemoryMode", () => {
|
||||
it("forces on for truthy PRODUCER_LOW_MEMORY_MODE values", () => {
|
||||
setEnv("PRODUCER_LOW_MEMORY_MODE", "true");
|
||||
|
||||
Reference in New Issue
Block a user