Add benchmark for evas (also add ecore bench, but it's deactivated by default,
authorcedric <cedric>
Mon, 22 Sep 2008 14:27:50 +0000 (14:27 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 22 Sep 2008 14:27:50 +0000 (14:27 +0000)
as i can't run it on my computer).

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eina@36170 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/tests/eina_bench_array.c

index bb77e40..4c48e7a 100644 (file)
@@ -35,6 +35,7 @@
 
 #ifdef EINA_BENCH_HAVE_ECORE
 #include <Ecore.h>
+#include <Ecore_Data.h>
 #endif
 
 #include "eina_bench.h"
@@ -560,6 +561,143 @@ eina_bench_gptrarray_4evas_render(int request)
 }
 #endif
 
+#ifdef EINA_BENCH_HAVE_EVAS
+static void
+eina_bench_evas_list_4evas_render(int request)
+{
+   Evas_List *list = NULL;
+   Evas_List *tmp;
+   Eina_Bench_Object *ebo;
+   int i;
+   int j;
+
+   evas_init();
+
+   for (i = 0; i < 1000; ++i)
+     {
+       for (j = 0; j < request; ++j)
+         {
+            ebo = malloc(sizeof (Eina_Bench_Object));
+            if (!ebo) continue ;
+
+            ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
+
+            list = evas_list_prepend(list, ebo);
+         }
+
+       if (i == 500)
+         {
+            while (list)
+              {
+                 free(evas_list_data(list));
+                 list = evas_list_remove_list(list, list);
+              }
+         }
+       else
+         {
+            if (i % 30 == 0)
+              {
+                 tmp = list;
+                 while (tmp)
+                   {
+                      Evas_List *reminder = tmp;
+
+                      ebo = evas_list_data(reminder);
+                      tmp = evas_list_next(tmp);
+
+                      if (ebo->keep == EINA_FALSE)
+                        {
+                           list = evas_list_remove_list(list, reminder);
+                           free(ebo);
+                        }
+                   }
+              }
+         }
+
+       for (tmp = list; tmp; tmp = evas_list_next(tmp))
+         {
+            ebo = evas_list_data(tmp);
+
+            ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
+         }
+     }
+
+   while (list)
+     {
+       free(evas_list_data(list));
+       list = evas_list_remove_list(list, list);
+     }
+
+   evas_shutdown();
+}
+#endif
+
+#ifdef EINA_BENCH_HAVE_ECORE
+#if 0
+static void
+_eina_ecore_for_each_remove(void *value, void *user_data)
+{
+   Eina_Bench_Object *ebo = value;
+   Ecore_List *list = user_data;
+
+   if (ebo->keep == EINA_FALSE)
+     ecore_list_remove_destroy(list);
+}
+
+static void
+_eina_ecore_for_each_rand(void *value, __UNUSED__ void *user_data)
+{
+   Eina_Bench_Object *ebo = value;
+
+   ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
+}
+
+static void
+eina_bench_ecore_list_4evas_render(int request)
+{
+   Ecore_List *list = NULL;
+   Eina_Bench_Object *ebo;
+   int i;
+   int j;
+
+   ecore_init();
+   list = ecore_list_new();
+   ecore_list_free_cb_set(list, free);
+
+   for (i = 0; i < 1000; ++i)
+     {
+       for (j = 0; j < request; ++j)
+         {
+            ebo = malloc(sizeof (Eina_Bench_Object));
+            if (!ebo) continue ;
+
+            ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
+
+            ecore_list_prepend(list, ebo);
+         }
+
+       if (i == 500)
+         {
+            ecore_list_clear(list);
+         }
+       else
+         {
+            if (i % 30 == 0)
+              {
+                 ecore_list_for_each(list, _eina_ecore_for_each_remove, list);
+              }
+         }
+
+       ecore_list_for_each(list, _eina_ecore_for_each_rand, list);
+     }
+
+   ecore_list_destroy(list);
+
+   ecore_shutdown();
+}
+#endif
+#endif
+
 void eina_bench_array(Eina_Benchmark *bench)
 {
    eina_benchmark_register(bench, "array-inline", EINA_BENCHMARK(eina_bench_array_4evas_render_inline), 200, 4000, 100);
@@ -572,5 +710,13 @@ void eina_bench_array(Eina_Benchmark *bench)
    eina_benchmark_register(bench, "glist", EINA_BENCHMARK(eina_bench_glist_4evas_render), 200, 4000, 100);
    eina_benchmark_register(bench, "gptrarray", EINA_BENCHMARK(eina_bench_gptrarray_4evas_render), 200, 4000, 100);
 #endif
+#ifdef EINA_BENCH_HAVE_EVAS
+   eina_benchmark_register(bench, "evas", EINA_BENCHMARK(eina_bench_evas_list_4evas_render), 200, 4000, 100);
+#endif
+#ifdef EINA_BENCH_HAVE_ECORE
+#if 0
+   eina_benchmark_register(bench, "ecore", EINA_BENCHMARK(eina_bench_ecore_list_4evas_render), 200, 4000, 100);
+#endif
+#endif
 }