Frame owner S2: delete motion.frameOwner.timing; springs and drags always run on the frame's show time
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 Settingsmotion.frameOwner.timing).FrameTick.motionElapsed. MotionClock, the tab-drag ghost, the window-close fade and the sidebar autoscroll now readFrameTick.frameElapseddirectly. Every spring steps to the time its frame shows.LayoutViewContext.frameTimingOverride/dragsOnFrameTick, and the per-eventapplyinDividerDrag.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.
| Run | Ref | Step | Result |
|---|---|---|---|
| 26 suites (#33725's set: S2, divider drag, motion, FrameScheduler), before the feat merge | c8cc2268b0a | dbb5c9efb8a1bddb887a5894 | PASSED: 25 suites, PaneMotionWork skips itself (needs CMUX_PANE_BENCH) |
| 32 more drag and frame-clock suites, before the feat merge | c8cc2268b0a | f19293a933a4d601ab9470de | PASSED: 31 suites, OutOfSightFrames skips itself (needs a GUI session) |
| The 26 suites + DividerDragFollowsPointerTests, at this head | b362641336d | 76b2bb77f26ec91fd2a53f4b | PASSED: 26 suites incl. DividerDragFollowsPointerTests, PaneMotionWork skips itself |
| The 32 more suites, at this head | b362641336d | 38df7112ca3c32119406f91c | PASSED: 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.