@@ -12,28 +12,23 @@ int counter = 0;
12
12
13
13
extern " C" {
14
14
15
- int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE get_counter()
16
- {
15
+ int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE get_counter() {
17
16
return counter;
18
17
}
19
18
20
- void __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE increment_counter()
21
- {
19
+ void __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE increment_counter() {
22
20
++counter;
23
21
}
24
22
25
- int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE sum_int(int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8, int v9)
26
- {
23
+ int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE sum_int(int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8, int v9) {
27
24
return v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9;
28
25
}
29
26
30
- float __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE sum_float(float v1, float v2, float v3, float v4, float v5, float v6, float v7, float v8, float v9)
31
- {
27
+ float __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE sum_float(float v1, float v2, float v3, float v4, float v5, float v6, float v7, float v8, float v9) {
32
28
return v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9;
33
29
}
34
30
35
- int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE returns_input(int i)
36
- {
31
+ int __attribute__ ((noinline)) EMSCRIPTEN_KEEPALIVE returns_input(int i) {
37
32
return i;
38
33
}
39
34
@@ -60,13 +55,11 @@ extern void call_through_interface2();
60
55
extern void returns_val_benchmark ();
61
56
}
62
57
63
- emscripten::val returns_val (emscripten::val value)
64
- {
58
+ emscripten::val returns_val (emscripten::val value) {
65
59
return emscripten::val (value.as <unsigned >() + 1 );
66
60
}
67
61
68
- class Vec3
69
- {
62
+ class Vec3 {
70
63
public:
71
64
Vec3 ():x(0 ),y(0 ),z(0 ) {}
72
65
Vec3 (float x_, float y_, float z_):x(x_),y(y_),z(z_) {}
@@ -75,8 +68,7 @@ class Vec3
75
68
76
69
Vec3 add (const Vec3 &lhs, const Vec3 &rhs) { return Vec3 (lhs.x +rhs.x , lhs.y +rhs.y , lhs.z +rhs.z ); }
77
70
78
- class Transform
79
- {
71
+ class Transform {
80
72
public:
81
73
Transform ():scale(1 ) {}
82
74
@@ -87,64 +79,52 @@ class Transform
87
79
Vec3 __attribute__ ((noinline)) GetPosition() const { return pos; }
88
80
Vec3 __attribute__ ((noinline)) GetRotation() const { return rot; }
89
81
float __attribute__ ((noinline)) GetScale() const { return scale; }
90
-
82
+
91
83
void __attribute__ ((noinline)) SetPosition(const Vec3 &pos_) { pos = pos_; }
92
84
void __attribute__ ((noinline)) SetRotation(const Vec3 &rot_) { rot = rot_; }
93
85
void __attribute__ ((noinline)) SetScale(float scale_) { scale = scale_; }
94
86
};
95
87
typedef std::shared_ptr<Transform> TransformPtr;
96
88
97
- class GameObject
98
- {
89
+ class GameObject {
99
90
public:
100
- GameObject ()
101
- {
91
+ GameObject () {
102
92
transform = std::make_shared<Transform>();
103
93
}
104
94
std::shared_ptr<Transform> transform;
105
-
95
+
106
96
TransformPtr __attribute__ ((noinline)) GetTransform() const { return transform; }
107
97
};
108
98
typedef std::shared_ptr<GameObject> GameObjectPtr;
109
99
110
- GameObjectPtr create_game_object ()
111
- {
100
+ GameObjectPtr create_game_object () {
112
101
return std::make_shared<GameObject>();
113
102
}
114
103
115
- GameObjectPtr __attribute__ ((noinline)) pass_gameobject_ptr(GameObjectPtr p)
116
- {
104
+ GameObjectPtr __attribute__ ((noinline)) pass_gameobject_ptr(GameObjectPtr p) {
117
105
return p;
118
106
}
119
107
120
- class Foo
121
- {
108
+ class Foo {
122
109
public:
123
- Foo ()
124
- :class_counter(0 )
125
- {
126
- }
110
+ Foo () : class_counter(0 ) {}
127
111
128
- void __attribute__ ((noinline)) incr_global_counter()
129
- {
112
+ void __attribute__ ((noinline)) incr_global_counter() {
130
113
++counter;
131
114
}
132
115
133
- void __attribute__ ((noinline)) incr_class_counter()
134
- {
116
+ void __attribute__ ((noinline)) incr_class_counter() {
135
117
++class_counter;
136
118
}
137
119
138
- int class_counter_val () const
139
- {
120
+ int class_counter_val () const {
140
121
return class_counter;
141
122
}
142
123
143
124
int class_counter;
144
125
};
145
126
146
- class Interface
147
- {
127
+ class Interface {
148
128
public:
149
129
virtual ~Interface () {}
150
130
virtual void call0 () = 0;
@@ -247,14 +227,13 @@ void callInterface3(unsigned N, Interface& o) {
247
227
}
248
228
}
249
229
250
- EMSCRIPTEN_BINDINGS (benchmark)
251
- {
230
+ EMSCRIPTEN_BINDINGS (benchmark) {
252
231
using namespace emscripten ;
253
-
232
+
254
233
class_<GameObject>(" GameObject" )
255
234
.smart_ptr <GameObjectPtr>(" GameObjectPtr" )
256
235
.function (" GetTransform" , &GameObject::GetTransform);
257
-
236
+
258
237
class_<Transform>(" Transform" )
259
238
.smart_ptr <TransformPtr>(" TransformPtr" )
260
239
.function (" GetPosition" , &Transform::GetPosition)
@@ -263,22 +242,22 @@ EMSCRIPTEN_BINDINGS(benchmark)
263
242
.function (" SetPosition" , &Transform::SetPosition)
264
243
.function (" SetRotation" , &Transform::SetRotation)
265
244
.function (" SetScale" , &Transform::SetScale);
266
-
245
+
267
246
value_array<Vec3>(" Vec3" )
268
247
.element (&Vec3::x)
269
248
.element (&Vec3::y)
270
249
.element (&Vec3::z);
271
-
250
+
272
251
function (" create_game_object" , &create_game_object);
273
252
function (" pass_gameobject_ptr" , &pass_gameobject_ptr);
274
253
function (" add" , &add);
275
-
254
+
276
255
function (" get_counter" , &get_counter);
277
256
function (" increment_counter" , &increment_counter);
278
257
function (" returns_input" , &returns_input);
279
258
function (" sum_int" , &sum_int);
280
259
function (" sum_float" , &sum_float);
281
-
260
+
282
261
class_<Foo>(" Foo" )
283
262
.constructor <>()
284
263
.function (" incr_global_counter" , &Foo::incr_global_counter)
@@ -298,11 +277,9 @@ EMSCRIPTEN_BINDINGS(benchmark)
298
277
function (" returns_val" , &returns_val);
299
278
}
300
279
301
- void __attribute__ ((noinline)) emscripten_get_now_benchmark(int N)
302
- {
280
+ void __attribute__ ((noinline)) emscripten_get_now_benchmark(int N) {
303
281
volatile float t = emscripten_get_now ();
304
- for (int i = 0 ; i < N; ++i)
305
- {
282
+ for (int i = 0 ; i < N; ++i) {
306
283
emscripten_get_now ();
307
284
emscripten_get_now ();
308
285
emscripten_get_now ();
@@ -318,11 +295,9 @@ void __attribute__((noinline)) emscripten_get_now_benchmark(int N)
318
295
printf (" C++ emscripten_get_now %d iters: %f msecs.\n " , N, (t2-t));
319
296
}
320
297
321
- void __attribute__ ((noinline)) increment_counter_benchmark(int N)
322
- {
298
+ void __attribute__ ((noinline)) increment_counter_benchmark(int N) {
323
299
volatile float t = emscripten_get_now ();
324
- for (int i = 0 ; i < N; ++i)
325
- {
300
+ for ( int i = 0 ; i < N; ++i) {
326
301
increment_counter ();
327
302
increment_counter ();
328
303
increment_counter ();
@@ -338,12 +313,10 @@ void __attribute__((noinline)) increment_counter_benchmark(int N)
338
313
printf (" C++ increment_counter %d iters: %f msecs.\n " , N, (t2-t));
339
314
}
340
315
341
- void __attribute__ ((noinline)) increment_class_counter_benchmark(int N)
342
- {
316
+ void __attribute__ ((noinline)) increment_class_counter_benchmark(int N) {
343
317
Foo foo;
344
318
volatile float t = emscripten_get_now ();
345
- for (int i = 0 ; i < N; ++i)
346
- {
319
+ for (int i = 0 ; i < N; ++i) {
347
320
foo.incr_class_counter ();
348
321
foo.incr_class_counter ();
349
322
foo.incr_class_counter ();
@@ -359,12 +332,10 @@ void __attribute__((noinline)) increment_class_counter_benchmark(int N)
359
332
printf (" C++ increment_class_counter %d iters: %f msecs. result: %d\n " , N, (t2-t), foo.class_counter );
360
333
}
361
334
362
- void __attribute__ ((noinline)) returns_input_benchmark()
363
- {
335
+ void __attribute__ ((noinline)) returns_input_benchmark() {
364
336
volatile int r = 0 ;
365
337
volatile float t = emscripten_get_now ();
366
- for (int i = 0 ; i < 100000 ; ++i)
367
- {
338
+ for (int i = 0 ; i < 100000 ; ++i) {
368
339
r += returns_input (i);
369
340
r += returns_input (i);
370
341
r += returns_input (i);
@@ -380,12 +351,10 @@ void __attribute__((noinline)) returns_input_benchmark()
380
351
printf (" C++ returns_input 100000 iters: %f msecs.\n " , (t2-t));
381
352
}
382
353
383
- void __attribute__ ((noinline)) sum_int_benchmark()
384
- {
354
+ void __attribute__ ((noinline)) sum_int_benchmark() {
385
355
volatile float t = emscripten_get_now ();
386
356
volatile int r = 0 ;
387
- for (int i = 0 ; i < 100000 ; ++i)
388
- {
357
+ for (int i = 0 ; i < 100000 ; ++i) {
389
358
r += sum_int (i,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 );
390
359
r += sum_int (i,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 );
391
360
r += sum_int (i,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 );
@@ -401,12 +370,10 @@ void __attribute__((noinline)) sum_int_benchmark()
401
370
printf (" C++ sum_int 100000 iters: %f msecs.\n " , (t2-t));
402
371
}
403
372
404
- void __attribute__ ((noinline)) sum_float_benchmark()
405
- {
373
+ void __attribute__ ((noinline)) sum_float_benchmark() {
406
374
volatile float f = 0 .f ;
407
375
volatile float t = emscripten_get_now ();
408
- for (int i = 0 ; i < 100000 ; ++i)
409
- {
376
+ for (int i = 0 ; i < 100000 ; ++i) {
410
377
f += sum_float ((float )i,2 .f ,3 .f ,4 .f ,5 .f ,6 .f ,7 .f ,8 .f ,9 .f );
411
378
f += sum_float ((float )i,2 .f ,3 .f ,4 .f ,5 .f ,6 .f ,7 .f ,8 .f ,9 .f );
412
379
f += sum_float ((float )i,2 .f ,3 .f ,4 .f ,5 .f ,6 .f ,7 .f ,8 .f ,9 .f );
@@ -426,12 +393,12 @@ void __attribute__((noinline)) move_gameobjects_benchmark()
426
393
{
427
394
const int N = 10000 ;
428
395
GameObjectPtr objects[N];
429
- for (int i = 0 ; i < N; ++i)
396
+ for (int i = 0 ; i < N; ++i) {
430
397
objects[i] = create_game_object ();
431
-
398
+ }
399
+
432
400
volatile float t = emscripten_get_now ();
433
- for (int i = 0 ; i < N; ++i)
434
- {
401
+ for (int i = 0 ; i < N; ++i) {
435
402
TransformPtr t = objects[i]->GetTransform ();
436
403
Vec3 pos = add (t->GetPosition (), Vec3 (2 .f , 0 .f , 1 .f ));
437
404
Vec3 rot = add (t->GetRotation (), Vec3 (0 .1f , 0 .2f , 0 .3f ));
@@ -441,21 +408,22 @@ void __attribute__((noinline)) move_gameobjects_benchmark()
441
408
volatile float t2 = emscripten_get_now ();
442
409
443
410
Vec3 accum;
444
- for (int i = 0 ; i < N; ++i)
411
+ for (int i = 0 ; i < N; ++i) {
445
412
accum = add (add (accum, objects[i]->GetTransform ()->GetPosition ()), objects[i]->GetTransform ()->GetRotation ());
413
+ }
446
414
printf (" C++ move_gameobjects %d iters: %f msecs. Result: %f\n " , N, (t2-t), accum.x +accum.y +accum.z );
447
415
}
448
416
449
417
void __attribute__ ((noinline)) pass_gameobject_ptr_benchmark()
450
418
{
451
419
const int N = 100000 ;
452
420
GameObjectPtr objects[N];
453
- for (int i = 0 ; i < N; ++i)
421
+ for (int i = 0 ; i < N; ++i) {
454
422
objects[i] = create_game_object ();
455
-
423
+ }
424
+
456
425
volatile float t = emscripten_get_now ();
457
- for (int i = 0 ; i < N; ++i)
458
- {
426
+ for (int i = 0 ; i < N; ++i) {
459
427
objects[i] = pass_gameobject_ptr (objects[i]);
460
428
}
461
429
volatile float t2 = emscripten_get_now ();
@@ -494,22 +462,20 @@ void __attribute__((noinline)) numeric_val_array_benchmark() {
494
462
// val::array(const std::vector<T>& vec) with opt numeric types: 27.500000 msecs.
495
463
}
496
464
497
- int EMSCRIPTEN_KEEPALIVE main ()
498
- {
499
- for (int i = 1000 ; i <= 100000 ; i *= 10 )
465
+ int main () {
466
+ for (int i = 1000 ; i <= 100000 ; i *= 10 ) {
500
467
emscripten_get_now_benchmark (i);
468
+ }
501
469
502
470
printf (" \n " );
503
- for (int i = 1000 ; i <= 100000 ; i *= 10 )
504
- {
471
+ for (int i = 1000 ; i <= 100000 ; i *= 10 ) {
505
472
increment_counter_benchmark (i);
506
473
increment_counter_benchmark_js (i);
507
474
increment_counter_benchmark_embind_js (i);
508
475
printf (" \n " );
509
476
}
510
477
511
- for (int i = 1000 ; i <= 100000 ; i *= 10 )
512
- {
478
+ for (int i = 1000 ; i <= 100000 ; i *= 10 ) {
513
479
increment_class_counter_benchmark (i);
514
480
increment_class_counter_benchmark_embind_js (i);
515
481
printf (" \n " );
0 commit comments