Frame owner S2: delete motion.frameOwner.timing; springs and drags always run on the frame's show time

Merged
LA
3d ago
+71-150

Deletes the FRAME OWNER REFACTOR S2 switch motion.frameOwner.timing and its old paths. S2 landed behind the switch in #33725, and the switch was turned on by default in #33935. Films, typing-load-l6 and an interleaved bench passed before that. With the default on, nothing changes: this is the cleanup that the stage rule asks for after ON.

Summary

Removed:

  • MotionTunables.frameOwnerTiming (Debug Settings motion.frameOwner.timing).
  • FrameTick.motionElapsed. MotionClock, the tab-drag ghost, the window-close fade and the sidebar autoscroll now read FrameTick.frameElapsed directly. Every spring steps to the time its frame shows.
  • LayoutViewContext.frameTimingOverride / dragsOnFrameTick, and the per-event apply in DividerDrag.handle. A divider, column-edge or row-edge move, or a key change, always waits for the window's frame tick (LayoutFrameInput).
  • FrameTick.rawElapsed: it has no reader anywhere.

Kept: FrameTick.elapsed (the vsync delta clamped to 1/240-1/30 s) stays for FeedBench and the probes that pace by the refresh. Motion no longer reads it, and its doc comment now says so. This corrects the plan line in #33935: there I wrote that it stays "for the probes and the film kit". The film kit does not read it; FeedBench (the feed-live-event bench) does.

S1's code (#33874) reads none of the removed names. #34084 (KEYS) ran its divider tests on both drag paths through frameTimingOverride; DividerDragFollowsPointerTests now runs every case on the one path left (its own commit, no expectation changes). The merge with feat also removes dividerReleaseProjection from the same MotionTunables.all line (#34084 deleted it on feat). schemas/defaults/cmux-next.json is not edited by hand: the base autofix regenerates it.

Testing

Gate: the first FEAT DOGFOOD BUILD with S2 ON that was judged, 78d37f8b (feat 441ea22515e0, which contains 63a5b82719f), is JUDGED 10/10, "failing: none" (STATUS 10029, 19:35Z).

The S2 suites now run with no switch setup, so they show that the frame-time and frame-tick paths are the only paths. No new test: nothing changes with the default on.

RunRefStepResult
26 suites (#33725's set: S2, divider drag, motion, FrameScheduler), before the feat mergec8cc2268b0adbb5c9efb8a1bddb887a5894PASSED: 25 suites, PaneMotionWork skips itself (needs CMUX_PANE_BENCH)
32 more drag and frame-clock suites, before the feat mergec8cc2268b0af19293a933a4d601ab9470dePASSED: 31 suites, OutOfSightFrames skips itself (needs a GUI session)
The 26 suites + DividerDragFollowsPointerTests, at this headb362641336d76b2bb77f26ec91fd2a53f4bPASSED: 26 suites incl. DividerDragFollowsPointerTests, PaneMotionWork skips itself
The 32 more suites, at this headb362641336d38df7112ca3c32119406f91cPASSED: 31 suites, OutOfSightFrames skips itself

ParkedPageCatcherPanelsTests is left out: it leaks windows at feat as well (base finding, linked on #33935).

Observed / Not run

Observed: the fleet steps above, at the named sha. Not run: films or the bench again. Nothing changes with the default on.

Changelog

none

Proof

No capture: no behavior changes (the switch was already on).

Review: Codex SHIP at b362641336d1fb4297d45e6ac057a4087a2d9dff (comment 6614152337), nits only.