fix(next): smooth window zoom motion
Summary
Keep window zoom and unzoom presentation on the display-frame path, coalescing content display so window transitions do not jolt or introduce a late layout shift. Add the pane-perf window action and focused acceptance coverage for frame pacing and geometry steps.
Leo's brief: smooth, purposeful window transitions with no jolts or layout shift.
Performance
| metric | before | after | delta | harness or run link |
|---|---|---|---|---|
| 1x2 window-zoom frame p95 (ms) | 16.67 | 16.67 | 0 | existing AFTER step 75f549fef2070cb44e894434 |
| 1x2 window-zoom max frame (ms) | 33.0 | 35.55 | +2.55 | existing BEFORE f3dd8dba08e04d00a0ad640a / AFTER 75f549fef2070cb44e894434 |
| 1x2 window-zoom missed frames | 9 | 8 | -1 | same 120 Hz vdisplay harness |
| stress window-zoom frame p95 (ms) | 28.2 | 20.99 | -7.21 | same harness |
| stress window-zoom max frame (ms) | 86.0 | 84.86 | -1.14 | same harness |
| stress window-zoom missed frames | 12 | 9ā15 (median 13) | unresolved | same harness |
The AFTER report used the requested 120 Hz virtual display (vdisplay: true, 8.32 ms refresh), but exits because the existing acceptance thresholds still reject geometry steps above 0.25 and missed frames under load. No duplicate run was dispatched; the complete report was fetched from the existing step.
Observed / Not run
- Observed: Linux app compile passed at e615d5d4 (
8bdabc5b1818168834ece0f6, 94 s). - Observed: existing 120 Hz BEFORE/AFTER pane-perf steps f3dd8dba08e04d00a0ad640a and 75f549fef2070cb44e894434; AFTER artifact sha256
5d1eff7126bc21d73b1da00356ee1a45575bdf900de57492d27f843252d0ea27. - Not run: a new compile, perf or capture; the coordinator's helper already ran those for this exact head.
Changelog
Changed: window zoom and unzoom transitions keep their content presentation cohesive across display frames.
No capture: the coordinator's existing nightly capture was blocked by system dialogs and missing non-DEV control socket; no duplicate capture was started.
agent-identity footer --repo manaflow-ai/cmux
š¤ Generated with Codex
Agent session: agent session
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith Ā· Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Window zoom and unzoom now pass display: false to setFrame during the animated resize, letting AppKit coalesce content display with the normal frame update instead of requesting synchronous content display. This removes the transition jolt and avoids a late layout shift.
Window motion measurement
Adds a window action to pane-perf-terminal.py that samples window geometry per display frame and validates pacing. It rejects snaps, no-ops, failed restores, missed frames, and displays not near 120 Hz, and reports the active resize's p95/max interval and largest geometry step. A new test file test_window_zoom_motion.py covers the acceptance logic without launching an app.
Performance on the existing harness: frame p95 unchanged (16.67 ms), stress p95 improved from 28.2 ms to 20.99 ms, and 1x2 missed frames dropped from 9 to 8.