tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=862372ed2316d23e657f3562a4d5c77d05bd8849

commit 862372ed2316d23e657f3562a4d5c77d05bd8849
Author: Tom Hacohen <t...@stosb.com>
Date:   Wed Oct 14 10:54:02 2015 +0100

    Eo benchmarks: Improve benchmarks.
    
    Add more cases, and tune the number of times we test.
---
 src/benchmarks/eo/class_simple.c    | 12 +++++++++++
 src/benchmarks/eo/class_simple.h    |  3 +++
 src/benchmarks/eo/eo_bench.h        |  2 ++
 src/benchmarks/eo/eo_bench_eo_add.c |  4 ++--
 src/benchmarks/eo/eo_bench_eo_do.c  | 43 +++++++++++++++++++++++++++++++++----
 5 files changed, 58 insertions(+), 6 deletions(-)

diff --git a/src/benchmarks/eo/class_simple.c b/src/benchmarks/eo/class_simple.c
index 5923825..7ff15db 100644
--- a/src/benchmarks/eo/class_simple.c
+++ b/src/benchmarks/eo/class_simple.c
@@ -8,6 +8,17 @@
 #define MY_CLASS SIMPLE_CLASS
 
 static void
+_other_call(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, Eo *other, int 
times)
+{
+   if (times > 0)
+     {
+        eo_do(other, simple_other_call(obj, times-1));
+     }
+}
+
+EAPI EO_VOID_FUNC_BODYV(simple_other_call, EO_FUNC_CALL(other, times), Eo 
*other, int times);
+
+static void
 _a_set(Eo *obj EINA_UNUSED, void *class_data, int a)
 {
    Simple_Public_Data *pd = class_data;
@@ -18,6 +29,7 @@ EAPI EO_VOID_FUNC_BODYV(simple_a_set, EO_FUNC_CALL(a), int a);
 
 static Eo_Op_Description op_desc[] = {
      EO_OP_FUNC(simple_a_set, _a_set),
+     EO_OP_FUNC(simple_other_call, _other_call),
 };
 
 static const Eo_Class_Description class_desc = {
diff --git a/src/benchmarks/eo/class_simple.h b/src/benchmarks/eo/class_simple.h
index 99f6b80..1d78188 100644
--- a/src/benchmarks/eo/class_simple.h
+++ b/src/benchmarks/eo/class_simple.h
@@ -7,6 +7,9 @@ typedef struct
 } Simple_Public_Data;
 
 EAPI void simple_a_set(int a);
+/* Calls simple_other_call(other, obj) and then simple_other_call(obj, other)
+ * for 'times' times in order to grow the call stack on other objects. */
+EAPI void simple_other_call(Eo *other, int times);
 
 #define SIMPLE_CLASS simple_class_get()
 const Eo_Class *simple_class_get(void);
diff --git a/src/benchmarks/eo/eo_bench.h b/src/benchmarks/eo/eo_bench.h
index 2513426..9e3e80d 100644
--- a/src/benchmarks/eo/eo_bench.h
+++ b/src/benchmarks/eo/eo_bench.h
@@ -4,4 +4,6 @@
 void eo_bench_eo_do(Eina_Benchmark *bench);
 void eo_bench_eo_add(Eina_Benchmark *bench);
 
+#define _EO_BENCH_TIMES(Start, Repeat, Jump) (Start), ((Start) + ((Jump) * 
(Repeat))), (Jump)
+
 #endif
diff --git a/src/benchmarks/eo/eo_bench_eo_add.c 
b/src/benchmarks/eo/eo_bench_eo_add.c
index ce0bdc9..462f3b9 100644
--- a/src/benchmarks/eo/eo_bench_eo_add.c
+++ b/src/benchmarks/eo/eo_bench_eo_add.c
@@ -41,7 +41,7 @@ bench_eo_add_jump_by_2(int request)
 void eo_bench_eo_add(Eina_Benchmark *bench)
 {
    eina_benchmark_register(bench, "eo_add_linear",
-         EINA_BENCHMARK(bench_eo_add_linear), 1000, 50000, 100);
+         EINA_BENCHMARK(bench_eo_add_linear), _EO_BENCH_TIMES(1000, 10, 
50000));
    eina_benchmark_register(bench, "eo_add_jump_by_2",
-         EINA_BENCHMARK(bench_eo_add_jump_by_2), 1000, 50000, 100);
+         EINA_BENCHMARK(bench_eo_add_jump_by_2), _EO_BENCH_TIMES(1000, 10, 
50000));
 }
diff --git a/src/benchmarks/eo/eo_bench_eo_do.c 
b/src/benchmarks/eo/eo_bench_eo_do.c
index 36abc14..2bcdc42 100644
--- a/src/benchmarks/eo/eo_bench_eo_do.c
+++ b/src/benchmarks/eo/eo_bench_eo_do.c
@@ -7,7 +7,7 @@
 #include "class_simple.h"
 
 static void
-bench_eo_do_general(int request)
+bench_eo_do_simple(int request)
 {
    int i;
    Eo *obj = eo_add(SIMPLE_CLASS, NULL);
@@ -19,6 +19,37 @@ bench_eo_do_general(int request)
    eo_unref(obj);
 }
 
+static void
+bench_eo_do_two_objs(int request)
+{
+   int i;
+   Eo *obj = eo_add(SIMPLE_CLASS, NULL);
+   Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
+   for (i = 0 ; i < request ; i++)
+     {
+        eo_do(obj, simple_a_set(i));
+        eo_do(obj2, simple_a_set(i));
+     }
+
+   eo_unref(obj);
+   eo_unref(obj2);
+}
+
+static void
+bench_eo_do_two_objs_growing_stack(int request)
+{
+   int i;
+   Eo *obj = eo_add(SIMPLE_CLASS, NULL);
+   Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
+   for (i = 0 ; i < request ; i++)
+     {
+        eo_do(obj, simple_other_call(obj2, 20));
+     }
+
+   eo_unref(obj);
+   eo_unref(obj2);
+}
+
 static const Eo_Class *cur_klass;
 
 static void
@@ -58,8 +89,12 @@ bench_eo_do_super(int request)
 
 void eo_bench_eo_do(Eina_Benchmark *bench)
 {
-   eina_benchmark_register(bench, "various",
-         EINA_BENCHMARK(bench_eo_do_general), 1000, 100000, 500);
+   eina_benchmark_register(bench, "simple",
+         EINA_BENCHMARK(bench_eo_do_simple), _EO_BENCH_TIMES(1000, 10, 
500000));
    eina_benchmark_register(bench, "super",
-         EINA_BENCHMARK(bench_eo_do_super), 1000, 100000, 500);
+         EINA_BENCHMARK(bench_eo_do_super),  _EO_BENCH_TIMES(1000, 10, 
500000));
+   eina_benchmark_register(bench, "two_objs",
+         EINA_BENCHMARK(bench_eo_do_two_objs), _EO_BENCH_TIMES(1000, 10, 
500000));
+   eina_benchmark_register(bench, "two_objs_growing_stack",
+         EINA_BENCHMARK(bench_eo_do_two_objs_growing_stack), 
_EO_BENCH_TIMES(1000, 10, 40000));
 }

-- 


Reply via email to