Android: drive animation frames from the display vsync - #12702
Open
ogoffart wants to merge 1 commit into
Open
Conversation
The event loop capped the poll timeout at a hardcoded 10ms while an animation runs. On a 120Hz display that misses every second vsync, so inertia scrolling drops from 120 to 60fps. Post frame callbacks to the Choreographer from a dedicated helper thread and wake the event loop at each vsync, so the frame rate follows the refresh rate. The thread runs the Choreographer on its own looper to keep its POLL_CALLBACK, which android-activity logs as a spurious error, off the main loop. A fixed 10ms poll remains as a fallback when the thread is unavailable. Fixes: #12407
ogoffart
force-pushed
the
olivier/fix-#12407
branch
from
July 30, 2026 08:14
645fa2b to
e487fcc
Compare
tronical
approved these changes
Jul 30, 2026
tronical
left a comment
Member
There was a problem hiding this comment.
Interesting idea to just use poll_once() followed by main_waker.wake() to trigger the redraw. It's a bit obscure for my taste, but I think this should work just fine :)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The event loop capped the poll timeout at a hardcoded 10ms while an animation runs. On a 120Hz display that misses every second vsync, so inertia scrolling drops from 120 to 60fps.
Post frame callbacks to the Choreographer from a dedicated helper thread and wake the event loop at each vsync, so the frame rate follows the refresh rate. The thread runs the Choreographer on its own looper to keep its POLL_CALLBACK, which android-activity logs as a spurious error, off the main loop. A fixed 10ms poll remains as a fallback when the thread is unavailable.
Fixes: #12407