mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 1fd1fb2f2c
			
		
	
	
		1fd1fb2f2c
		
	
	
	
	
		
			
			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 */
 |