Skip to content

perf: only redraw the lock screen when something changes#7

Open
josephdunn wants to merge 1 commit into
JorySeverijnse:masterfrom
josephdunn:perf/lock-idle-redraw-dirty-tracking
Open

perf: only redraw the lock screen when something changes#7
josephdunn wants to merge 1 commit into
JorySeverijnse:masterfrom
josephdunn:perf/lock-idle-redraw-dirty-tracking

Conversation

@josephdunn

Copy link
Copy Markdown

The lock screen re-rendered and re-committed every output's full screen-sized cairo surface on every 16ms timer tick regardless of whether anything had changed, burning 60%+ of a core the entire time the session was locked.

Track a dirty flag per surface and render only when state actually changes: a keystroke, a system-status change, the clock minute rolling over, or an in-flight animation. update() now reports whether it redrew, so the timer commits only the surfaces that changed.

Also fix the fade-in never formally completing. The eased alpha approaches 1.0 asymptotically while the 0.001 step throttle suppresses the final sub-threshold increments, leaving fade_alpha stuck just under 1.0. Since "fade_alpha < 1.0" is the "still animating" signal, that kept it permanently true and forced a full render every frame. Snap alpha to exactly 1.0 once the fade duration elapses so the animation completes.

Idle CPU while locked drops from 60%+ to ~2%.

The lock screen re-rendered and re-committed every output's full
screen-sized cairo surface on every 16ms timer tick regardless of
whether anything had changed, burning 60%+ of a core the entire time
the session was locked.

Track a dirty flag per surface and render only when state actually
changes: a keystroke, a system-status change, the clock minute rolling
over, or an in-flight animation. update() now reports whether it
redrew, so the timer commits only the surfaces that changed.

Also fix the fade-in never formally completing. The eased alpha
approaches 1.0 asymptotically while the 0.001 step throttle suppresses
the final sub-threshold increments, leaving fade_alpha stuck just under
1.0. Since "fade_alpha < 1.0" is the "still animating" signal, that kept
it permanently true and forced a full render every frame. Snap alpha to
exactly 1.0 once the fade duration elapses so the animation completes.

Idle CPU while locked drops from 60%+ to ~2%.
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.

1 participant