efl
84 строки · 1.9 Кб
1#ifdef HAVE_CONFIG_H2# include <config.h>3#endif4
5#include "Eo.h"6#include "eo_bench.h"7#include "class_simple.h"8
9static void10_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)11{
12}
13
14
15static void16bench_eo_callbacks_add(int request)17{
18int i;19Eo *obj = efl_add_ref(SIMPLE_CLASS, NULL);20
21for (i = 0 ; i < request ; i++)22{23efl_event_callback_priority_add(obj, SIMPLE_FOO, (short) i, _cb, NULL);24}25
26efl_unref(obj);27}
28
29static void30bench_eo_callbacks_call(int request)31{
32/* Distribution of calls per amount of callbacks in an object as recorded by33running the genlist elementary_test test. */
34const double distribution[] = {350.2920468197,360.2073086496,370.217699456,380.0207158285,390.019707134,400.0359433565,410.0324896742,420.0104299639,430.028989003,440.0082496801,450.123214227,460.0001331351,470.003073072448};49
50const int len = EINA_C_ARRAY_LENGTH(distribution);51int i, j;52Eo *obj[len];53for (i = 0 ; i < len ; i++)54{55obj[i] = efl_add_ref(SIMPLE_CLASS, NULL);56
57for (j = 0 ; j < i ; j++)58{59efl_event_callback_priority_add(obj[i], SIMPLE_FOO, (short) j, _cb, NULL);60}61}62
63for (i = 0 ; i < len ; i++)64{65for (j = 0 ; j < (int) (distribution[i] * request) ; j++)66{67/* Miss finding the callbacks on purpose, so we measure worst case scenario. */68efl_event_callback_call(obj[i], SIMPLE_BAR, NULL);69}70}71
72for (i = 0 ; i < len ; i++)73{74efl_unref(obj[i]);75}76}
77
78void eo_bench_callbacks(Eina_Benchmark *bench)79{
80eina_benchmark_register(bench, "add",81EINA_BENCHMARK(bench_eo_callbacks_add), _EO_BENCH_TIMES(1000, 10, 2000));82eina_benchmark_register(bench, "call",83EINA_BENCHMARK(bench_eo_callbacks_call), _EO_BENCH_TIMES(100000, 10, 500000));84}
85