mirror of https://github.com/svaarala/duktape.git
Sami Vaarala
7 years ago
1 changed files with 385 additions and 0 deletions
@ -0,0 +1,385 @@ |
|||
/*
|
|||
* Rough performance test for comparing the difference between xxx_string(), |
|||
* xxx_lstring(), xxx_literal(), and xxx_heapptr() in application code. |
|||
*/ |
|||
|
|||
#include "duktape.h" |
|||
|
|||
int main(int argc, const char *argv[]) { |
|||
duk_context *ctx; |
|||
int i; |
|||
int mode; |
|||
void *hptr1; |
|||
void *hptr2; |
|||
void *hptr3; |
|||
void *hptr4; |
|||
void *hptr5; |
|||
void *hptr6; |
|||
void *hptr7; |
|||
void *hptr8; |
|||
void *hptr9; |
|||
void *hptr10; |
|||
|
|||
if (argc < 2) { |
|||
return 1; |
|||
} |
|||
mode = atoi(argv[1]); |
|||
|
|||
ctx = duk_create_heap_default(); |
|||
|
|||
duk_push_object(ctx); |
|||
|
|||
/* Push the strings we're dealing with, get their heapptrs, and keep
|
|||
* them reachable throughout the test. This is necessary for the |
|||
* heapptr test to work. But we also want this so that the strings |
|||
* won't be freed and reallocated repeatedly during the test. That |
|||
* might happen in real application code too, but this test focuses |
|||
* on the differences between the intern checks only, assuming the |
|||
* string itself is already in the string table. |
|||
*/ |
|||
duk_push_string(ctx, "foo1"); |
|||
hptr1 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo2"); |
|||
hptr2 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo3"); |
|||
hptr3 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo4"); |
|||
hptr4 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo5"); |
|||
hptr5 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo6"); |
|||
hptr6 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo7"); |
|||
hptr7 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo8"); |
|||
hptr8 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo9"); |
|||
hptr9 = duk_get_heapptr(ctx, -1); |
|||
duk_push_string(ctx, "foo10"); |
|||
hptr10 = duk_get_heapptr(ctx, -1); |
|||
|
|||
for (i = 0; i < 10000000; i++) { |
|||
switch (mode) { |
|||
case 0: |
|||
duk_push_string(ctx, "foo1"); |
|||
duk_push_string(ctx, "foo2"); |
|||
duk_push_string(ctx, "foo3"); |
|||
duk_push_string(ctx, "foo4"); |
|||
duk_push_string(ctx, "foo5"); |
|||
duk_push_string(ctx, "foo6"); |
|||
duk_push_string(ctx, "foo7"); |
|||
duk_push_string(ctx, "foo8"); |
|||
duk_push_string(ctx, "foo9"); |
|||
duk_push_string(ctx, "foo10"); |
|||
break; |
|||
case 1: |
|||
duk_push_lstring(ctx, "foo1", 4); |
|||
duk_push_lstring(ctx, "foo2", 4); |
|||
duk_push_lstring(ctx, "foo3", 4); |
|||
duk_push_lstring(ctx, "foo4", 4); |
|||
duk_push_lstring(ctx, "foo5", 4); |
|||
duk_push_lstring(ctx, "foo6", 4); |
|||
duk_push_lstring(ctx, "foo7", 4); |
|||
duk_push_lstring(ctx, "foo8", 4); |
|||
duk_push_lstring(ctx, "foo9", 4); |
|||
duk_push_lstring(ctx, "foo10", 5); |
|||
break; |
|||
case 2: |
|||
duk_push_literal(ctx, "foo1"); |
|||
duk_push_literal(ctx, "foo2"); |
|||
duk_push_literal(ctx, "foo3"); |
|||
duk_push_literal(ctx, "foo4"); |
|||
duk_push_literal(ctx, "foo5"); |
|||
duk_push_literal(ctx, "foo6"); |
|||
duk_push_literal(ctx, "foo7"); |
|||
duk_push_literal(ctx, "foo8"); |
|||
duk_push_literal(ctx, "foo9"); |
|||
duk_push_literal(ctx, "foo10"); |
|||
break; |
|||
case 3: |
|||
duk_push_heapptr(ctx, hptr1); |
|||
duk_push_heapptr(ctx, hptr2); |
|||
duk_push_heapptr(ctx, hptr3); |
|||
duk_push_heapptr(ctx, hptr4); |
|||
duk_push_heapptr(ctx, hptr5); |
|||
duk_push_heapptr(ctx, hptr6); |
|||
duk_push_heapptr(ctx, hptr7); |
|||
duk_push_heapptr(ctx, hptr8); |
|||
duk_push_heapptr(ctx, hptr9); |
|||
duk_push_heapptr(ctx, hptr10); |
|||
break; |
|||
case 10: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo1"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo2"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo3"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo4"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo5"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo6"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo7"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo8"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo9"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_string(ctx, 0, "foo10"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_prop_string(ctx, 0, "foo1"); |
|||
duk_get_prop_string(ctx, 0, "foo2"); |
|||
duk_get_prop_string(ctx, 0, "foo3"); |
|||
duk_get_prop_string(ctx, 0, "foo4"); |
|||
duk_get_prop_string(ctx, 0, "foo5"); |
|||
duk_get_prop_string(ctx, 0, "foo6"); |
|||
duk_get_prop_string(ctx, 0, "foo7"); |
|||
duk_get_prop_string(ctx, 0, "foo8"); |
|||
duk_get_prop_string(ctx, 0, "foo9"); |
|||
duk_get_prop_string(ctx, 0, "foo10"); |
|||
break; |
|||
case 11: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo1", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo2", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo3", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo4", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo5", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo6", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo7", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo8", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo9", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_lstring(ctx, 0, "foo10", 5); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_prop_lstring(ctx, 0, "foo1", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo2", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo3", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo4", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo5", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo6", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo7", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo8", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo9", 4); |
|||
duk_get_prop_lstring(ctx, 0, "foo10", 5); |
|||
break; |
|||
case 12: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo1"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo2"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo3"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo4"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo5"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo6"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo7"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo8"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo9"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_literal(ctx, 0, "foo10"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_prop_literal(ctx, 0, "foo1"); |
|||
duk_get_prop_literal(ctx, 0, "foo2"); |
|||
duk_get_prop_literal(ctx, 0, "foo3"); |
|||
duk_get_prop_literal(ctx, 0, "foo4"); |
|||
duk_get_prop_literal(ctx, 0, "foo5"); |
|||
duk_get_prop_literal(ctx, 0, "foo6"); |
|||
duk_get_prop_literal(ctx, 0, "foo7"); |
|||
duk_get_prop_literal(ctx, 0, "foo8"); |
|||
duk_get_prop_literal(ctx, 0, "foo9"); |
|||
duk_get_prop_literal(ctx, 0, "foo10"); |
|||
break; |
|||
case 13: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr1); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr2); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr3); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr5); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr6); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr7); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr8); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr9); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_prop_heapptr(ctx, 0, hptr10); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_prop_heapptr(ctx, 0, hptr1); |
|||
duk_get_prop_heapptr(ctx, 0, hptr2); |
|||
duk_get_prop_heapptr(ctx, 0, hptr3); |
|||
duk_get_prop_heapptr(ctx, 0, hptr4); |
|||
duk_get_prop_heapptr(ctx, 0, hptr5); |
|||
duk_get_prop_heapptr(ctx, 0, hptr6); |
|||
duk_get_prop_heapptr(ctx, 0, hptr7); |
|||
duk_get_prop_heapptr(ctx, 0, hptr8); |
|||
duk_get_prop_heapptr(ctx, 0, hptr9); |
|||
duk_get_prop_heapptr(ctx, 0, hptr10); |
|||
break; |
|||
case 20: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo1"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo2"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo3"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo4"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo5"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo6"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo7"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo8"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo9"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_string(ctx, "foo10"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_global_string(ctx, "foo1"); |
|||
duk_get_global_string(ctx, "foo2"); |
|||
duk_get_global_string(ctx, "foo3"); |
|||
duk_get_global_string(ctx, "foo4"); |
|||
duk_get_global_string(ctx, "foo5"); |
|||
duk_get_global_string(ctx, "foo6"); |
|||
duk_get_global_string(ctx, "foo7"); |
|||
duk_get_global_string(ctx, "foo8"); |
|||
duk_get_global_string(ctx, "foo9"); |
|||
duk_get_global_string(ctx, "foo10"); |
|||
break; |
|||
case 21: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo1", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo2", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo3", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo4", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo5", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo6", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo7", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo8", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo9", 4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_lstring(ctx, "foo10", 5); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_global_lstring(ctx, "foo1", 4); |
|||
duk_get_global_lstring(ctx, "foo2", 4); |
|||
duk_get_global_lstring(ctx, "foo3", 4); |
|||
duk_get_global_lstring(ctx, "foo4", 4); |
|||
duk_get_global_lstring(ctx, "foo5", 4); |
|||
duk_get_global_lstring(ctx, "foo6", 4); |
|||
duk_get_global_lstring(ctx, "foo7", 4); |
|||
duk_get_global_lstring(ctx, "foo8", 4); |
|||
duk_get_global_lstring(ctx, "foo9", 4); |
|||
duk_get_global_lstring(ctx, "foo10", 5); |
|||
break; |
|||
case 22: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo1"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo2"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo3"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo4"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo5"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo6"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo7"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo8"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo9"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_literal(ctx, "foo10"); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_global_literal(ctx, "foo1"); |
|||
duk_get_global_literal(ctx, "foo2"); |
|||
duk_get_global_literal(ctx, "foo3"); |
|||
duk_get_global_literal(ctx, "foo4"); |
|||
duk_get_global_literal(ctx, "foo5"); |
|||
duk_get_global_literal(ctx, "foo6"); |
|||
duk_get_global_literal(ctx, "foo7"); |
|||
duk_get_global_literal(ctx, "foo8"); |
|||
duk_get_global_literal(ctx, "foo9"); |
|||
duk_get_global_literal(ctx, "foo10"); |
|||
break; |
|||
case 23: |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr1); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr2); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr3); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr4); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr5); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr6); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr7); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr8); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr9); |
|||
duk_push_uint(ctx, 123); |
|||
duk_put_global_heapptr(ctx, hptr10); |
|||
duk_push_uint(ctx, 123); |
|||
duk_get_global_heapptr(ctx, hptr1); |
|||
duk_get_global_heapptr(ctx, hptr2); |
|||
duk_get_global_heapptr(ctx, hptr3); |
|||
duk_get_global_heapptr(ctx, hptr4); |
|||
duk_get_global_heapptr(ctx, hptr5); |
|||
duk_get_global_heapptr(ctx, hptr6); |
|||
duk_get_global_heapptr(ctx, hptr7); |
|||
duk_get_global_heapptr(ctx, hptr8); |
|||
duk_get_global_heapptr(ctx, hptr9); |
|||
duk_get_global_heapptr(ctx, hptr10); |
|||
break; |
|||
default: |
|||
return 1; |
|||
} |
|||
|
|||
/* Keep strings and test object. */ |
|||
duk_set_top(ctx, 11); |
|||
} |
|||
|
|||
duk_destroy_heap(ctx); |
|||
return 0; |
|||
} |
Loading…
Reference in new issue