aboutsummaryrefslogtreecommitdiffstats
path: root/debug_counter.h
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-01-08 08:20:36 +0900
committerKoichi Sasada <ko1@atdot.net>2020-02-22 09:58:59 +0900
commitf2286925f08406bc857f7b03ad6779a5d61443ae (patch)
tree62d056c0a8c253f17fccd4a506ddb6cbf1f7bed5 /debug_counter.h
parenta1eb1fabef1bca0696449cd358d93f5a644d5914 (diff)
downloadruby-f2286925f08406bc857f7b03ad6779a5d61443ae.tar.gz
VALUE size packed callinfo (ci).
Now, rb_call_info contains how to call the method with tuple of (mid, orig_argc, flags, kwarg). Most of cases, kwarg == NULL and mid+argc+flags only requires 64bits. So this patch packed rb_call_info to VALUE (1 word) on such cases. If we can not represent it in VALUE, then use imemo_callinfo which contains conventional callinfo (rb_callinfo, renamed from rb_call_info). iseq->body->ci_kw_size is removed because all of callinfo is VALUE size (packed ci or a pointer to imemo_callinfo). To access ci information, we need to use these functions: vm_ci_mid(ci), _flag(ci), _argc(ci), _kwarg(ci). struct rb_call_info_kw_arg is renamed to rb_callinfo_kwarg. rb_funcallv_with_cc() and rb_method_basic_definition_p_with_cc() is temporary removed because cd->ci should be marked.
Diffstat (limited to 'debug_counter.h')
-rw-r--r--debug_counter.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/debug_counter.h b/debug_counter.h
index eb313fc838..19909fbb29 100644
--- a/debug_counter.h
+++ b/debug_counter.h
@@ -49,6 +49,12 @@ RB_DEBUG_COUNTER(mc_miss_by_visi)
RB_DEBUG_COUNTER(mc_miss_spurious)
RB_DEBUG_COUNTER(mc_miss_reuse_call)
+// callinfo
+RB_DEBUG_COUNTER(ci_packed)
+RB_DEBUG_COUNTER(ci_kw)
+RB_DEBUG_COUNTER(ci_nokw)
+RB_DEBUG_COUNTER(ci_runtime)
+
/*
* call cache fastpath usage
*/
@@ -282,6 +288,7 @@ RB_DEBUG_COUNTER(obj_imemo_throw_data)
RB_DEBUG_COUNTER(obj_imemo_ifunc)
RB_DEBUG_COUNTER(obj_imemo_memo)
RB_DEBUG_COUNTER(obj_imemo_parser_strterm)
+RB_DEBUG_COUNTER(obj_imemo_callinfo)
/* ar_table */
RB_DEBUG_COUNTER(artable_hint_hit)