From f8d808f140a4fe84e3002ee5935d4b8317779c9d Mon Sep 17 00:00:00 2001
From: Neil Roberts <neil@linux.intel.com>
Date: Fri, 23 Sep 2011 15:12:44 +0100
Subject: [PATCH] Add a CLUTTER_PAINT debug option to enable continous
 redrawing

When testing the performance of an application, it's often useful to
force it to continuously redraw instead of going idle to help measure
the frame rate. This just adds a CLUTTER_PAINT=continuous-redraw which
causes the master clock to queue a redraw on all of the stages
just before it prepares its source.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
---
 clutter/clutter-debug.h        |  3 ++-
 clutter/clutter-main.c         |  3 ++-
 clutter/clutter-master-clock.c | 14 ++++++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/clutter/clutter-debug.h b/clutter/clutter-debug.h
index 75263fd0c..f4a9bf872 100644
--- a/clutter/clutter-debug.h
+++ b/clutter/clutter-debug.h
@@ -41,7 +41,8 @@ typedef enum {
   CLUTTER_DEBUG_REDRAWS                 = 1 << 2,
   CLUTTER_DEBUG_PAINT_VOLUMES           = 1 << 3,
   CLUTTER_DEBUG_DISABLE_CULLING         = 1 << 4,
-  CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT = 1 << 5
+  CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT = 1 << 5,
+  CLUTTER_DEBUG_CONTINUOUS_REDRAW       = 1 << 6
 } ClutterDrawDebugFlag;
 
 #ifdef CLUTTER_ENABLE_DEBUG
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
index 7a2cdcd6a..105b4ac9e 100644
--- a/clutter/clutter-main.c
+++ b/clutter/clutter-main.c
@@ -183,7 +183,8 @@ static const GDebugKey clutter_paint_debug_keys[] = {
   { "redraws", CLUTTER_DEBUG_REDRAWS },
   { "paint-volumes", CLUTTER_DEBUG_PAINT_VOLUMES },
   { "disable-culling", CLUTTER_DEBUG_DISABLE_CULLING },
-  { "disable-offscreen-redirect", CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT }
+  { "disable-offscreen-redirect", CLUTTER_DEBUG_DISABLE_OFFSCREEN_REDIRECT },
+  { "continuous-redraw", CLUTTER_DEBUG_CONTINUOUS_REDRAW }
 };
 
 #ifdef CLUTTER_ENABLE_PROFILE
diff --git a/clutter/clutter-master-clock.c b/clutter/clutter-master-clock.c
index 1d679243d..ce8d70bc2 100644
--- a/clutter/clutter-master-clock.c
+++ b/clutter/clutter-master-clock.c
@@ -277,6 +277,20 @@ clutter_clock_prepare (GSource *source,
   int delay;
 
   clutter_threads_enter ();
+
+  if (G_UNLIKELY (clutter_paint_debug_flags &
+                  CLUTTER_DEBUG_CONTINUOUS_REDRAW))
+    {
+      ClutterStageManager *stage_manager = clutter_stage_manager_get_default ();
+      const GSList *stages, *l;
+
+      stages = clutter_stage_manager_peek_stages (stage_manager);
+
+      /* Queue a full redraw on all of the stages */
+      for (l = stages; l != NULL; l = l->next)
+        clutter_actor_queue_redraw (l->data);
+    }
+
   delay = master_clock_next_frame_delay (master_clock);
   clutter_threads_leave ();