Debugging cleanups

Add some more debugging notes to the layout and paint node output.
This commit is contained in:
Emmanuele Bassi 2012-03-16 16:16:40 +00:00
parent a7714e294e
commit 1df14c1bac
3 changed files with 66 additions and 25 deletions

View File

@ -2056,24 +2056,24 @@ clutter_actor_notify_if_geometry_changed (ClutterActor *self,
} }
else else
{ {
gfloat xu, yu; gfloat x, y;
gfloat widthu, heightu; gfloat width, height;
xu = priv->allocation.x1; x = priv->allocation.x1;
yu = priv->allocation.y1; y = priv->allocation.y1;
widthu = priv->allocation.x2 - priv->allocation.x1; width = priv->allocation.x2 - priv->allocation.x1;
heightu = priv->allocation.y2 - priv->allocation.y1; height = priv->allocation.y2 - priv->allocation.y1;
if (xu != old->x1) if (x != old->x1)
g_object_notify_by_pspec (obj, obj_props[PROP_X]); g_object_notify_by_pspec (obj, obj_props[PROP_X]);
if (yu != old->y1) if (y != old->y1)
g_object_notify_by_pspec (obj, obj_props[PROP_Y]); g_object_notify_by_pspec (obj, obj_props[PROP_Y]);
if (widthu != (old->x2 - old->x1)) if (width != (old->x2 - old->x1))
g_object_notify_by_pspec (obj, obj_props[PROP_WIDTH]); g_object_notify_by_pspec (obj, obj_props[PROP_WIDTH]);
if (heightu != (old->y2 - old->y1)) if (height != (old->y2 - old->y1))
g_object_notify_by_pspec (obj, obj_props[PROP_HEIGHT]); g_object_notify_by_pspec (obj, obj_props[PROP_HEIGHT]);
} }
@ -2129,7 +2129,9 @@ clutter_actor_set_allocation_internal (ClutterActor *self,
priv->needs_height_request = FALSE; priv->needs_height_request = FALSE;
priv->needs_allocation = FALSE; priv->needs_allocation = FALSE;
if (x1_changed || y1_changed || x2_changed || y2_changed || flags_changed) if (x1_changed || y1_changed ||
x2_changed || y2_changed ||
flags_changed)
{ {
CLUTTER_NOTE (LAYOUT, "Allocation for '%s' changed", CLUTTER_NOTE (LAYOUT, "Allocation for '%s' changed",
_clutter_actor_get_debug_name (self)); _clutter_actor_get_debug_name (self));
@ -3541,30 +3543,22 @@ clutter_actor_continue_paint (ClutterActor *self)
if (_clutter_context_get_pick_mode () == CLUTTER_PICK_NONE) if (_clutter_context_get_pick_mode () == CLUTTER_PICK_NONE)
{ {
ClutterPaintNode *dummy; ClutterPaintNode *dummy;
gboolean emit_paint = TRUE;
/* XXX - this will go away in 2.0, when we can get rid of this /* XXX - this will go away in 2.0, when we can get rid of this
* stuff and switch to a pure retained render tree of PaintNodes * stuff and switch to a pure retained render tree of PaintNodes
* for the entire frame, starting from the Stage; the paint() * for the entire frame, starting from the Stage; the paint()
* virtual function can then be called directly. * virtual function can then be called directly.
*/ */
dummy = _clutter_dummy_node_new (); dummy = _clutter_dummy_node_new (self);
clutter_paint_node_set_name (dummy, "Root"); clutter_paint_node_set_name (dummy, "Root");
/* XXX - for 1.12, we use the return value of paint_node() to /* XXX - for 1.12, we use the return value of paint_node() to
* set the emit_paint variable. * decide whether we should emit the ::paint signal.
*/ */
clutter_actor_paint_node (self, dummy); clutter_actor_paint_node (self, dummy);
clutter_paint_node_unref (dummy); clutter_paint_node_unref (dummy);
if (emit_paint || CLUTTER_ACTOR_IS_TOPLEVEL (self)) g_signal_emit (self, actor_signals[PAINT], 0);
g_signal_emit (self, actor_signals[PAINT], 0);
else
{
CLUTTER_NOTE (PAINT, "The actor '%s' painted using PaintNodes, "
"skipping the emission of the paint signal.",
_clutter_actor_get_debug_name (self));
}
} }
else else
{ {
@ -8154,6 +8148,16 @@ clutter_actor_update_constraints (ClutterActor *self,
_clutter_constraint_update_allocation (constraint, _clutter_constraint_update_allocation (constraint,
self, self,
allocation); allocation);
CLUTTER_NOTE (LAYOUT,
"Allocation of '%s' after constraint '%s': "
"{ %.2f, %.2f, %.2f, %.2f }",
_clutter_actor_get_debug_name (self),
_clutter_actor_meta_get_debug_name (meta),
allocation->x1,
allocation->y1,
allocation->x2,
allocation->y2);
} }
} }
} }
@ -8372,6 +8376,9 @@ clutter_actor_allocate (ClutterActor *self,
CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IN_RELAYOUT); CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IN_RELAYOUT);
CLUTTER_NOTE (LAYOUT, "Calling %s::allocate()",
_clutter_actor_get_debug_name (self));
klass = CLUTTER_ACTOR_GET_CLASS (self); klass = CLUTTER_ACTOR_GET_CLASS (self);
klass->allocate (self, &real_allocation, flags); klass->allocate (self, &real_allocation, flags);

View File

@ -108,7 +108,7 @@ ClutterPaintNode * _clutter_root_node_new (CoglFra
CoglBufferBit clear_flags, CoglBufferBit clear_flags,
const CoglMatrix *matrix); const CoglMatrix *matrix);
ClutterPaintNode * _clutter_transform_node_new (const CoglMatrix *matrix); ClutterPaintNode * _clutter_transform_node_new (const CoglMatrix *matrix);
ClutterPaintNode * _clutter_dummy_node_new (void); ClutterPaintNode * _clutter_dummy_node_new (ClutterActor *actor);
void _clutter_paint_node_paint (ClutterPaintNode *root); void _clutter_paint_node_paint (ClutterPaintNode *root);
void _clutter_paint_node_dump_tree (ClutterPaintNode *root); void _clutter_paint_node_dump_tree (ClutterPaintNode *root);

View File

@ -42,6 +42,7 @@
#include <pango/pango.h> #include <pango/pango.h>
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include "clutter-actor-private.h"
#include "clutter-color.h" #include "clutter-color.h"
#include "clutter-debug.h" #include "clutter-debug.h"
#include "clutter-private.h" #include "clutter-private.h"
@ -265,6 +266,8 @@ typedef struct _ClutterPaintNodeClass ClutterDummyNodeClass;
struct _ClutterDummyNode struct _ClutterDummyNode
{ {
ClutterPaintNode parent_instance; ClutterPaintNode parent_instance;
ClutterActor *actor;
}; };
G_DEFINE_TYPE (ClutterDummyNode, clutter_dummy_node, CLUTTER_TYPE_PAINT_NODE) G_DEFINE_TYPE (ClutterDummyNode, clutter_dummy_node, CLUTTER_TYPE_PAINT_NODE)
@ -275,12 +278,37 @@ clutter_dummy_node_pre_draw (ClutterPaintNode *node)
return TRUE; return TRUE;
} }
static JsonNode *
clutter_dummy_node_serialize (ClutterPaintNode *node)
{
ClutterDummyNode *dnode = (ClutterDummyNode *) node;
JsonBuilder *builder;
JsonNode *res;
if (dnode->actor == NULL)
return json_node_new (JSON_NODE_NULL);
builder = json_builder_new ();
json_builder_begin_object (builder);
json_builder_set_member_name (builder, "actor");
json_builder_add_string_value (builder, _clutter_actor_get_debug_name (dnode->actor));
json_builder_end_object (builder);
res = json_builder_get_root (builder);
g_object_unref (builder);
return res;
}
static void static void
clutter_dummy_node_class_init (ClutterDummyNodeClass *klass) clutter_dummy_node_class_init (ClutterDummyNodeClass *klass)
{ {
ClutterPaintNodeClass *node_class = CLUTTER_PAINT_NODE_CLASS (klass); ClutterPaintNodeClass *node_class = CLUTTER_PAINT_NODE_CLASS (klass);
node_class->pre_draw = clutter_dummy_node_pre_draw; node_class->pre_draw = clutter_dummy_node_pre_draw;
node_class->serialize = clutter_dummy_node_serialize;
} }
static void static void
@ -289,9 +317,15 @@ clutter_dummy_node_init (ClutterDummyNode *self)
} }
ClutterPaintNode * ClutterPaintNode *
_clutter_dummy_node_new (void) _clutter_dummy_node_new (ClutterActor *actor)
{ {
return _clutter_paint_node_create (_clutter_dummy_node_get_type ()); ClutterPaintNode *res;
res = _clutter_paint_node_create (_clutter_dummy_node_get_type ());
((ClutterDummyNode *) res)->actor = actor;
return res;
} }
/* /*