actor: Do not use G_UNLIKELY in paint()
authorEmmanuele Bassi <ebassi@linux.intel.com>
Fri, 9 Apr 2010 17:24:09 +0000 (18:24 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Fri, 9 Apr 2010 17:28:37 +0000 (18:28 +0100)
We decide whether the paint() should be a real paint or a paint in pick
mode depending on the global pick_mode value. Using G_UNLIKELY() on an
operation that most likely is going to be executed once every frame is
going to blow a lot of cache lines and frak with the CPU branch
prediction. Not good.

clutter/clutter-actor.c

index 0dc201a..616d3db 100644 (file)
@@ -2515,7 +2515,18 @@ clutter_actor_paint (ClutterActor *self)
       clip_set = TRUE;
     }
 
-  if (G_UNLIKELY (context->pick_mode != CLUTTER_PICK_NONE))
+  if (context->pick_mode == CLUTTER_PICK_NONE)
+    {
+      CLUTTER_COUNTER_INC (_clutter_uprof_context, actor_paint_counter);
+
+      clutter_actor_shader_pre_paint (self, FALSE);
+
+      self->priv->propagated_one_redraw = FALSE;
+      g_signal_emit (self, actor_signals[PAINT], 0);
+
+      clutter_actor_shader_post_paint (self);
+    }
+  else
     {
       ClutterColor col = { 0, };
 
@@ -2529,17 +2540,6 @@ clutter_actor_paint (ClutterActor *self)
        */
       g_signal_emit (self, actor_signals[PICK], 0, &col);
     }
-  else
-    {
-      CLUTTER_COUNTER_INC (_clutter_uprof_context, actor_paint_counter);
-
-      clutter_actor_shader_pre_paint (self, FALSE);
-
-      self->priv->propagated_one_redraw = FALSE;
-      g_signal_emit (self, actor_signals[PAINT], 0);
-
-      clutter_actor_shader_post_paint (self);
-    }
 
   if (clip_set)
     cogl_clip_pop();