[gtk+] Optimize gtk_widget_path_copy() by preallocating "elems" array
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Optimize gtk_widget_path_copy() by preallocating "elems" array
- Date: Tue, 7 Aug 2012 04:39:23 +0000 (UTC)
commit f89d5c828038654802526c9ea68e6fb52fa461d3
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Aug 7 00:38:48 2012 -0400
Optimize gtk_widget_path_copy() by preallocating "elems" array
gtk_widget_path_copy() currently calls g_array_append_val() in a loop,
which is inefficient due to reallocating the array's memory. Calling
g_array_set_size() before entering the loop reduces the number of CPU
cycles used by roughly 30%.
Patch by John Lindgren,
https://bugzilla.gnome.org/show_bug.cgi?id=679978
gtk/gtkwidgetpath.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkwidgetpath.c b/gtk/gtkwidgetpath.c
index 00afbe0..855902f 100644
--- a/gtk/gtkwidgetpath.c
+++ b/gtk/gtkwidgetpath.c
@@ -174,15 +174,16 @@ gtk_widget_path_copy (const GtkWidgetPath *path)
new_path = gtk_widget_path_new ();
+ g_array_set_size (new_path->elems, path->elems->len);
+
for (i = 0; i < path->elems->len; i++)
{
- GtkPathElement *elem, new;
+ GtkPathElement *elem, *dest;
elem = &g_array_index (path->elems, GtkPathElement, i);
+ dest = &g_array_index (new_path->elems, GtkPathElement, i);
- gtk_path_element_copy (&new, elem);
-
- g_array_append_val (new_path->elems, new);
+ gtk_path_element_copy (dest, elem);
}
return new_path;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]