surface-actor-wayland: Do not acquire scanout if actor appears obscured

This can happen if a texture was newly assigned to the actor, but the
unobscured region hasn't been updated yet. Without bailing here, the
actor would display correctly via direct scanout, but other parts of
mutter would continue considering it obscured, which would e.g. result
in no frame callbacks getting sent for its surface.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1636
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2112>
This commit is contained in:
Michel Dänzer 2021-11-26 12:47:44 +01:00
parent 858b5c12b1
commit 2c70120555

View File

@ -73,6 +73,12 @@ meta_surface_actor_wayland_try_acquire_scanout (MetaSurfaceActorWayland *self,
MetaWaylandSurface *surface;
CoglScanout *scanout;
/* If the actor appears to be obscured, need to go through the normal paint
* machinery to ensure the unobscured region is up to date
*/
if (meta_surface_actor_is_obscured (META_SURFACE_ACTOR (self)))
return NULL;
surface = meta_surface_actor_wayland_get_surface (self);
if (!surface)
return NULL;