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
This commit is contained in:
parent
e2c15e2791
commit
f89d5c8280
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user