[mutter/gbsneto/screencast-improvements: 5/9] clutter/stage: Emit after-paint after painting



commit d05219c11f01f17c3dbec402d1afbfd8f0f54f20
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Jun 17 19:16:47 2019 -0300

    clutter/stage: Emit after-paint after painting
    
    ClutterStage:after-paint is supposed to be emitted after all
    painting is done, but before the frame is finished. However,
    as it is right now, it is being emitted after each view is
    painted -- on multi-monitor setups, after-frame is being
    emitted multiple times.
    
    Send after-paint only once, after all views are painted and
    before finishing the frame.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/623

 clutter/clutter/clutter-stage-private.h   | 1 +
 clutter/clutter/clutter-stage.c           | 5 +++++
 clutter/clutter/cogl/clutter-stage-cogl.c | 2 ++
 3 files changed, 8 insertions(+)
---
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
index 74d4f7bfd..b4255a475 100644
--- a/clutter/clutter/clutter-stage-private.h
+++ b/clutter/clutter/clutter-stage-private.h
@@ -40,6 +40,7 @@ void                _clutter_stage_paint_view            (ClutterStage
                                                           ClutterStageView            *view,
                                                           const cairo_rectangle_int_t *clip);
 
+void                _clutter_stage_emit_after_paint      (ClutterStage          *stage);
 void                _clutter_stage_set_window            (ClutterStage          *stage,
                                                           ClutterStageWindow    *stage_window);
 ClutterStageWindow *_clutter_stage_get_window            (ClutterStage          *stage);
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 8c4562e54..bb7227221 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -683,6 +683,11 @@ _clutter_stage_paint_view (ClutterStage                *stage,
   COGL_TRACE_BEGIN_SCOPED (ClutterStagePaintView, "Paint (view)");
 
   clutter_stage_do_paint_view (stage, view, clip);
+}
+
+void
+_clutter_stage_emit_after_paint (ClutterStage *stage)
+{
   g_signal_emit (stage, stage_signals[AFTER_PAINT], 0);
 }
 
diff --git a/clutter/clutter/cogl/clutter-stage-cogl.c b/clutter/clutter/cogl/clutter-stage-cogl.c
index 8898a3b64..8f97a5fa6 100644
--- a/clutter/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/clutter/cogl/clutter-stage-cogl.c
@@ -983,6 +983,8 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
         clutter_stage_cogl_redraw_view (stage_window, view) || swap_event;
     }
 
+  _clutter_stage_emit_after_paint (stage_cogl->wrapper);
+
   _clutter_stage_window_finish_frame (stage_window);
 
   if (swap_event)


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