efl

Форк
0
/
benchmark_object_impl.cc 
110 строк · 3.8 Кб
1
#ifdef HAVE_CONFIG_H
2
#include <config.h>
3
#endif
4

5
#include <Eo.h>
6
#include <Ecore.h>
7

8
#include <stdlib.h>
9

10
extern "C" {
11
#include "benchmark_object.eo.h"
12

13
void _benchmark_object_emptyarg(Eo*, void*)
14
{
15
}
16
void _benchmark_object_onearg(Eo*, void*, int)
17
{
18
}
19
void _benchmark_object_twoarg(Eo*, void*, int, int)
20
{
21
}
22
void _benchmark_object_tenarg(Eo*, void*, int, int, int, int, int, int, int, int, int, int)
23
{
24
}
25
void _benchmark_object_onecomplexarg(Eo*, void*, Eina_List*)
26
{
27
}
28
void _benchmark_object_tencomplexarg(Eo*, void*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*, Eina_List*)
29
{
30
}
31
  
32
#include "benchmark_object.eo.c"
33
}
34

35
#include "benchmark_object.eo.js.cc"
36

37
#ifdef HAVE_NODEJS
38
namespace {
39
using efl::eina::js::compatibility_return_type;
40
using efl::eina::js::compatibility_callback_info_type;
41
using efl::eina::js::compatibility_return;
42
using efl::eina::js::compatibility_new;
43

44
#define JS_BENCHMARK_ARGS0(v)
45
#define JS_BENCHMARK_ARGS1(v) ,v
46
#define JS_BENCHMARK_ARGS2(v) ,v,v
47
#define JS_BENCHMARK_ARGS10(v) ,v,v,v,v,v,v,v,v,v,v
48
#define JS_BENCHMARK_FUNC(name, number, v)                              \
49
  compatibility_return_type js_benchmark_object_##name##arg(compatibility_callback_info_type) \
50
  {                                                                     \
51
    Eina_Counter* counter = eina_counter_new("counter");                \
52
    Eo* object = efl_add(BENCHMARK_OBJECT_CLASS, NULL);                  \
53
    Eina_List* l = NULL;                                                \
54
    (void)l;                                                            \
55
    /* Warm */                                                          \
56
    for(int i = 0; i != 10; i++)                                        \
57
      {                                                                 \
58
        benchmark_object_##name##arg(object JS_BENCHMARK_ARGS##number(v)); \
59
      }                                                                 \
60
    /* Real loop */                                                     \
61
    eina_counter_start(counter);                                        \
62
    for(int i = 0; i != 20000; i++)                                     \
63
      {                                                                 \
64
        benchmark_object_##name##arg(object JS_BENCHMARK_ARGS##number(v)); \
65
      }                                                                 \
66
    eina_counter_stop(counter, 20000);                                  \
67
    fprintf(stderr, "%s", eina_counter_dump(counter));                  \
68
    efl_unref(object);                                                   \
69
    return compatibility_return();                                      \
70
  }
71

72
JS_BENCHMARK_FUNC(empty, 0, 1)
73
JS_BENCHMARK_FUNC(one, 1, 1)
74
JS_BENCHMARK_FUNC(two, 2, 1)
75
JS_BENCHMARK_FUNC(ten, 10, 1)
76
JS_BENCHMARK_FUNC(onecomplex, 1, l)
77
JS_BENCHMARK_FUNC(tencomplex, 10, l)
78

79
  
80
void benchmark_object_module_init(v8::Handle<v8::Object> exports)
81
{
82
  fprintf(stderr, "test suite eolian_js_module_init\n"); fflush(stderr);
83
  try
84
    {
85
       eina_init();
86
       efl_object_init();
87
       register_benchmark_object(exports, v8::Isolate::GetCurrent());
88
#define JS_BENCHMARK_EXPORT(name)                                       \
89
       exports->Set(compatibility_new<v8::String>(nullptr, "benchmark_" #name "arg") \
90
                    , compatibility_new<v8::FunctionTemplate>(nullptr, &js_benchmark_object_##name##arg)->GetFunction());
91
       JS_BENCHMARK_EXPORT(empty)
92
       JS_BENCHMARK_EXPORT(one)
93
       JS_BENCHMARK_EXPORT(two)
94
       JS_BENCHMARK_EXPORT(ten)
95
       JS_BENCHMARK_EXPORT(onecomplex)
96
       JS_BENCHMARK_EXPORT(tencomplex)
97
    }
98
  catch(...)
99
    {
100
       std::cerr << "Error" << std::endl;
101
       std::abort();
102
    }
103
}
104

105
}
106

107
#include <eina_js_node.hh>
108

109
NODE_MODULE(benchmark_object, ::benchmark_object_module_init)
110
#endif
111

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

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

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

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