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



commit 2c70120555df0319bf12505b0a50aadffef80f88
Author: Michel Dänzer <mdaenzer redhat com>
Date:   Fri Nov 26 12:47:44 2021 +0100

    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>

 src/compositor/meta-surface-actor-wayland.c | 6 ++++++
 1 file changed, 6 insertions(+)
---
diff --git a/src/compositor/meta-surface-actor-wayland.c b/src/compositor/meta-surface-actor-wayland.c
index a182ad8513..8c2a93da1e 100644
--- a/src/compositor/meta-surface-actor-wayland.c
+++ b/src/compositor/meta-surface-actor-wayland.c
@@ -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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]