From: Matthias Clasen Date: Tue, 17 Jan 2023 12:39:51 +0000 (-0500) Subject: stylecascade: Avoid some allocations X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~8^2~54^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3c8c54ed157ac3428575438e1b48074815782ca9;p=gtk4.git stylecascade: Avoid some allocations --- diff --git a/gtk/gtkstylecascade.c b/gtk/gtkstylecascade.c index 1871b7073e..55d4480fb0 100644 --- a/gtk/gtkstylecascade.c +++ b/gtk/gtkstylecascade.c @@ -30,6 +30,7 @@ struct _GtkStyleCascadeIter { int n_cascades; int *cascade_index; /* each one points at last index that was returned, */ /* not next one that should be returned */ + int index_[20]; }; struct _GtkStyleProviderData @@ -83,7 +84,11 @@ gtk_style_cascade_iter_init (GtkStyleCascade *cascade, while ((cas = cas->parent) != NULL) iter->n_cascades++; - iter->cascade_index = g_new (int, iter->n_cascades); + if (iter->n_cascades < 20) + iter->cascade_index = iter->index_; + else + iter->cascade_index = g_new (int, iter->n_cascades); + for (cas = cascade, ix = 0; ix < iter->n_cascades; cas = cas->parent, ix++) iter->cascade_index[ix] = cas->providers->len; @@ -93,7 +98,8 @@ gtk_style_cascade_iter_init (GtkStyleCascade *cascade, static void gtk_style_cascade_iter_clear (GtkStyleCascadeIter *iter) { - g_free (iter->cascade_index); + if (iter->cascade_index != iter->index_) + g_free (iter->cascade_index); } static GtkSettings *