mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 23:03:09 +00:00
fix(engine,producer): drive forceScreenshot from one authoritative local
Miguel R4 blocker on #2359: my R3 fix at renderOrchestrator only updated the observability copy, leaving the authoritative captureForceScreenshot local at compileResult.forceScreenshot (false for auto→software). The frameCapture side clamped its own local and correctly routed screenshot, but downstream orchestrator code overwrote observability back to beginframe from the still-false local at two sites: - Parallel-stream label at renderOrchestrator.ts:2293 mis-labelled the stream as 'beginframe' when actual capture was 'screenshot'. - capture_strategy telemetry at renderOrchestrator.ts:2440-2450 overwrote the earlier observability correction, so the final captureMode observation flipped back to 'beginframe' while the engine actually captured screenshot. Fix: extract the clamp into a caller-facing helper applyConcreteGpuScreenshotClamp(current, resolvedGpuMode, cfg) that returns the (possibly-promoted) new boolean. Callers assign it back to their authoritative local, so routing + telemetry + strategy code read one value. Changes: - packages/engine/src/config.ts: new exported applyConcreteGpuScreenshotClamp; delegates to shouldClampToScreenshotForConcreteGpu but computes the caller's final value, not just the clamp decision. Reads the programmatic opt-out from cfg.forceScreenshotExplicitlyOptedOut. Idempotent on already-true input. - packages/engine/src/index.ts: export the new helper. - packages/engine/src/services/frameCapture.ts: replace the inline OR expression with applyConcreteGpuScreenshotClamp. - packages/producer/src/services/renderOrchestrator.ts: assign result into the AUTHORITATIVE captureForceScreenshot local (was updating only observability). Downstream parallel-stream label at :2293 and capture_strategy telemetry at :2440-2450 now read the corrected value. Tests: 6 new caller-level cases for applyConcreteGpuScreenshotClamp covering the exact matrix Miguel called out: - resolved software + default false → promotes to true (screenshot) - resolved software + programmatic opt-out → stays false (BeginFrame) - resolved hardware + default false → stays false - resolved software + already-true → stays true (idempotent) - resolved software + env PRODUCER_FORCE_SCREENSHOT=false → stays false - resolved software + undefined cfg → promotes to true (frameCapture path) Local: 67/67 engine config tests pass (was 61). oxfmt clean.
This commit is contained in:
@@ -661,3 +661,31 @@ export function shouldClampToScreenshotForConcreteGpu(
|
||||
if (opts.programmaticOptOut) return false;
|
||||
return env["PRODUCER_FORCE_SCREENSHOT"] !== "false";
|
||||
}
|
||||
|
||||
/**
|
||||
* Caller-facing pair to `shouldClampToScreenshotForConcreteGpu`: computes the
|
||||
* value the *authoritative* `forceScreenshot` local should hold after the
|
||||
* concrete-resolved-GPU decision fires. Returns the (possibly-promoted) new
|
||||
* boolean, so the caller can assign it back to its local — driving both
|
||||
* routing AND telemetry from one source of truth.
|
||||
*
|
||||
* Reads the programmatic opt-out from `cfg.forceScreenshotExplicitlyOptedOut`
|
||||
* (set by `resolveConfig` when EITHER env `PRODUCER_FORCE_SCREENSHOT=false`
|
||||
* OR programmatic `overrides.forceScreenshot === false` was present).
|
||||
*
|
||||
* Idempotent: `applyConcreteGpuScreenshotClamp(true, ...)` returns `true`
|
||||
* without consulting anything else.
|
||||
*/
|
||||
export function applyConcreteGpuScreenshotClamp(
|
||||
currentForceScreenshot: boolean,
|
||||
resolvedGpuMode: "software" | "hardware",
|
||||
cfg: Pick<EngineConfig, "forceScreenshotExplicitlyOptedOut"> | undefined,
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
): boolean {
|
||||
return (
|
||||
currentForceScreenshot ||
|
||||
shouldClampToScreenshotForConcreteGpu(resolvedGpuMode, currentForceScreenshot, env, {
|
||||
programmaticOptOut: cfg?.forceScreenshotExplicitlyOptedOut ?? false,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user