Context
The #15252 film pipeline's capture arc (13 takes + 3 renderer probes, receipts in the production root) isolated why every capture grain — display, region, and CGWindowID — recorded BLACK while the five-beat journey passed underneath: the headed E2E browser never composites a presentable frame under the benchmark launch args. page.screenshot() starves for the full 180s test timeout under E2E_LAUNCH_ARGS; the same run paints instantly (305KB rich frame, the full dense workstation) without them.
The Problem
Bisect receipts (each = one live headed morph run at dev 26a3e261a0-era heads, macOS 26.5.2 / M5 Max / retina + BenQ):
| Args |
Composites? |
Vessel births? |
Morph |
E2E_LAUNCH_ARGS (GPU intent + full base) |
NO — page.screenshot times out at 180s; all screen captures black |
yes |
green (worker-truth only) |
| none (Playwright defaults) |
yes |
NO — exitFired=true, vessel never born (backgrounding throttles the newborn popup's renderer before its SharedWorker joins) |
red |
BASE_LAUNCH_ARGS minus the 4 throttle/framerate flags |
yes |
NO (same birth failure) |
red |
BASE_LAUNCH_ARGS minus ONLY --disable-frame-rate-limit (no GPU-intent args) |
yes (306KB painted probe) |
yes |
GREEN — 2 passed, 9.5s |
So: --disable-frame-rate-limit suppresses compositing on this host class entirely (renderer runs, DOM/worker/NL all live, zero presented frames), while the backgrounding-disable trio is LOAD-BEARING for tear-out vessel birth (an occluded newborn popup throttles before joining the shared heap without them). The benchmark args stay correct for benchmarks; film takes need frames on glass.
Adjacent: this compositing suppression is a strong candidate mechanism for the #15813-family canvas-screenshot instability (the WorkstationNL tour-journey witness fails at targetCanvas.screenshot() "waiting for element to be stable" under the same args).
The Fix
test/playwright/playwright.config.e2e.mjs: the chromium project's launchOptions.args become env-conditional — NEO_FILM_TAKE=1 launches with BASE_LAUNCH_ARGS minus --disable-frame-rate-limit (no GPU-intent args; capture needs normal vsync compositing, not benchmark-grade rendering); the default path is byte-identical to today. One filtered-constant + one ternary, both documented against this ticket's receipt table.
Acceptance Criteria
Out of Scope
Retuning the benchmark args themselves; the #15813-family canvas witness fix (candidate mechanism noted, separate verification); the v0 draft cut (assembly plan already banked in the production record).
Related
#15252 (the film — consumes this), PR #15840 / #15907 (increment 1, merged — its film-take mode ships the pacing/fronting this profile completes), #15906 (increment 2). Discovery instrument: the renderer-proof probe (page.screenshot compositor-starvation as a mechanical paint test).
Live latest-open sweep: checked latest 10 open issues at 2026-07-25T14:43Z; no equivalent. Own-lane continuation; no colliding claim.
Origin Session ID: b8c9e338-27b3-4385-99ac-dce459733940
Retrieval Hint: "film take launch profile disable-frame-rate-limit compositing black capture bisect"
Context
The
#15252film pipeline's capture arc (13 takes + 3 renderer probes, receipts in the production root) isolated why every capture grain — display, region, and CGWindowID — recorded BLACK while the five-beat journey passed underneath: the headed E2E browser never composites a presentable frame under the benchmark launch args.page.screenshot()starves for the full 180s test timeout underE2E_LAUNCH_ARGS; the same run paints instantly (305KB rich frame, the full dense workstation) without them.The Problem
Bisect receipts (each = one live headed morph run at dev
26a3e261a0-era heads, macOS 26.5.2 / M5 Max / retina + BenQ):E2E_LAUNCH_ARGS(GPU intent + full base)page.screenshottimes out at 180s; all screen captures blackexitFired=true, vessel never born (backgrounding throttles the newborn popup's renderer before its SharedWorker joins)BASE_LAUNCH_ARGSminus the 4 throttle/framerate flagsBASE_LAUNCH_ARGSminus ONLY--disable-frame-rate-limit(no GPU-intent args)So:
--disable-frame-rate-limitsuppresses compositing on this host class entirely (renderer runs, DOM/worker/NL all live, zero presented frames), while the backgrounding-disable trio is LOAD-BEARING for tear-out vessel birth (an occluded newborn popup throttles before joining the shared heap without them). The benchmark args stay correct for benchmarks; film takes need frames on glass.Adjacent: this compositing suppression is a strong candidate mechanism for the
#15813-family canvas-screenshot instability (the WorkstationNL tour-journey witness fails attargetCanvas.screenshot()"waiting for element to be stable" under the same args).The Fix
test/playwright/playwright.config.e2e.mjs: the chromium project'slaunchOptions.argsbecome env-conditional —NEO_FILM_TAKE=1launches withBASE_LAUNCH_ARGSminus--disable-frame-rate-limit(no GPU-intent args; capture needs normal vsync compositing, not benchmark-grade rendering); the default path is byte-identical to today. One filtered-constant + one ternary, both documented against this ticket's receipt table.Acceptance Criteria
NEO_FILM_TAKE=1headed morph run paints (apage.screenshotcompletes with a rich frame) AND passes — the round-2 bisect receipt reproduced with the committed config.E2E_LAUNCH_ARGS(gl-probe semantics untouched).Out of Scope
Retuning the benchmark args themselves; the
#15813-family canvas witness fix (candidate mechanism noted, separate verification); the v0 draft cut (assembly plan already banked in the production record).Related
#15252(the film — consumes this), PR #15840 /#15907(increment 1, merged — its film-take mode ships the pacing/fronting this profile completes),#15906(increment 2). Discovery instrument: the renderer-proof probe (page.screenshotcompositor-starvation as a mechanical paint test).Live latest-open sweep: checked latest 10 open issues at 2026-07-25T14:43Z; no equivalent. Own-lane continuation; no colliding claim.
Origin Session ID: b8c9e338-27b3-4385-99ac-dce459733940
Retrieval Hint: "film take launch profile disable-frame-rate-limit compositing black capture bisect"