[gtk+] match_all: Only allocate an array when needed
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] match_all: Only allocate an array when needed
- Date: Wed, 9 Sep 2015 15:17:31 +0000 (UTC)
commit a9481cb410c6e2c1b516b282909d04f9ec1d61c4
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Sep 9 11:08:43 2015 -0400
match_all: Only allocate an array when needed
My statistics show that more than half of all calls end up
with 0 matches, so we can avoid some overhead by not allocating
an array at all in this case.
gtk/gtkcssselector.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index 760e630..eed04f7 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -159,8 +159,8 @@ g_ptr_array_insert_sorted (GPtrArray *array,
}
static void
-gtk_css_selector_tree_found_match (const GtkCssSelectorTree *tree,
- GPtrArray *array)
+gtk_css_selector_tree_found_match (const GtkCssSelectorTree *tree,
+ GPtrArray **array)
{
int i;
gpointer *matches;
@@ -168,8 +168,11 @@ gtk_css_selector_tree_found_match (const GtkCssSelectorTree *tree,
matches = gtk_css_selector_tree_get_matches (tree);
if (matches)
{
+ if (!*array)
+ *array = g_ptr_array_sized_new (16);
+
for (i = 0; matches[i] != NULL; i++)
- g_ptr_array_insert_sorted (array, matches[i]);
+ g_ptr_array_insert_sorted (*array, matches[i]);
}
}
@@ -1757,15 +1760,13 @@ GPtrArray *
_gtk_css_selector_tree_match_all (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher)
{
- GPtrArray *array;
+ GPtrArray *array = NULL;
update_type_references ();
- array = g_ptr_array_sized_new (16);
-
for (; tree != NULL;
tree = gtk_css_selector_tree_get_sibling (tree))
- gtk_css_selector_foreach (&tree->selector, matcher, gtk_css_selector_tree_match_foreach, array);
+ gtk_css_selector_foreach (&tree->selector, matcher, gtk_css_selector_tree_match_foreach, &array);
return array;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]