Add init/shutdown to benchmark and fix its users.
authorcedric <cedric>
Thu, 18 Sep 2008 10:04:46 +0000 (10:04 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 18 Sep 2008 10:04:46 +0000 (10:04 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eina@36073 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_benchmark.h
src/lib/eina_benchmark.c
src/lib/eina_main.c
src/tests/eina_bench.c

index c4447e9..4adb0d2 100644 (file)
@@ -37,6 +37,9 @@ typedef struct _Eina_Benchmark Eina_Benchmark;
 typedef void (*Eina_Benchmark_Specimens)(int request);
 #define EINA_BENCHMARK(Function) ((Eina_Benchmark_Specimens)Function)
 
+EAPI int eina_benchmark_init(void);
+EAPI int eina_benchmark_shutdown(void);
+
 EAPI Eina_Benchmark *eina_benchmark_new(const char *name, const char *run);
 EAPI void eina_benchmark_free(Eina_Benchmark *bench);
 
index e791b0d..b84aa46 100644 (file)
@@ -61,6 +61,8 @@ struct _Eina_Benchmark
    Eina_Inlist *runs;
 };
 
+static int _eina_benchmark_count = 0;
+
 /**
  * @endcond
  */
@@ -89,13 +91,46 @@ struct _Eina_Benchmark
  * @{
  */
 
+EAPI int
+eina_benchmark_init(void)
+{
+   _eina_benchmark_count++;
+
+   if (_eina_benchmark_count > 1) return _eina_benchmark_count;
+
+   eina_error_init();
+   eina_array_init();
+   eina_counter_init();
+
+   return _eina_benchmark_count;
+}
+
+EAPI int
+eina_benchmark_shutdown(void)
+{
+   _eina_benchmark_count--;
+
+   if (_eina_benchmark_count != 0) return _eina_benchmark_count;
+
+   eina_counter_shutdown();
+   eina_array_shutdown();
+   eina_error_shutdown();
+
+   return 0;
+}
+
 EAPI Eina_Benchmark *
 eina_benchmark_new(const char *name, const char *run)
 {
    Eina_Benchmark *new;
 
+   eina_error_set(0);
    new = calloc(1, sizeof (Eina_Benchmark));
-   if (!new) return NULL;
+   if (!new)
+     {
+       eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
+       return NULL;
+     }
 
    new->name = name;
    new->run = run;
@@ -127,8 +162,13 @@ eina_benchmark_register(Eina_Benchmark *bench, const char *name, Eina_Benchmark_
 
    if (!bench) return ;
 
+   eina_error_set(0);
    run = calloc(1, sizeof (Eina_Run));
-   if (!run) return ;
+   if (!run)
+     {
+       eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
+       return ;
+     }
 
    run->cb = bench_cb;
    run->name = name;
index 68ee32c..61373e1 100644 (file)
@@ -25,6 +25,8 @@
 #include "eina_stringshare.h"
 #include "eina_list.h"
 #include "eina_array.h"
+#include "eina_counter.h"
+#include "eina_benchmark.h"
 
 /*============================================================================*
  *                                 Global                                     *
@@ -44,6 +46,8 @@ eina_init(void)
    eina_stringshare_init();
    eina_list_init();
    eina_array_init();
+   eina_counter_init();
+   eina_benchmark_init();
 
    return r;
 }
@@ -53,6 +57,8 @@ eina_shutdown(void)
 {
    int r;
 
+   eina_benchmark_shutdown();
+   eina_counter_shutdown();
    eina_array_shutdown();
    eina_list_shutdown();
    eina_stringshare_shutdown();
index 95ff2f7..8e0186f 100644 (file)
@@ -46,6 +46,8 @@ main(int argc, char **argv)
 
    if (argc != 2) return -1;
 
+   eina_benchmark_init();
+
    for (i = 0; etc[i].bench_case != NULL; ++i)
      {
        test = eina_benchmark_new(etc[i].bench_case, argv[1]);
@@ -71,5 +73,7 @@ main(int argc, char **argv)
 
    eina_bench_e17();
 
+   eina_benchmark_shutdown();
+
    return 0;
 }