Repository navigation
Pace sidebar spinner animations and stop them while hidden - #14832
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The sidebar row spinner is an endless Core Animation rotation that WindowServer runs on its own, so it may recomposite each row at the display's full refresh rate even though the spokes only step ten times a second. Ask Core Animation for 10-20 Hz on the spokes and at most 60 Hz on the arc. Rows also hide an idle spinner instead of removing it, and the hidden view kept its endless animation; hiding now removes it and showing reinstalls it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (3)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
Use viewDidHide/viewDidUnhide instead of an isHidden observer so hiding or showing any ancestor also stops or reinstalls the spinner animation. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sses The changed-suites run for this branch passed visibilityToggleKeepsAppKitTableContainerMounted, and the ratchet requires removing entries that pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The first changed-suites run passed all 10 SidebarHiddenPresentationTests, including the two new tests, and failed only on the known-failure ratchet: |
|
Merge receipt for |
273d9e0 Stop shell integration spawning for disabled features before the first prompt (manaflow-ai#14847) bb2db23 perf(startup): add millisecond and process-uptime fields to startup breadcrumbs (manaflow-ai#14846) 7930dec Pace sidebar spinner animations and stop them while hidden (manaflow-ai#14832) 2fd3c40 Add resize-window CLI and socket command, plus a scrollback resize guard script (manaflow-ai#9826)
The sidebar's agent spinner is an endless Core Animation rotation. WindowServer runs it without involving cmux, so a sampled cmux can look idle while WindowServer keeps recompositing every spinning row, potentially at the display's full refresh rate (160 Hz on the reporter's external display). Behind window glass or a translucent background, each of those frames costs more. The spokes only step ten times a second, so most of those frames change nothing.
preferredFrameRateRangeto 10-20 Hz (its step rate, with 2x headroom so no step is skipped). The arc, used only by the spinner gallery, asks for at most 60 Hz.viewDidHidenow removes the animation when the spinner or any ancestor hides, andviewDidUnhidereinstalls it through the existingshouldAnimategate.The look is unchanged: same spokes, same cadence, same phase lock across rows.
Evidence: regression tests first (
e4c26ced41d), then the fix (e7a3a10d036, with5b5b17cc025moving the hide hook toviewDidHide/viewDidUnhideso an ancestor unhide also restarts the spinner; a standalone AppKit harness confirmed both hooks fire without a window, for the view itself and for an ancestor).SidebarHiddenPresentationTestsgainshiddenSpinnerRemovesItsInstalledAnimationandspinnerAnimationsRequestTheirStepRateFromTheCompositor; they have not run locally (no app test build on this machine), so CI's changed-suites batch is the first execution. The animation builder was typechecked standalone against the macOS 14 SDK target and printed a 10/20/20 Hz range.scripts/verify-local.pypassed (swift-syntax, test-wiring, feature-flags). I could not measure WindowServer directly here (no sudo, no screen-recording grant), so the size of the win is unmeasured.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
Paces sidebar spinner animations to match their visible update rate and stops hidden spinners from consuming compositor work.
visibilityToggleKeepsAppKitTableContainerMounted, which now passes.Written for commit d9256dc. Summary will update on new commits.
Summary by CodeRabbit