Skip to content

Comments

Optimization of Fullscreen Menu Navigation Performance#657

Merged
frysee merged 3 commits intoLoveRetro:mainfrom
KrutzOtrem:fullscreen-scrolling-fix
Feb 17, 2026
Merged

Optimization of Fullscreen Menu Navigation Performance#657
frysee merged 3 commits intoLoveRetro:mainfrom
KrutzOtrem:fullscreen-scrolling-fix

Conversation

@KrutzOtrem
Copy link

@KrutzOtrem KrutzOtrem commented Feb 16, 2026

Issue:
Significant navigation stutter occurred during menu navigation when folder names were hidden. I have been trying to figure out the reason for such a long time, and my long-term hypothesis was that it was due to large image sizes. However, not only did using small image sizes not fix the issue, but using the exact images and enabling menu folder names actually and oddly, fixed the stutter. Yet the reason still eluded me. Recently, I noticed that there was a pattern where it only stuttered in 40% of the images, and always for those specific images (which had nothing to do with images at all).

Cause:
In the menu's idle loop, there is a check for is_scrolling. If an entry name is long enough to scroll (even if it's currently hidden), the code enters a high-priority block meant to update the scrolling text (my use case is that I always use transparent icons to shorten long console names to leave enough space for the background image).

When text is ON: The code enters this block, calculates the scroll position, renders the text to the screen, and eventually triggers a screen refresh (flip). This refresh is synchronized with the hardware's frame rate, which keeps the CPU usage stable.

When text is OFF: The code still enters that same high-priority scrolling block because the entry name itself is still "long." However, because names are hidden, it skips the rendering part. Crucially, it also skips the PLAT_GPU_Flip() call that normally regulates the loop's speed.

By gating is_scrolling with list_show_entry_names at the source, we prevent the system from ever entering that high-priority update loop when text is hidden. This allows the CPU to remain idle between inputs, ensuring the navigation remains responsive. Also, by renaming the other variable to should_animate, we try to avoid messing up the navigation animation by introducing conflicts.

@frysee frysee force-pushed the fullscreen-scrolling-fix branch from d1c94af to 7def988 Compare February 17, 2026 12:46
@frysee frysee merged commit ed4bdf6 into LoveRetro:main Feb 17, 2026
62 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants