add support for google malloc if available
authorAndy Wingo <wingo@pobox.com>
Fri, 1 Apr 2005 10:14:45 +0000 (10:14 +0000)
committerAndy Wingo <wingo@pobox.com>
Fri, 1 Apr 2005 10:14:45 +0000 (10:14 +0000)
Original commit message from CVS:
add support for google malloc if available

tests/memchunk/gmemchunktest.c

index e22b761a6e9cfc7f7c9f4f69f5e0b599ccd84a6d..aa2123262e61317df4d7833571bcd8cb3907d3c8 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <stdlib.h>
 #include <glib.h>
+#include <gmodule.h>
 #include <gst/gstmemchunk.h>
 
 
@@ -120,6 +121,24 @@ normal_free (gpointer chunk)
   g_free (chunk);
 }
 
+/*
+ * Normal (malloc/free) implementation
+ */
+
+void *(*_google_malloc) (gsize) = NULL;
+void (*_google_free) (void *) = NULL;
+static gpointer
+google_alloc (void)
+{
+  return _google_malloc (CHUNK_SIZE);
+}
+
+static void
+google_free (gpointer chunk)
+{
+  _google_free (chunk);
+}
+
 /*
  * The test
  */
@@ -179,6 +198,7 @@ gint
 main (gint argc, gchar * argv[])
 {
   gdouble time;
+  GModule *google_lib;
 
   g_thread_init (NULL);
 
@@ -210,6 +230,23 @@ main (gint argc, gchar * argv[])
   time = run_test (normal_alloc, normal_free);
   g_print ("%fs (%fs/thread) - g_malloc/g_free\n", time, time / num_threads);
 
+  google_lib = g_module_open ("libtcmalloc.so", G_MODULE_BIND_LOCAL);
+  if (google_lib) {
+    gpointer sym;
+
+    g_module_symbol (google_lib, "malloc", &sym);
+    g_assert (sym);
+    _google_malloc = sym;
+    g_module_symbol (google_lib, "free", &sym);
+    g_assert (sym);
+    _google_free = sym;
+    time = run_test (google_alloc, google_free);
+    g_print ("%fs (%fs/thread) - google malloc/free\n", time,
+        time / num_threads);
+  } else {
+    g_print ("google malloc unavailable: %s\n", g_module_error ());
+  }
+
   /* g_mem_chunk_info (); */
   return 0;
 }