clutter: fix hole in ClutterPaintNode

Fixing the missalignment takes the structure from 80 bytes down to 72.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1081
This commit is contained in:
Christian Hergert 2020-02-21 22:36:31 +00:00 committed by Jonas Ådahl
parent aedcfcd010
commit 4c421959dc
7 changed files with 39 additions and 23 deletions

View File

@ -3474,8 +3474,8 @@ _clutter_actor_draw_paint_volume_full (ClutterActor *self,
cogl_pipeline_set_color (outline, &cogl_color); cogl_pipeline_set_color (outline, &cogl_color);
pipeline_node = clutter_pipeline_node_new (outline); pipeline_node = clutter_pipeline_node_new (outline);
clutter_paint_node_set_name (pipeline_node, clutter_paint_node_set_static_name (pipeline_node,
"ClutterActor (paint volume outline)"); "ClutterActor (paint volume outline)");
clutter_paint_node_add_primitive (pipeline_node, prim); clutter_paint_node_add_primitive (pipeline_node, prim);
clutter_paint_node_add_child (node, pipeline_node); clutter_paint_node_add_child (node, pipeline_node);
cogl_object_unref (prim); cogl_object_unref (prim);
@ -3489,8 +3489,8 @@ _clutter_actor_draw_paint_volume_full (ClutterActor *self,
pango_layout_set_text (layout, label, -1); pango_layout_set_text (layout, label, -1);
text_node = clutter_text_node_new (layout, color); text_node = clutter_text_node_new (layout, color);
clutter_paint_node_set_name (text_node, clutter_paint_node_set_static_name (text_node,
"ClutterActor (paint volume label)"); "ClutterActor (paint volume label)");
clutter_paint_node_add_rectangle (text_node, clutter_paint_node_add_rectangle (text_node,
&(ClutterActorBox) { &(ClutterActorBox) {
.x1 = pv->vertices[0].x, .x1 = pv->vertices[0].x,
@ -3586,8 +3586,8 @@ _clutter_actor_paint_cull_result (ClutterActor *self,
pango_layout_set_text (layout, label, -1); pango_layout_set_text (layout, label, -1);
text_node = clutter_text_node_new (layout, &color); text_node = clutter_text_node_new (layout, &color);
clutter_paint_node_set_name (text_node, clutter_paint_node_set_static_name (text_node,
"ClutterActor (paint volume text)"); "ClutterActor (paint volume text)");
clutter_paint_node_add_rectangle (text_node, clutter_paint_node_add_rectangle (text_node,
&(ClutterActorBox) { &(ClutterActorBox) {
.x1 = 0.f, .x1 = 0.f,
@ -3868,7 +3868,7 @@ clutter_actor_paint_node (ClutterActor *actor,
clear_flags = COGL_BUFFER_BIT_DEPTH; clear_flags = COGL_BUFFER_BIT_DEPTH;
node = clutter_root_node_new (fb, &bg_color, clear_flags); node = clutter_root_node_new (fb, &bg_color, clear_flags);
clutter_paint_node_set_name (node, "stageClear"); clutter_paint_node_set_static_name (node, "stageClear");
clutter_paint_node_add_rectangle (node, &box); clutter_paint_node_add_rectangle (node, &box);
clutter_paint_node_add_child (root, node); clutter_paint_node_add_child (root, node);
clutter_paint_node_unref (node); clutter_paint_node_unref (node);
@ -3883,7 +3883,7 @@ clutter_actor_paint_node (ClutterActor *actor,
/ 255; / 255;
node = clutter_color_node_new (&bg_color); node = clutter_color_node_new (&bg_color);
clutter_paint_node_set_name (node, "backgroundColor"); clutter_paint_node_set_static_name (node, "backgroundColor");
clutter_paint_node_add_rectangle (node, &box); clutter_paint_node_add_rectangle (node, &box);
clutter_paint_node_add_child (root, node); clutter_paint_node_add_child (root, node);
clutter_paint_node_unref (node); clutter_paint_node_unref (node);
@ -4167,7 +4167,7 @@ clutter_actor_continue_paint (ClutterActor *self,
*/ */
framebuffer = clutter_paint_context_get_base_framebuffer (paint_context); framebuffer = clutter_paint_context_get_base_framebuffer (paint_context);
dummy = _clutter_dummy_node_new (self, framebuffer); dummy = _clutter_dummy_node_new (self, framebuffer);
clutter_paint_node_set_name (dummy, "Root"); clutter_paint_node_set_static_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
* decide whether we should emit the ::paint signal. * decide whether we should emit the ::paint signal.
@ -21171,7 +21171,7 @@ clutter_actor_create_texture_paint_node (ClutterActor *self,
color.alpha = clutter_actor_get_paint_opacity_internal (self); color.alpha = clutter_actor_get_paint_opacity_internal (self);
node = clutter_texture_node_new (texture, &color, priv->min_filter, priv->mag_filter); node = clutter_texture_node_new (texture, &color, priv->min_filter, priv->mag_filter);
clutter_paint_node_set_name (node, "Texture"); clutter_paint_node_set_static_name (node, "Texture");
if (priv->content_repeat == CLUTTER_REPEAT_NONE) if (priv->content_repeat == CLUTTER_REPEAT_NONE)
clutter_paint_node_add_rectangle (node, &box); clutter_paint_node_add_rectangle (node, &box);

View File

@ -352,7 +352,7 @@ clutter_canvas_paint_content (ClutterContent *content,
return; return;
node = clutter_actor_create_texture_paint_node (actor, priv->texture); node = clutter_actor_create_texture_paint_node (actor, priv->texture);
clutter_paint_node_set_name (node, "Canvas Content"); clutter_paint_node_set_static_name (node, "Canvas Content");
clutter_paint_node_add_child (root, node); clutter_paint_node_add_child (root, node);
clutter_paint_node_unref (node); clutter_paint_node_unref (node);

View File

@ -130,7 +130,7 @@ clutter_image_paint_content (ClutterContent *content,
return; return;
node = clutter_actor_create_texture_paint_node (actor, priv->texture); node = clutter_actor_create_texture_paint_node (actor, priv->texture);
clutter_paint_node_set_name (node, "Image Content"); clutter_paint_node_set_static_name (node, "Image Content");
clutter_paint_node_add_child (root, node); clutter_paint_node_add_child (root, node);
clutter_paint_node_unref (node); clutter_paint_node_unref (node);
} }

View File

@ -49,11 +49,11 @@ struct _ClutterPaintNode
ClutterPaintNode *next_sibling; ClutterPaintNode *next_sibling;
ClutterPaintNode *last_child; ClutterPaintNode *last_child;
guint n_children;
GArray *operations; GArray *operations;
gchar *name; const gchar *name;
guint n_children;
volatile int ref_count; volatile int ref_count;
}; };

View File

@ -171,8 +171,6 @@ clutter_paint_node_real_finalize (ClutterPaintNode *node)
{ {
ClutterPaintNode *iter; ClutterPaintNode *iter;
g_free (node->name);
if (node->operations != NULL) if (node->operations != NULL)
{ {
guint i; guint i;
@ -297,7 +295,8 @@ clutter_paint_node_get_type (void)
* *
* The @name will be used for debugging purposes. * The @name will be used for debugging purposes.
* *
* The @node will copy the passed string. * The @node will intern @name using g_intern_string(). If you have access to a
* static string, use clutter_paint_node_set_static_name() instead.
* *
* Since: 1.10 * Since: 1.10
*/ */
@ -307,8 +306,22 @@ clutter_paint_node_set_name (ClutterPaintNode *node,
{ {
g_return_if_fail (CLUTTER_IS_PAINT_NODE (node)); g_return_if_fail (CLUTTER_IS_PAINT_NODE (node));
g_free (node->name); node->name = g_intern_string (name);
node->name = g_strdup (name); }
/**
* clutter_paint_node_set_static_name: (skip)
*
* Like clutter_paint_node_set_name() but uses a static or interned string
* containing the name.
*/
void
clutter_paint_node_set_static_name (ClutterPaintNode *node,
const char *name)
{
g_return_if_fail (CLUTTER_IS_PAINT_NODE (node));
node->name = name;
} }
/** /**

View File

@ -56,6 +56,9 @@ void clutter_paint_node_paint (Clutter
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_paint_node_set_name (ClutterPaintNode *node, void clutter_paint_node_set_name (ClutterPaintNode *node,
const char *name); const char *name);
CLUTTER_EXPORT
void clutter_paint_node_set_static_name (ClutterPaintNode *node,
const char *name);
CLUTTER_EXPORT CLUTTER_EXPORT
CoglFramebuffer * clutter_paint_node_get_framebuffer (ClutterPaintNode *node); CoglFramebuffer * clutter_paint_node_get_framebuffer (ClutterPaintNode *node);

View File

@ -443,7 +443,7 @@ paint_clipped_rectangle_node (MetaShapedTexture *stex,
coords[7] = coords[3]; coords[7] = coords[3];
node = clutter_pipeline_node_new (pipeline); node = clutter_pipeline_node_new (pipeline);
clutter_paint_node_set_name (node, "MetaShapedTexture (clipped)"); clutter_paint_node_set_static_name (node, "MetaShapedTexture (clipped)");
clutter_paint_node_add_child (root_node, node); clutter_paint_node_add_child (root_node, node);
clutter_paint_node_add_multitexture_rectangle (node, clutter_paint_node_add_multitexture_rectangle (node,
@ -664,7 +664,7 @@ do_paint_content (MetaShapedTexture *stex,
g_autoptr (ClutterPaintNode) node = NULL; g_autoptr (ClutterPaintNode) node = NULL;
node = clutter_pipeline_node_new (blended_pipeline); node = clutter_pipeline_node_new (blended_pipeline);
clutter_paint_node_set_name (node, "MetaShapedTexture (unclipped)"); clutter_paint_node_set_static_name (node, "MetaShapedTexture (unclipped)");
clutter_paint_node_add_child (root_node, node); clutter_paint_node_add_child (root_node, node);
/* 3) blended_tex_region is NULL. Do a full paint. */ /* 3) blended_tex_region is NULL. Do a full paint. */
@ -1241,7 +1241,7 @@ get_image_via_offscreen (MetaShapedTexture *stex,
clear_color = (ClutterColor) { 0, 0, 0, 0 }; clear_color = (ClutterColor) { 0, 0, 0, 0 };
root_node = clutter_root_node_new (fb, &clear_color, COGL_BUFFER_BIT_COLOR); root_node = clutter_root_node_new (fb, &clear_color, COGL_BUFFER_BIT_COLOR);
clutter_paint_node_set_name (root_node, "MetaShapedTexture.offscreen"); clutter_paint_node_set_static_name (root_node, "MetaShapedTexture.offscreen");
paint_context = clutter_paint_context_new_for_framebuffer (fb); paint_context = clutter_paint_context_new_for_framebuffer (fb);