fix(next): smooth window zoom motion

Merged
TE
1d ago
+258-7

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

metricbeforeafterdeltaharness or run link
1x2 window-zoom frame p95 (ms)16.6716.670existing AFTER step 75f549fef2070cb44e894434
1x2 window-zoom max frame (ms)33.035.55+2.55existing BEFORE f3dd8dba08e04d00a0ad640a / AFTER 75f549fef2070cb44e894434
1x2 window-zoom missed frames98-1same 120 Hz vdisplay harness
stress window-zoom frame p95 (ms)28.220.99-7.21same harness
stress window-zoom max frame (ms)86.084.86-1.14same harness
stress window-zoom missed frames129–15 (median 13)unresolvedsame 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
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.