From e03b3b4ae046785278b9188c83b2338f0f550526 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Fri, 2 Aug 2019 14:59:29 +0900 Subject: add debug_counters to check details. add debug_counters to check the Hash object statistics. --- debug_counter.h | 7 ++++++- gc.c | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/debug_counter.h b/debug_counter.h index 3ca784456a..ef35c55e6e 100644 --- a/debug_counter.h +++ b/debug_counter.h @@ -217,9 +217,14 @@ RB_DEBUG_COUNTER(obj_ary_shared) RB_DEBUG_COUNTER(obj_ary_shared_root_occupied) RB_DEBUG_COUNTER(obj_hash_empty) -RB_DEBUG_COUNTER(obj_hash_1_4) +RB_DEBUG_COUNTER(obj_hash_1) +RB_DEBUG_COUNTER(obj_hash_2) +RB_DEBUG_COUNTER(obj_hash_3) +RB_DEBUG_COUNTER(obj_hash_4) RB_DEBUG_COUNTER(obj_hash_5_8) RB_DEBUG_COUNTER(obj_hash_g8) + +RB_DEBUG_COUNTER(obj_hash_null) RB_DEBUG_COUNTER(obj_hash_ar) RB_DEBUG_COUNTER(obj_hash_st) RB_DEBUG_COUNTER(obj_hash_transient) diff --git a/gc.c b/gc.c index fb8fa53911..3684133323 100644 --- a/gc.c +++ b/gc.c @@ -2448,21 +2448,40 @@ obj_free(rb_objspace_t *objspace, VALUE obj) break; case T_HASH: #if USE_DEBUG_COUNTER - if (RHASH_SIZE(obj) > 8) { - RB_DEBUG_COUNTER_INC(obj_hash_g8); - } - else if (RHASH_SIZE(obj) > 4) { - RB_DEBUG_COUNTER_INC(obj_hash_5_8); - } - else if (RHASH_SIZE(obj) > 0) { - RB_DEBUG_COUNTER_INC(obj_hash_1_4); - } - else { + switch RHASH_SIZE(obj) { + case 0: RB_DEBUG_COUNTER_INC(obj_hash_empty); + break; + case 1: + RB_DEBUG_COUNTER_INC(obj_hash_1); + break; + case 2: + RB_DEBUG_COUNTER_INC(obj_hash_2); + break; + case 3: + RB_DEBUG_COUNTER_INC(obj_hash_3); + break; + case 4: + RB_DEBUG_COUNTER_INC(obj_hash_4); + break; + case 5: + case 6: + case 7: + case 8: + RB_DEBUG_COUNTER_INC(obj_hash_5_8); + break; + default: + GC_ASSERT(RHASH_SIZE(obj) > 8); + RB_DEBUG_COUNTER_INC(obj_hash_g8); } if (RHASH_AR_TABLE_P(obj)) { - RB_DEBUG_COUNTER_INC(obj_hash_ar); + if (RHASH_AR_TABLE(obj) == NULL) { + RB_DEBUG_COUNTER_INC(obj_hash_null); + } + else { + RB_DEBUG_COUNTER_INC(obj_hash_ar); + } } else { RB_DEBUG_COUNTER_INC(obj_hash_st); -- cgit v1.2.3