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

add debug_counter access functions.

These functions are enabled only on USE_DEBUG_COUNTER=1.
This commit is contained in:
Koichi Sasada 2019-12-25 01:32:37 +09:00
parent 9b617ffa88
commit 5220145ea2
2 changed files with 75 additions and 17 deletions

View file

@ -8,8 +8,8 @@
**********************************************************************/ **********************************************************************/
#include "debug_counter.h"
#include "internal.h" #include "internal.h"
#include "debug_counter.h"
#include <stdio.h> #include <stdio.h>
#include <locale.h> #include <locale.h>
@ -25,6 +25,52 @@ MJIT_SYMBOL_EXPORT_BEGIN
size_t rb_debug_counter[numberof(debug_counter_names)]; size_t rb_debug_counter[numberof(debug_counter_names)];
MJIT_SYMBOL_EXPORT_END MJIT_SYMBOL_EXPORT_END
int debug_counter_disable_show_at_exit = 0;
// note that this operation is not atomic.
void
ruby_debug_counter_reset(void)
{
for (int i = 0; i < RB_DEBUG_COUNTER_MAX; i++) {
switch (i) {
case RB_DEBUG_COUNTER_mjit_length_unit_queue:
case RB_DEBUG_COUNTER_mjit_length_active_units:
case RB_DEBUG_COUNTER_mjit_length_compact_units:
case RB_DEBUG_COUNTER_mjit_length_stale_units:
// These counters may be decreased and should not be reset.
break;
default:
rb_debug_counter[i] = 0;
break;
}
}
}
// note that this operation is not atomic.
size_t
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];
}
}
if (counters_ptr != NULL) {
for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
counters_ptr[i] = rb_debug_counter[i];
}
}
return RB_DEBUG_COUNTER_MAX;
}
void
ruby_debug_counter_show_at_exit(int enable)
{
debug_counter_disable_show_at_exit = !enable;
}
void void
rb_debug_counter_show_results(const char *msg) rb_debug_counter_show_results(const char *msg)
{ {
@ -53,19 +99,7 @@ rb_debug_counter_show(RB_UNUSED_VAR(VALUE klass))
VALUE VALUE
rb_debug_counter_reset(RB_UNUSED_VAR(VALUE klass)) rb_debug_counter_reset(RB_UNUSED_VAR(VALUE klass))
{ {
for (int i = 0; i < RB_DEBUG_COUNTER_MAX; i++) { ruby_debug_counter_reset();
switch (i) {
case RB_DEBUG_COUNTER_mjit_length_unit_queue:
case RB_DEBUG_COUNTER_mjit_length_active_units:
case RB_DEBUG_COUNTER_mjit_length_compact_units:
case RB_DEBUG_COUNTER_mjit_length_stale_units:
// These counters may be decreased and should not be reset.
break;
default:
rb_debug_counter[i] = 0;
break;
}
}
return Qnil; return Qnil;
} }
@ -73,11 +107,29 @@ __attribute__((destructor))
static void static void
debug_counter_show_results_at_exit(void) debug_counter_show_results_at_exit(void)
{ {
rb_debug_counter_show_results("normal exit."); if (debug_counter_disable_show_at_exit == 0) {
rb_debug_counter_show_results("normal exit.");
}
} }
#else #else
void void
rb_debug_counter_show_results(const char *msg) rb_debug_counter_show_results(const char *msg)
{ {
} }
size_t
ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr)
{
return 0;
}
void
ruby_debug_counter_reset(void)
{
}
void
ruby_debug_counter_show_at_exit(int enable)
{
}
#endif /* USE_DEBUG_COUNTER */ #endif /* USE_DEBUG_COUNTER */

View file

@ -353,8 +353,6 @@ enum rb_debug_counter_type {
}; };
#if USE_DEBUG_COUNTER #if USE_DEBUG_COUNTER
#include "ruby/ruby.h"
extern size_t rb_debug_counter[]; extern size_t rb_debug_counter[];
inline static int inline static int
@ -381,4 +379,12 @@ VALUE rb_debug_counter_show(VALUE klass);
void rb_debug_counter_show_results(const char *msg); void rb_debug_counter_show_results(const char *msg);
RUBY_SYMBOL_EXPORT_BEGIN
size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
void ruby_debug_counter_reset(void);
void ruby_debug_counter_show_at_exit(int enable);
RUBY_SYMBOL_EXPORT_END
#endif /* RUBY_DEBUG_COUNTER_H */ #endif /* RUBY_DEBUG_COUNTER_H */