[gtk/css-style-split] Add accounting for styles
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/css-style-split] Add accounting for styles
- Date: Sun, 26 Jan 2020 15:46:24 +0000 (UTC)
commit 4dfb5406d0f513e1e42d88b70c5bcbad95712407
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Jan 26 10:45:21 2020 -0500
Add accounting for styles
gtk/gtkcssstaticstyle.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 52 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c
index a2656963a5..2ff4a27ee5 100644
--- a/gtk/gtkcssstaticstyle.c
+++ b/gtk/gtkcssstaticstyle.c
@@ -179,6 +179,45 @@ typedef struct {
GtkCssValue *values[0];
} GtkCssValues;
+#ifdef STYLE_ACCOUNTING
+static int num_lookups;
+static int num_empty;
+static int num_core;
+static int num_background;
+static int num_border;
+static int num_icon;
+static int num_outline;
+static int num_font;
+static int num_font_variant;
+static int num_animation;
+static int num_transition;
+static int num_size;
+static int num_other;
+
+static void
+dump_style_counts (void)
+{
+ g_print ("%d lookups \t%.2f%% empty\n", num_lookups, num_empty * 100 / (double)num_lookups);
+ g_print ("core \t%.2f%% shared\n", (num_lookups - num_core) * 100. / (double)num_lookups);
+ g_print ("background \t%.2f%% shared\n", (num_lookups - num_background) * 100. / (double)num_lookups);
+ g_print ("border \t%.2f%% shared\n", (num_lookups - num_border) * 100. / (double)num_lookups);
+ g_print ("icon \t%.2f%% shared\n", (num_lookups - num_icon) * 100. / (double)num_lookups);
+ g_print ("outline \t%.2f%% shared\n", (num_lookups - num_outline) * 100. / (double)num_lookups);
+ g_print ("font \t%.2f%% shared\n", (num_lookups - num_font) * 100. / (double)num_lookups);
+ g_print ("font variant \t%.2f%% shared\n", (num_lookups - num_font_variant) * 100. / (double)num_lookups);
+ g_print ("animation \t%.2f%% shared\n", (num_lookups - num_animation) * 100. / (double)num_lookups);
+ g_print ("transition \t%.2f%% shared\n", (num_lookups - num_transition) * 100. / (double)num_lookups);
+ g_print ("size \t%.2f%% shared\n", (num_lookups - num_size) * 100. / (double)num_lookups);
+ g_print ("other \t%.2f%% shared\n", (num_lookups - num_other) * 100. / (double)num_lookups);
+}
+
+#define init_style_counts() atexit (dump_style_counts);
+#define style_accounting_new_style(NAME) num_ ## NAME ++;
+#else
+#define init_style_counts()
+#define style_accounting_new_style(NAME)
+#endif
+
#define DEFINE_VALUES(TYPE, NAME) \
static inline TYPE * \
gtk_css_ ## NAME ## _values_ref (TYPE *style) \
@@ -207,13 +246,14 @@ gtk_css_ ## NAME ## _values_unref (TYPE *style) \
gtk_css_ ## NAME ## _values_free (style); \
} \
\
-static TYPE * \
+static inline TYPE * \
gtk_css_ ## NAME ## _values_new (void) \
{ \
TYPE *style; \
\
style = g_new0 (TYPE, 1); \
style->ref_count = 1; \
+ style_accounting_new_style (NAME); \
\
return style; \
} \
@@ -551,6 +591,8 @@ gtk_css_static_style_class_init (GtkCssStaticStyleClass *klass)
gtk_css_transition_values_init ();
gtk_css_size_values_init ();
gtk_css_other_values_init ();
+
+ init_style_counts ();
}
static void
@@ -1115,8 +1157,17 @@ gtk_css_lookup_resolve (GtkCssLookup *lookup,
parent_is_static = GTK_IS_CSS_STATIC_STYLE (parent_style);
+#ifdef STYLE_ACCOUNTING
+ num_lookups++;
+#endif
+
if (_gtk_bitmask_is_empty (_gtk_css_lookup_get_set_values (lookup)))
{
+
+#ifdef STYLE_ACCOUNTING
+ num_empty++;
+#endif
+
style->background = gtk_css_background_values_ref (gtk_css_background_initial_values);
style->border = gtk_css_border_values_ref (gtk_css_border_initial_values);
style->outline = gtk_css_outline_values_ref (gtk_css_outline_initial_values);
@@ -1186,7 +1237,6 @@ gtk_css_lookup_resolve (GtkCssLookup *lookup,
style->transition = gtk_css_transition_values_ref (gtk_css_transition_initial_values);
else
gtk_css_transition_values_new_compute (style, provider, parent_style, lookup);
-
if (gtk_css_size_values_unset (lookup))
style->size = gtk_css_size_values_ref (gtk_css_size_initial_values);
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]