mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Add IMEMO type to heap dump output.
IMEMO objects have many types. Without this change, we cannot see what types of IMEMO objects are being used when dumping the heap. Adding the type to the IMEMO object will allow us to gather statistics about IMEMO objects being used. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c7c1f371a4
commit
ef76e3cfb6
2 changed files with 40 additions and 0 deletions
|
@ -192,6 +192,25 @@ dump_append_string_content(struct dump_config *dc, VALUE obj)
|
|||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
imemo_name(int imemo)
|
||||
{
|
||||
switch(imemo) {
|
||||
#define TYPE_STR(t) case(imemo_##t): return #t; break;
|
||||
TYPE_STR(env)
|
||||
TYPE_STR(cref)
|
||||
TYPE_STR(svar)
|
||||
TYPE_STR(throw_data)
|
||||
TYPE_STR(ifunc)
|
||||
TYPE_STR(memo)
|
||||
TYPE_STR(ment)
|
||||
TYPE_STR(iseq)
|
||||
default:
|
||||
return "unknown";
|
||||
#undef TYPE_STR
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dump_object(VALUE obj, struct dump_config *dc)
|
||||
{
|
||||
|
@ -229,6 +248,10 @@ dump_object(VALUE obj, struct dump_config *dc)
|
|||
dump_append(dc, ", \"node_type\":\"%s\"", ruby_node_name(nd_type(obj)));
|
||||
break;
|
||||
|
||||
case T_IMEMO:
|
||||
dump_append(dc, ", \"imemo_type\":\"%s\"", imemo_name(imemo_type(obj)));
|
||||
break;
|
||||
|
||||
case T_SYMBOL:
|
||||
dump_append_string_content(dc, rb_sym2str(obj));
|
||||
break;
|
||||
|
|
|
@ -277,6 +277,23 @@ class TestObjSpace < Test::Unit::TestCase
|
|||
assert_match /"value":"foobar\h+"/, dump
|
||||
end
|
||||
|
||||
def test_dump_includes_imemo_type
|
||||
assert_in_out_err(%w[-robjspace], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error|
|
||||
begin;
|
||||
def dump_my_heap_please
|
||||
ObjectSpace.dump_all(output: :stdout)
|
||||
end
|
||||
|
||||
dump_my_heap_please
|
||||
end;
|
||||
heap = output.find_all { |l|
|
||||
obj = JSON.parse(l)
|
||||
obj['type'] == "IMEMO" && obj['imemo_type']
|
||||
}
|
||||
assert_operator heap.length, :>, 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_dump_all_full
|
||||
assert_in_out_err(%w[-robjspace], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error|
|
||||
begin;
|
||||
|
|
Loading…
Reference in a new issue