efl

Форк
0
/
eo_bench_callbacks.c 
84 строки · 1.9 Кб
1
#ifdef HAVE_CONFIG_H
2
# include <config.h>
3
#endif
4

5
#include "Eo.h"
6
#include "eo_bench.h"
7
#include "class_simple.h"
8

9
static void
10
_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
11
{
12
}
13

14

15
static void
16
bench_eo_callbacks_add(int request)
17
{
18
   int i;
19
   Eo *obj = efl_add_ref(SIMPLE_CLASS, NULL);
20

21
   for (i = 0 ; i < request ; i++)
22
     {
23
        efl_event_callback_priority_add(obj, SIMPLE_FOO, (short) i, _cb, NULL);
24
     }
25

26
   efl_unref(obj);
27
}
28

29
static void
30
bench_eo_callbacks_call(int request)
31
{
32
   /* Distribution of calls per amount of callbacks in an object as recorded by
33
      running the genlist elementary_test test. */
34
   const double distribution[] = {
35
        0.2920468197,
36
        0.2073086496,
37
        0.217699456,
38
        0.0207158285,
39
        0.019707134,
40
        0.0359433565,
41
        0.0324896742,
42
        0.0104299639,
43
        0.028989003,
44
        0.0082496801,
45
        0.123214227,
46
        0.0001331351,
47
        0.0030730724
48
   };
49

50
   const int len = EINA_C_ARRAY_LENGTH(distribution);
51
   int i, j;
52
   Eo *obj[len];
53
   for (i = 0 ; i < len ; i++)
54
     {
55
        obj[i] = efl_add_ref(SIMPLE_CLASS, NULL);
56

57
        for (j = 0 ; j < i ; j++)
58
          {
59
             efl_event_callback_priority_add(obj[i], SIMPLE_FOO, (short) j, _cb, NULL);
60
          }
61
     }
62

63
   for (i = 0 ; i < len ; i++)
64
     {
65
        for (j = 0 ; j < (int) (distribution[i] * request) ; j++)
66
          {
67
             /* Miss finding the callbacks on purpose, so we measure worst case scenario. */
68
             efl_event_callback_call(obj[i], SIMPLE_BAR, NULL);
69
          }
70
     }
71

72
   for (i = 0 ; i < len ; i++)
73
     {
74
        efl_unref(obj[i]);
75
     }
76
}
77

78
void eo_bench_callbacks(Eina_Benchmark *bench)
79
{
80
   eina_benchmark_register(bench, "add",
81
         EINA_BENCHMARK(bench_eo_callbacks_add), _EO_BENCH_TIMES(1000, 10, 2000));
82
   eina_benchmark_register(bench, "call",
83
         EINA_BENCHMARK(bench_eo_callbacks_call), _EO_BENCH_TIMES(100000, 10, 500000));
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.