mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**********************************************************************
 | 
						|
 | 
						|
  debug_counter.h -
 | 
						|
 | 
						|
  created at: Tue Feb 21 16:51:18 2017
 | 
						|
 | 
						|
  Copyright (C) 2017 Koichi Sasada
 | 
						|
 | 
						|
**********************************************************************/
 | 
						|
 | 
						|
#ifndef USE_DEBUG_COUNTER
 | 
						|
#define USE_DEBUG_COUNTER 0
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef RB_DEBUG_COUNTER
 | 
						|
 | 
						|
/* method search */
 | 
						|
RB_DEBUG_COUNTER(mc_inline_hit)
 | 
						|
RB_DEBUG_COUNTER(mc_inline_miss)
 | 
						|
RB_DEBUG_COUNTER(mc_global_hit)
 | 
						|
RB_DEBUG_COUNTER(mc_global_miss)
 | 
						|
RB_DEBUG_COUNTER(mc_global_state_miss)
 | 
						|
RB_DEBUG_COUNTER(mc_class_serial_miss)
 | 
						|
RB_DEBUG_COUNTER(mc_cme_complement)
 | 
						|
RB_DEBUG_COUNTER(mc_cme_complement_hit)
 | 
						|
RB_DEBUG_COUNTER(mc_search_super)
 | 
						|
 | 
						|
/* ivar access */
 | 
						|
RB_DEBUG_COUNTER(ivar_get_ic_hit)
 | 
						|
RB_DEBUG_COUNTER(ivar_get_ic_miss)
 | 
						|
RB_DEBUG_COUNTER(ivar_get_ic_miss_serial)
 | 
						|
RB_DEBUG_COUNTER(ivar_get_ic_miss_unset)
 | 
						|
RB_DEBUG_COUNTER(ivar_get_ic_miss_noobject)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_hit)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_miss)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_miss_serial)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_miss_unset)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_miss_oorange)
 | 
						|
RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject)
 | 
						|
RB_DEBUG_COUNTER(ivar_get_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 */
 | 
						|
RB_DEBUG_COUNTER(obj_free)
 | 
						|
 | 
						|
RB_DEBUG_COUNTER(obj_str_ptr)
 | 
						|
RB_DEBUG_COUNTER(obj_str_embed)
 | 
						|
RB_DEBUG_COUNTER(obj_str_shared)
 | 
						|
RB_DEBUG_COUNTER(obj_str_nofree)
 | 
						|
RB_DEBUG_COUNTER(obj_str_fstr)
 | 
						|
 | 
						|
RB_DEBUG_COUNTER(obj_ary_ptr)
 | 
						|
RB_DEBUG_COUNTER(obj_ary_embed)
 | 
						|
 | 
						|
RB_DEBUG_COUNTER(obj_obj_ptr)
 | 
						|
RB_DEBUG_COUNTER(obj_obj_embed)
 | 
						|
 | 
						|
/* load */
 | 
						|
RB_DEBUG_COUNTER(load_files)
 | 
						|
RB_DEBUG_COUNTER(load_path_is_not_realpath)
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef RUBY_DEBUG_COUNTER_H
 | 
						|
#define RUBY_DEBUG_COUNTER_H 1
 | 
						|
 | 
						|
#if !defined(__GNUC__) && USE_DEBUG_COUNTER
 | 
						|
#error "USE_DEBUG_COUNTER is not supported by other than __GNUC__"
 | 
						|
#endif
 | 
						|
 | 
						|
enum rb_debug_counter_type {
 | 
						|
#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_##name,
 | 
						|
#include __FILE__
 | 
						|
    RB_DEBUG_COUNTER_MAX
 | 
						|
#undef RB_DEBUG_COUNTER
 | 
						|
};
 | 
						|
 | 
						|
#if USE_DEBUG_COUNTER
 | 
						|
#include "ruby/ruby.h"
 | 
						|
 | 
						|
extern size_t rb_debug_counter[];
 | 
						|
 | 
						|
inline static int
 | 
						|
rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond)
 | 
						|
{
 | 
						|
    if (cond) {
 | 
						|
	rb_debug_counter[(int)type] += add;
 | 
						|
    }
 | 
						|
    return cond;
 | 
						|
}
 | 
						|
 | 
						|
#define RB_DEBUG_COUNTER_INC(type)                rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, 1)
 | 
						|
#define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !(cond)))
 | 
						|
#define RB_DEBUG_COUNTER_INC_IF(type, cond)       rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, (cond))
 | 
						|
 | 
						|
#else
 | 
						|
#define RB_DEBUG_COUNTER_INC(type)              ((void)0)
 | 
						|
#define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (cond)
 | 
						|
#define RB_DEBUG_COUNTER_INC_IF(type, cond)     (cond)
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* RUBY_DEBUG_COUNTER_H */
 |