diff options
Diffstat (limited to 'debug_counter.h')
| -rw-r--r-- | debug_counter.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/debug_counter.h b/debug_counter.h new file mode 100644 index 0000000000..f0f4e5ed0b --- /dev/null +++ b/debug_counter.h @@ -0,0 +1,109 @@ +/********************************************************************** + + debug_counter.h - + + created at: Tue Feb 21 16:51:18 2017 + + Copyright (C) 2017 Koichi Sasada + +**********************************************************************/ + +#ifndef USE_DEBUG_COUNTER +#define USE_DEBUG_COUNTER 0 +#endif + +#ifdef RB_DEBUG_COUNTER + +/* method search */ +RB_DEBUG_COUNTER(mc_inline_hit) +RB_DEBUG_COUNTER(mc_inline_miss) +RB_DEBUG_COUNTER(mc_global_hit) +RB_DEBUG_COUNTER(mc_global_miss) +RB_DEBUG_COUNTER(mc_global_state_miss) +RB_DEBUG_COUNTER(mc_class_serial_miss) +RB_DEBUG_COUNTER(mc_cme_complement) +RB_DEBUG_COUNTER(mc_cme_complement_hit) +RB_DEBUG_COUNTER(mc_search_super) + +/* ivar access */ +RB_DEBUG_COUNTER(ivar_get_ic_hit) +RB_DEBUG_COUNTER(ivar_get_ic_miss) +RB_DEBUG_COUNTER(ivar_get_ic_miss_serial) +RB_DEBUG_COUNTER(ivar_get_ic_miss_unset) +RB_DEBUG_COUNTER(ivar_get_ic_miss_noobject) +RB_DEBUG_COUNTER(ivar_set_ic_hit) +RB_DEBUG_COUNTER(ivar_set_ic_miss) +RB_DEBUG_COUNTER(ivar_set_ic_miss_serial) +RB_DEBUG_COUNTER(ivar_set_ic_miss_unset) +RB_DEBUG_COUNTER(ivar_set_ic_miss_oorange) +RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject) +RB_DEBUG_COUNTER(ivar_get_base) +RB_DEBUG_COUNTER(ivar_set_base) + +/* lvar access */ +RB_DEBUG_COUNTER(lvar_get) +RB_DEBUG_COUNTER(lvar_get_dynamic) +RB_DEBUG_COUNTER(lvar_set) +RB_DEBUG_COUNTER(lvar_set_dynamic) +RB_DEBUG_COUNTER(lvar_set_slowpath) + +/* object counts */ +RB_DEBUG_COUNTER(obj_free) + +RB_DEBUG_COUNTER(obj_str_ptr) +RB_DEBUG_COUNTER(obj_str_embed) +RB_DEBUG_COUNTER(obj_str_shared) +RB_DEBUG_COUNTER(obj_str_nofree) +RB_DEBUG_COUNTER(obj_str_fstr) + +RB_DEBUG_COUNTER(obj_ary_ptr) +RB_DEBUG_COUNTER(obj_ary_embed) + +RB_DEBUG_COUNTER(obj_obj_ptr) +RB_DEBUG_COUNTER(obj_obj_embed) + +/* load */ +RB_DEBUG_COUNTER(load_files) +RB_DEBUG_COUNTER(load_path_is_not_realpath) + +#endif + +#ifndef RUBY_DEBUG_COUNTER_H +#define RUBY_DEBUG_COUNTER_H 1 + +#if !defined(__GNUC__) && USE_DEBUG_COUNTER +#error "USE_DEBUG_COUNTER is not supported by other than __GNUC__" +#endif + +enum rb_debug_counter_type { +#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_##name, +#include "debug_counter.h" + RB_DEBUG_COUNTER_MAX +#undef RB_DEBUG_COUNTER +}; + +#if USE_DEBUG_COUNTER +#include "ruby/ruby.h" + +extern size_t rb_debug_counter[]; + +inline static int +rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond) +{ + if (cond) { + rb_debug_counter[(int)type] += add; + } + return cond; +} + +#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)) + +#else +#define RB_DEBUG_COUNTER_INC(type) ((void)0) +#define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (cond) +#define RB_DEBUG_COUNTER_INC_IF(type, cond) (cond) +#endif + +#endif /* RUBY_DEBUG_COUNTER_H */ |
