diff --git a/debug_counter.c b/debug_counter.c index b5a0606454..4a0655380f 100644 --- a/debug_counter.c +++ b/debug_counter.c @@ -43,6 +43,15 @@ rb_debug_counter_show_results(const char *msg) } } +VALUE +rb_debug_counter_reset(void) +{ + for (int i = 0; i < RB_DEBUG_COUNTER_MAX; i++) { + rb_debug_counter[i] = 0; + } + return Qnil; +} + __attribute__((destructor)) static void debug_counter_show_results_at_exit(void) diff --git a/debug_counter.h b/debug_counter.h index b28efb3278..8510bb90f8 100644 --- a/debug_counter.h +++ b/debug_counter.h @@ -319,6 +319,8 @@ rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond) return cond; } +VALUE rb_debug_counter_reset(void); + #define RB_DEBUG_COUNTER_INC(type) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, 1) #define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !(cond))) #define RB_DEBUG_COUNTER_INC_IF(type, cond) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, (cond)) diff --git a/vm.c b/vm.c index 142573929a..8c208bb26c 100644 --- a/vm.c +++ b/vm.c @@ -2872,6 +2872,9 @@ Init_VM(void) rb_undef_alloc_func(rb_cRubyVM); rb_undef_method(CLASS_OF(rb_cRubyVM), "new"); rb_define_singleton_method(rb_cRubyVM, "stat", vm_stat, -1); +#if USE_DEBUG_COUNTER + rb_define_singleton_method(rb_cRubyVM, "reset_debug_counters", rb_debug_counter_reset, 0); +#endif /* FrozenCore (hidden) */ fcore = rb_class_new(rb_cBasicObject);