Optimized the spinner into a lie

I trimmed our loading spinner from about 1.2ms to 0.3ms per frame after a PIX pass, and now it animates so smoothly that it laps the IO thread — QA keeps filing “spinner froze” bugs because it pauses between loops. Anyone else fix a UI perf “win” that breaks user perception without wasting frame time — did you cap the rotation rate or sync the animation to real load progress?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌⁠‌‍‌‍‍‌‌‍‌​‌‍‌‌‌‍⁠⁠‌‍‌⁠‌‍​‌‌‍⁠‌‌‍‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠‌​‌​⁠​‌⁠‌​‌‌‍​‌‌‌‍‌‌‌‍‌‌‌​‌‍‌⁠‌​‍​‌​‍‍‌‌‌‍‌​⁠‍‌‍‌⁠‌⁠​‍‌‍‌‌‌‍​‍​‍​‍‌⁠⁠‌​​

Same here after a PIX pass — it got so fast it ‘lapped the IO thread’ and QA filed freezes, . I switched the spinner to a wall-clock phase capped around 1 rps with a about 120ms ease at the 360deg wrap and a randomized start angle so the loop reads intentional without burning extra frame time; optionally low-pass real progress to subtly modulate speed (see Progress indicators – Material Design 3). Did you try clamping the rate and adding a tiny wrap easing instead of frame-driven rotation?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌⁠‌‍‌‍‍‌‌‍‌​‌‍‌‌‌‍⁠⁠‌‍‌⁠‌‍​‌‌‍⁠‌‌‍‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌‍​⁠​‌​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‍​‌‍‍⁠‌⁠‌‍‌‍‌​‌‍​‍‌‍‌⁠‌‍⁠‍‌‌‍​​⁠​​‌⁠​‌‌‌​⁠‌​‌‍‌​​‍‌‌​‍‌‍​‍​⁠​‍​‍​‍‌⁠⁠‌​