[sysprof] Add a cache for TreeDataList allocation



commit f368efaaf01de2914487b091c099b54b6f2483bd
Author: Søren Sandmann Pedersen <ssp redhat com>
Date:   Mon Aug 17 07:38:15 2009 -0400

    Add a cache for TreeDataList allocation

 footreedatalist.c |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)
---
diff --git a/footreedatalist.c b/footreedatalist.c
index be169ba..21e4874 100644
--- a/footreedatalist.c
+++ b/footreedatalist.c
@@ -23,15 +23,35 @@
 #include "footreedatalist.h"
 #include <string.h>
 
+static FooTreeDataList *cache;
+
 /* node allocation
  */
+#define N_DATA_LISTS (64)
+
 FooTreeDataList *
 _foo_tree_data_list_alloc (void)
 {
   FooTreeDataList *list;
 
-  list = g_slice_new0 (FooTreeDataList);
+  if (!cache)
+  {
+      int i;
+
+      list = g_malloc (N_DATA_LISTS * sizeof (FooTreeDataList));
 
+      for (i = 0; i < N_DATA_LISTS; ++i)
+      {
+	  list[i].next = cache;
+	  cache = &(list[i]);
+      }
+  }
+
+  list = cache;
+  cache = cache->next;
+
+  memset (list, 0, sizeof (FooTreeDataList));
+  
   return list;
 }
 
@@ -54,7 +74,9 @@ _foo_tree_data_list_free (FooTreeDataList *list,
       else if (g_type_is_a (column_headers [i], G_TYPE_BOXED) && tmp->data.v_pointer != NULL)
 	g_boxed_free (column_headers [i], (gpointer) tmp->data.v_pointer);
 
-      g_slice_free (FooTreeDataList, tmp);
+      tmp->next = cache;
+      cache = tmp;
+      
       i++;
       tmp = next;
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]