Add debug counters to RubyVM.stat (#6086)
* Add debug counters to RubyVM.stat * Use SIZET2NUM Co-author: Nobuyoshi Nakada <nobu@ruby-lang.org> * Prefix debug_counter_names
This commit is contained in:
parent
a2d3f5606a
commit
645cd94d9a
Notes:
git
2022-12-08 01:09:49 +00:00
Merged-By: k0kubun <takashikkbn@gmail.com>
@ -16,7 +16,7 @@
|
||||
|
||||
#if USE_DEBUG_COUNTER
|
||||
|
||||
static const char *const debug_counter_names[] = {
|
||||
const char *const rb_debug_counter_names[] = {
|
||||
#define DEBUG_COUNTER_NAME_EMPTY "" /* Suppress -Wstring-concatenation */
|
||||
DEBUG_COUNTER_NAME_EMPTY
|
||||
#undef DEBUG_COUNTER_NAME_EMPTY
|
||||
@ -26,7 +26,7 @@ static const char *const debug_counter_names[] = {
|
||||
};
|
||||
|
||||
MJIT_SYMBOL_EXPORT_BEGIN
|
||||
size_t rb_debug_counter[numberof(debug_counter_names)];
|
||||
size_t rb_debug_counter[numberof(rb_debug_counter_names)];
|
||||
void rb_debug_counter_add_atomic(enum rb_debug_counter_type type, int add);
|
||||
MJIT_SYMBOL_EXPORT_END
|
||||
|
||||
@ -67,7 +67,7 @@ ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr)
|
||||
int i;
|
||||
if (names_ptr != NULL) {
|
||||
for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
|
||||
names_ptr[i] = debug_counter_names[i];
|
||||
names_ptr[i] = rb_debug_counter_names[i];
|
||||
}
|
||||
}
|
||||
if (counters_ptr != NULL) {
|
||||
@ -97,7 +97,7 @@ rb_debug_counter_show_results(const char *msg)
|
||||
fprintf(stderr, "[RUBY_DEBUG_COUNTER]\t%d %s\n", getpid(), msg);
|
||||
for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
|
||||
fprintf(stderr, "[RUBY_DEBUG_COUNTER]\t%-30s\t%'14"PRIuSIZE"\n",
|
||||
debug_counter_names[i],
|
||||
rb_debug_counter_names[i],
|
||||
rb_debug_counter[i]);
|
||||
}
|
||||
}
|
||||
|
19
vm.c
19
vm.c
@ -66,6 +66,8 @@ MJIT_FUNC_EXPORTED
|
||||
#endif
|
||||
VALUE vm_exec(rb_execution_context_t *, bool);
|
||||
|
||||
extern const char *const rb_debug_counter_names[];
|
||||
|
||||
PUREFUNC(static inline const VALUE *VM_EP_LEP(const VALUE *));
|
||||
static inline const VALUE *
|
||||
VM_EP_LEP(const VALUE *ep)
|
||||
@ -578,6 +580,8 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id,
|
||||
* :global_cvar_state=>27
|
||||
* }
|
||||
*
|
||||
* If <tt>USE_DEBUG_COUNTER</tt> is enabled, debug counters will be included.
|
||||
*
|
||||
* The contents of the hash are implementation specific and may be changed in
|
||||
* the future.
|
||||
*
|
||||
@ -622,6 +626,21 @@ vm_stat(int argc, VALUE *argv, VALUE self)
|
||||
SET(next_shape_id, (rb_serial_t)GET_VM()->next_shape_id);
|
||||
#undef SET
|
||||
|
||||
#if USE_DEBUG_COUNTER
|
||||
ruby_debug_counter_show_at_exit(FALSE);
|
||||
for (size_t i = 0; i < RB_DEBUG_COUNTER_MAX; i++) {
|
||||
const VALUE name = rb_sym_intern_ascii_cstr(rb_debug_counter_names[i]);
|
||||
const VALUE boxed_value = SIZET2NUM(rb_debug_counter[i]);
|
||||
|
||||
if (key == name) {
|
||||
return boxed_value;
|
||||
}
|
||||
else if (hash != Qnil) {
|
||||
rb_hash_aset(hash, name, boxed_value);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!NIL_P(key)) { /* matched key should return above */
|
||||
rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user