e781e1fdba
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). 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 004a5e1042 (!704), after which the slow emissions of `notify::opacity` became a more visible performance problem. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2065 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1002