summaryrefslogtreecommitdiff
path: root/gtk/gtkcssselectorprivate.h
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-01-19 11:34:53 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-01-19 19:00:00 -0500
commit675214574cfc5e49cb25988c126836b2487e56f9 (patch)
treeee1430258bad21f515cf03d58d600b6ad454522e /gtk/gtkcssselectorprivate.h
parent31b15bf5e0baa4ae98a92bf82842cac033d5bb03 (diff)
downloadgtk+-matthiasc/css-matching-2.tar.gz
css: Break the selector tree into manymatthiasc/css-matching-2
Since we can only match one name, doing a hash by matcher name lets us quickly discard most initial selectors, and having much smaller trees. We can apply the same idea for style classes, as well, by looking up a tree for each class. Comparing the number of gtk_css_selector_match() calls while moving the pointer outside the window, I see: Before: 65773 selector matches (12863 positive) After: 32704 selector matches (12278 positive) So this cuts the numer of selectors we need to check roughly in half, at the cost of a handful of hash table lookups.
Diffstat (limited to 'gtk/gtkcssselectorprivate.h')
-rw-r--r--gtk/gtkcssselectorprivate.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/gtk/gtkcssselectorprivate.h b/gtk/gtkcssselectorprivate.h
index 6f35917c6e..579d27c013 100644
--- a/gtk/gtkcssselectorprivate.h
+++ b/gtk/gtkcssselectorprivate.h
@@ -25,6 +25,7 @@ G_BEGIN_DECLS
typedef union _GtkCssSelector GtkCssSelector;
typedef struct _GtkCssSelectorTree GtkCssSelectorTree;
+typedef struct _GtkCssSelectorTrees GtkCssSelectorTrees;
typedef struct _GtkCssSelectorTreeBuilder GtkCssSelectorTreeBuilder;
GtkCssSelector * _gtk_css_selector_parse (GtkCssParser *parser);
@@ -40,14 +41,14 @@ GtkCssChange _gtk_css_selector_get_change (const GtkCssSelector *sel
int _gtk_css_selector_compare (const GtkCssSelector *a,
const GtkCssSelector *b);
-void _gtk_css_selector_tree_free (GtkCssSelectorTree *tree);
-GPtrArray * _gtk_css_selector_tree_match_all (const GtkCssSelectorTree *tree,
+void _gtk_css_selector_tree_free (GtkCssSelectorTrees *tree);
+GPtrArray * _gtk_css_selector_tree_match_all (const GtkCssSelectorTrees *tree,
const GtkCssMatcher *matcher);
-GtkCssChange _gtk_css_selector_tree_get_change_all (const GtkCssSelectorTree *tree,
+GtkCssChange _gtk_css_selector_tree_get_change_all (const GtkCssSelectorTrees *tree,
const GtkCssMatcher *matcher);
void _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
GString *str);
-gboolean _gtk_css_selector_tree_is_empty (const GtkCssSelectorTree *tree) G_GNUC_CONST;
+gboolean _gtk_css_selector_tree_is_empty (const GtkCssSelectorTrees *tree) G_GNUC_CONST;
@@ -56,7 +57,7 @@ void _gtk_css_selector_tree_builder_add (GtkCssSelectorT
GtkCssSelector *selectors,
GtkCssSelectorTree **selector_match,
gpointer match);
-GtkCssSelectorTree * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
+GtkCssSelectorTrees * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
void _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder);
const char *gtk_css_pseudoclass_name (GtkStateFlags flags);