From df5ec4107d6c91fba05fb7cadac82c2371aec152 Mon Sep 17 00:00:00 2001 From: ko1 Date: Fri, 28 Sep 2018 01:10:43 +0000 Subject: add debug counters more. * debug_counter.h: add the following counters. * frame_push: control frame counts (total counts). * frame_push_*: control frame counts per every frame type. * obj_*: add free'ed counts for each type. * gc.c: ditto. * vm_insnhelper.c (vm_push_frame): ditto. * debug_counter.c (rb_debug_counter_show_results): widen counts field to show >10G numbers. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 5ba18ec73d..e252ea5240 100644 --- a/gc.c +++ b/gc.c @@ -2222,7 +2222,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) RB_DEBUG_COUNTER_INC(obj_obj_ptr); } else { - RB_DEBUG_COUNTER_INC(obj_obj_embed); + RB_DEBUG_COUNTER_INC(obj_obj_embed); } break; case T_MODULE: @@ -2252,6 +2252,9 @@ obj_free(rb_objspace_t *objspace, VALUE obj) if (RANY(obj)->as.klass.ptr) xfree(RANY(obj)->as.klass.ptr); RANY(obj)->as.klass.ptr = NULL; + + (void)RB_DEBUG_COUNTER_INC_IF(obj_module_ptr, BUILTIN_TYPE(obj) == T_MODULE); + (void)RB_DEBUG_COUNTER_INC_IF(obj_class_ptr, BUILTIN_TYPE(obj) == T_CLASS); break; case T_STRING: rb_str_free(obj); @@ -2281,6 +2284,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) case T_REGEXP: if (RANY(obj)->as.regexp.ptr) { onig_free(RANY(obj)->as.regexp.ptr); + RB_DEBUG_COUNTER_INC(obj_regexp_ptr); } break; case T_DATA: @@ -2304,15 +2308,21 @@ obj_free(rb_objspace_t *objspace, VALUE obj) if (dfree) { if (dfree == RUBY_DEFAULT_FREE) { xfree(data); + RB_DEBUG_COUNTER_INC(obj_data_xfree); } else if (free_immediately) { (*dfree)(data); + RB_DEBUG_COUNTER_INC(obj_data_imm_free); } else { make_zombie(objspace, obj, dfree, data); + RB_DEBUG_COUNTER_INC(obj_data_zombie); return 1; } } + else { + RB_DEBUG_COUNTER_INC(obj_data_empty); + } } break; case T_MATCH: @@ -2322,11 +2332,14 @@ obj_free(rb_objspace_t *objspace, VALUE obj) if (rm->char_offset) xfree(rm->char_offset); xfree(rm); + + RB_DEBUG_COUNTER_INC(obj_match_ptr); } break; case T_FILE: if (RANY(obj)->as.file.fptr) { make_io_zombie(objspace, obj); + RB_DEBUG_COUNTER_INC(obj_file_ptr); return 1; } break; @@ -2349,6 +2362,8 @@ obj_free(rb_objspace_t *objspace, VALUE obj) rb_class_remove_from_super_subclasses(obj); xfree(RANY(obj)->as.klass.ptr); RANY(obj)->as.klass.ptr = NULL; + + RB_DEBUG_COUNTER_INC(obj_iclass_ptr); break; case T_FLOAT: @@ -2357,6 +2372,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) case T_BIGNUM: if (!(RBASIC(obj)->flags & BIGNUM_EMBED_FLAG) && BIGNUM_DIGITS(obj)) { xfree(BIGNUM_DIGITS(obj)); + RB_DEBUG_COUNTER_INC(obj_bignum_ptr); } break; @@ -2378,6 +2394,7 @@ obj_free(rb_objspace_t *objspace, VALUE obj) case T_SYMBOL: { rb_gc_free_dsymbol(obj); + RB_DEBUG_COUNTER_INC(obj_symbol); } break; @@ -2385,21 +2402,45 @@ obj_free(rb_objspace_t *objspace, VALUE obj) switch (imemo_type(obj)) { case imemo_ment: rb_free_method_entry(&RANY(obj)->as.imemo.ment); + RB_DEBUG_COUNTER_INC(obj_imemo_ment); break; case imemo_iseq: rb_iseq_free(&RANY(obj)->as.imemo.iseq); + RB_DEBUG_COUNTER_INC(obj_imemo_iseq); break; case imemo_env: GC_ASSERT(VM_ENV_ESCAPED_P(RANY(obj)->as.imemo.env.ep)); xfree((VALUE *)RANY(obj)->as.imemo.env.env); + RB_DEBUG_COUNTER_INC(obj_imemo_env); break; case imemo_tmpbuf: xfree(RANY(obj)->as.imemo.alloc.ptr); + RB_DEBUG_COUNTER_INC(obj_imemo_tmpbuf); break; case imemo_ast: rb_ast_free(&RANY(obj)->as.imemo.ast); + RB_DEBUG_COUNTER_INC(obj_imemo_ast); break; + case imemo_cref: + RB_DEBUG_COUNTER_INC(obj_imemo_cref); + break; + case imemo_svar: + RB_DEBUG_COUNTER_INC(obj_imemo_svar); + break; + case imemo_throw_data: + RB_DEBUG_COUNTER_INC(obj_imemo_throw_data); + break; + case imemo_ifunc: + RB_DEBUG_COUNTER_INC(obj_imemo_ifunc); + break; + case imemo_memo: + RB_DEBUG_COUNTER_INC(obj_imemo_memo); + break; + case imemo_parser_strterm: + RB_DEBUG_COUNTER_INC(obj_imemo_parser_strterm); + break; default: + /* unreachable */ break; } return 0; -- cgit v1.2.3