summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-08-02 14:59:29 +0900
committerKoichi Sasada <ko1@atdot.net>2019-08-02 15:59:47 +0900
commite03b3b4ae046785278b9188c83b2338f0f550526 (patch)
tree19652980ab570e5b0712f5942dc1bee8c29e100a /gc.c
parenta0980f2446c0db735b8ffeb37e241370c458a626 (diff)
add debug_counters to check details.
add debug_counters to check the Hash object statistics.
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c41
1 files changed, 30 insertions, 11 deletions
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);