Skip to content

iconGrid: Create icon clones in a separate loop

Daniel van Vugt requested to merge vanvugt/gnome-shell:fix-2065-v2 into master

For reasons not yet fully understood, Main.uiGroup.add_actor takes around 10 milliseconds to complete.

Because of this, each actor.opacity = 0 has a good chance of falling on a different frame. And when it does, _opacityChangedId also lands on multiple different frames each incurring a separate relayout cycle. It is this excessive number of relayouts that causes stuttering in the icon grid animation (#2065 (closed)). But it is the slowness of uiGroup.add_actor that causes the number to be excessive when it should be one.

By creating the clones and adding them to uiGroup early, we then enable the existing loop starting the animation to complete within a single frame. And by completing within a single frame all the opacity changes land within the same frame interval, thus incurring only a single relayout instead of many.

This issue went unnoticed until 004a5e10 (!704 (merged)), after which the slow emissions of notify::opacity became a more visible performance problem.

Closes: #2065 (closed)

Edited by Jeff Fortin

Merge request reports