1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

add debug counters for local variable (lavr) access.

* debug_counter.h: add the following counters:
  * lvar_get: counter for lvar get.
  * lvar_get_dynamic: counter for lvar get from upper frames.
  * lvar_set: coutner for lvar set.
  * lvar_set_dynamic: coutner for lvar set from upper frames.
  * lvar_set_slowpath: counter for lavr set using slowpath.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2017-05-31 06:46:57 +00:00
parent 76bca90c5b
commit cc50ed4a50
3 changed files with 15 additions and 0 deletions

View file

@ -13,6 +13,8 @@
#endif #endif
#ifdef RB_DEBUG_COUNTER #ifdef RB_DEBUG_COUNTER
/* method search */
RB_DEBUG_COUNTER(mc_inline_hit) RB_DEBUG_COUNTER(mc_inline_hit)
RB_DEBUG_COUNTER(mc_inline_miss) RB_DEBUG_COUNTER(mc_inline_miss)
RB_DEBUG_COUNTER(mc_global_hit) RB_DEBUG_COUNTER(mc_global_hit)
@ -23,6 +25,7 @@ RB_DEBUG_COUNTER(mc_cme_complement)
RB_DEBUG_COUNTER(mc_cme_complement_hit) RB_DEBUG_COUNTER(mc_cme_complement_hit)
RB_DEBUG_COUNTER(mc_search_super) RB_DEBUG_COUNTER(mc_search_super)
/* ivar access */
RB_DEBUG_COUNTER(ivar_get_ic_hit) RB_DEBUG_COUNTER(ivar_get_ic_hit)
RB_DEBUG_COUNTER(ivar_get_ic_miss) RB_DEBUG_COUNTER(ivar_get_ic_miss)
RB_DEBUG_COUNTER(ivar_get_ic_miss_serial) RB_DEBUG_COUNTER(ivar_get_ic_miss_serial)
@ -37,6 +40,13 @@ RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject)
RB_DEBUG_COUNTER(ivar_get_base) RB_DEBUG_COUNTER(ivar_get_base)
RB_DEBUG_COUNTER(ivar_set_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 */ /* object counts */
RB_DEBUG_COUNTER(obj_free) RB_DEBUG_COUNTER(obj_free)

View file

@ -58,6 +58,8 @@ getlocal
(VALUE val) (VALUE val)
{ {
val = *(vm_get_ep(GET_EP(), level) - idx); val = *(vm_get_ep(GET_EP(), level) - idx);
RB_DEBUG_COUNTER_INC(lvar_get);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
} }
/** /**
@ -74,6 +76,8 @@ setlocal
() ()
{ {
vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val); vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
RB_DEBUG_COUNTER_INC(lvar_set);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
} }
/** /**

View file

@ -320,6 +320,7 @@ vm_env_write_slowpath(const VALUE *ep, int index, VALUE v)
rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep)); rb_gc_writebarrier_remember(VM_ENV_ENVVAL(ep));
VM_FORCE_WRITE(&ep[index], v); VM_FORCE_WRITE(&ep[index], v);
VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED); VM_ENV_FLAGS_UNSET(ep, VM_ENV_FLAG_WB_REQUIRED);
RB_DEBUG_COUNTER_INC(lvar_set_slowpath);
} }
static inline void static inline void