[gtk+/composite-templates] Optimize gtk_widget_path_copy() by preallocating "elems" array



commit fa78122cc59cf8a39a799994bf4ff36a470bd53a
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]