[mutter] clutter/stage-cogl: Warn if the fb_clip_region is empty



commit 066e78c9b3945f7e6ef276c92488130ca96076f6
Author: Jonas Dreßler <verdre v0yd nl>
Date:   Fri Mar 6 12:35:27 2020 +0100

    clutter/stage-cogl: Warn if the fb_clip_region is empty
    
    Since a NULL redraw_clip means that a full view redraw should be done
    and an empty redraw clip may never be set (see the width/height checks
    in clutter_stage_view_add_redraw_clip()), the fb_clip_region should
    always be set to a reasonable region that's either the whole view or
    individual regions inside the view.
    
    So make sure that's actually the case by warning and that the
    fb_clip_region isn't empty, which allows dropping another few lines of
    code.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1113

 clutter/clutter/cogl/clutter-stage-cogl.c | 87 +++++++++++--------------------
 1 file changed, 29 insertions(+), 58 deletions(-)
---
diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c
index be37f3487..75e5dfa0c 100644
--- a/clutter/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/clutter/cogl/clutter-stage-cogl.c
@@ -578,16 +578,15 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
   gboolean use_clipped_redraw;
   gboolean can_blit_sub_buffer;
   gboolean has_buffer_age;
-  gboolean do_swap_buffer;
   gboolean swap_with_damage;
   cairo_region_t *redraw_clip;
   cairo_region_t *queued_redraw_clip = NULL;
   cairo_region_t *fb_clip_region;
   cairo_region_t *swap_region;
-  gboolean clip_region_empty;
   float fb_scale;
   int fb_width, fb_height;
   int buffer_age;
+  gboolean res;
 
   clutter_stage_view_get_layout (view, &view_rect);
   fb_scale = clutter_stage_view_get_scale (view);
@@ -653,13 +652,12 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
       redraw_clip = cairo_region_create_rectangle (&view_rect);
     }
 
-  clip_region_empty = (use_clipped_redraw &&
-                       cairo_region_is_empty (fb_clip_region));
+  g_return_val_if_fail (!cairo_region_is_empty (fb_clip_region), FALSE);
 
   swap_with_damage = FALSE;
   if (has_buffer_age)
     {
-      if (use_clipped_redraw && !clip_region_empty)
+      if (use_clipped_redraw)
         {
           cairo_region_t *fb_damage;
           cairo_region_t *view_damage;
@@ -713,11 +711,7 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
         }
     }
 
-  if (use_clipped_redraw && clip_region_empty)
-    {
-      CLUTTER_NOTE (CLIPPING, "Empty stage output paint\n");
-    }
-  else if (use_clipped_redraw)
+  if (use_clipped_redraw)
     {
       cogl_framebuffer_push_region_clip (fb, fb_clip_region);
 
@@ -741,65 +735,42 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
    * artefacts.
    */
   if (use_clipped_redraw)
-    {
-      if (clip_region_empty)
-        {
-          do_swap_buffer = FALSE;
-        }
-      else
-        {
-          swap_region = cairo_region_copy (fb_clip_region);
-          do_swap_buffer = TRUE;
-        }
-    }
+    swap_region = cairo_region_copy (fb_clip_region);
   else
-    {
-      swap_region = cairo_region_create ();
-      do_swap_buffer = TRUE;
-    }
+    swap_region = cairo_region_create ();
 
   g_clear_pointer (&redraw_clip, cairo_region_destroy);
   g_clear_pointer (&fb_clip_region, cairo_region_destroy);
 
-  if (do_swap_buffer)
-    {
-      gboolean res;
-
-      COGL_TRACE_BEGIN_SCOPED (ClutterStageCoglRedrawViewSwapFramebuffer,
-                               "Paint (swap framebuffer)");
-
-      if (clutter_stage_view_get_onscreen (view) !=
-          clutter_stage_view_get_framebuffer (view))
-        {
-          cairo_region_t *transformed_swap_region;
-
-          transformed_swap_region =
-            transform_swap_region_to_onscreen (view, swap_region);
-          cairo_region_destroy (swap_region);
-          swap_region = transformed_swap_region;
-        }
-
-      if (queued_redraw_clip)
-        {
-          paint_damage_region (stage_window, view,
-                               swap_region, queued_redraw_clip);
-          cairo_region_destroy (queued_redraw_clip);
-        }
+  COGL_TRACE_BEGIN_SCOPED (ClutterStageCoglRedrawViewSwapFramebuffer,
+                           "Paint (swap framebuffer)");
 
-      res = swap_framebuffer (stage_window,
-                              view,
-                              swap_region,
-                              swap_with_damage);
+  if (clutter_stage_view_get_onscreen (view) !=
+      clutter_stage_view_get_framebuffer (view))
+    {
+      cairo_region_t *transformed_swap_region;
 
+      transformed_swap_region =
+        transform_swap_region_to_onscreen (view, swap_region);
       cairo_region_destroy (swap_region);
-
-      return res;
+      swap_region = transformed_swap_region;
     }
-  else
+
+  if (queued_redraw_clip)
     {
-      g_clear_pointer (&queued_redraw_clip, cairo_region_destroy);
-      return FALSE;
+      paint_damage_region (stage_window, view,
+                           swap_region, queued_redraw_clip);
+      cairo_region_destroy (queued_redraw_clip);
     }
+
+  res = swap_framebuffer (stage_window,
+                          view,
+                          swap_region,
+                          swap_with_damage);
+
+  cairo_region_destroy (swap_region);
+
+  return res;
 }
 
 static void


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