Skip to content

Honour `CLUTTER_ACTOR_NO_LAYOUT` more efficiently

Daniel van Vugt requested to merge vanvugt/mutter:shallow-relayout into master

If an actor sets flag CLUTTER_ACTOR_NO_LAYOUT then that means it is (or should be) unaffected by queue_relayout calls in its children. So we can avoid propagating queue_relayout all the way up to the stage and avoid a full stage relayout each time.

But those children whose parent has CLUTTER_ACTOR_NO_LAYOUT still need to be allocated at some point. So we do it at the same point where it happened before. Only we now queue a shallow relayout so the allocate run on the next frame doesn't need to descend the whole actor tree anymore. Only a subtree and hopefully very small.

For free-floating and top-level actors this provides a measurable performance benefit. According to Google Profiler, calls to _clutter_stage_maybe_relayout are now so cheap that they no longer show up in performance profiles.

Related to #590 (closed)

Edited by Daniel van Vugt

Merge request reports