Fix slow, choppy mouse at 60Hz refresh rate#611
Merged
Conversation
Captured pointer moves read only the last sample of each batched MotionEvent, dropping the historical samples that carry the rest of the motion at lower refresh rates. Sum history plus current sample for the relative-axis deltas and the getX/getY fallback.
The refresh-rate override injected a wall-clock frame limiter into the guest with vsync disabled, which drifts against the panel vsync grid and causes judder felt most in the mouse. Cap frames through the vsync-aligned pacer instead and drop the guest-side limiter; an explicit FPS-limit slider value still takes priority.
Coalesced render requests took a main-handler hop before arming the frame callback, so vsync-phased requests like captured mouse moves only rendered every other frame - a 30fps cursor on a 60Hz panel. Post the callback directly on the cached main Choreographer instead. Also clear preferredRefreshRate when a display mode id is set so the refresh-rate vote applies consistently across devices.
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.
Captured pointer moves read only the last sample of each batched MotionEvent, dropping the historical samples that carry the rest of the motion at lower refresh rates. Sum history plus current sample for the relative-axis deltas and the getX/getY fallback.