summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-09-23 06:06:42 +0200
committerTimm Bäder <mail@baedert.org>2020-09-24 19:08:22 +0200
commit484dcc043bc58e8c2fc650c76faec6490b5097fb (patch)
tree4a2aa655eabdd1ce8449e7ed8a9a5876bc00bb6a
parent716b5afe6a40ef8c1f7d7e05c35e330bbe7e9d9e (diff)
downloadgtk+-484dcc043bc58e8c2fc650c76faec6490b5097fb.tar.gz
cssimagefallback: Avoid allocating GPtrArray for colors
If we just parse a color, like image(#FFF), avoid allocating the GPtrArray to store images. This happens in Adwaita for background images of backdrop buttons. We save around 70 GPtrArrays this way.
-rw-r--r--gtk/gtkcssimagefallback.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/gtk/gtkcssimagefallback.c b/gtk/gtkcssimagefallback.c
index c6549c6bd4..4d320a395d 100644
--- a/gtk/gtkcssimagefallback.c
+++ b/gtk/gtkcssimagefallback.c
@@ -209,6 +209,9 @@ gtk_css_image_fallback_parse_arg (GtkCssParser *parser,
if (image == NULL)
return 0;
+ if (!data->images)
+ data->images = g_ptr_array_new_with_free_func (g_object_unref);
+
g_ptr_array_add (data->images, image);
return 1;
}
@@ -235,18 +238,25 @@ gtk_css_image_fallback_parse (GtkCssImage *image,
return FALSE;
}
- data.images = g_ptr_array_new_with_free_func (g_object_unref);
-
if (!gtk_css_parser_consume_function (parser, 1, G_MAXUINT, gtk_css_image_fallback_parse_arg, &data))
{
g_clear_pointer (&data.color, _gtk_css_value_unref);
- g_ptr_array_free (data.images, TRUE);
+ if (data.images)
+ g_ptr_array_free (data.images, TRUE);
return FALSE;
}
self->color = data.color;
- self->n_images = data.images->len;
- self->images = (GtkCssImage **) g_ptr_array_free (data.images, FALSE);
+ if (data.images)
+ {
+ self->n_images = data.images->len;
+ self->images = (GtkCssImage **) g_ptr_array_free (data.images, FALSE);
+ }
+ else
+ {
+ self->n_images = 0;
+ self->images = NULL;
+ }
return TRUE;
}