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:
parent
9b617ffa88
commit
5220145ea2
2 changed files with 75 additions and 17 deletions
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue