From fd4683ef292f15e1da3f886238d17e4dce66638c Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Mon, 10 Jul 2023 21:55:53 +0200 Subject: [PATCH] Add performance counter for global variables (#349) --- src/be_debuglib.c | 1 + src/be_vm.c | 4 ++++ src/be_vm.h | 1 + 3 files changed, 6 insertions(+) diff --git a/src/be_debuglib.c b/src/be_debuglib.c index 153af55f..49ee027b 100644 --- a/src/be_debuglib.c +++ b/src/be_debuglib.c @@ -167,6 +167,7 @@ static int m_counters(bvm *vm) map_insert(vm, "call", vm->counter_call); map_insert(vm, "get", vm->counter_get); map_insert(vm, "set", vm->counter_set); + map_insert(vm, "getgbl", vm->counter_get_global); map_insert(vm, "try", vm->counter_try); map_insert(vm, "raise", vm->counter_exc); map_insert(vm, "objects", vm->counter_gc_kept); diff --git a/src/be_vm.c b/src/be_vm.c index 40a63fd6..9864bdbd 100644 --- a/src/be_vm.c +++ b/src/be_vm.c @@ -507,6 +507,7 @@ BERRY_API bvm* be_vm_new(void) vm->counter_call = 0; vm->counter_get = 0; vm->counter_set = 0; + vm->counter_get_global = 0; vm->counter_try = 0; vm->counter_exc = 0; vm->counter_gc_kept = 0; @@ -579,6 +580,9 @@ static void vm_exec(bvm *vm) dispatch(); } opcase(GETNGBL): { /* get Global by name */ +#if BE_USE_PERF_COUNTERS + vm->counter_get_global++; +#endif bvalue *v = RA(); bvalue *b = RKB(); if (var_isstr(b)) { diff --git a/src/be_vm.h b/src/be_vm.h index 55f3fc7f..3c5e5bc0 100644 --- a/src/be_vm.h +++ b/src/be_vm.h @@ -113,6 +113,7 @@ struct bvm { uint32_t counter_call; /* counter for calls, VM or native */ uint32_t counter_get; /* counter for GETMBR or GETMET */ uint32_t counter_set; /* counter for SETMBR */ + uint32_t counter_get_global; /* counter for GETNBGL */ uint32_t counter_try; /* counter for `try` statement */ uint32_t counter_exc; /* counter for raised exceptions */ uint32_t counter_gc_kept; /* counter for objects scanned by last gc */