summaryrefslogtreecommitdiff
path: root/ext/objspace
diff options
context:
space:
mode:
authorMatt Valentine-House <matt@eightbitraptor.com>2022-02-01 21:36:29 +0000
committerPeter Zhu <peter@peterzhu.ca>2022-02-03 15:07:35 -0500
commit9fab2c1a1a5f5e429eb88eac29d250685dcc4354 (patch)
tree07b1d1f6e8beff5be7654a25faa29672dbc3746a /ext/objspace
parenta3caf196d9d060341924c1e37dd9f60dde8252f6 (diff)
Add the size pool slot size to the output of ObjectSpace.dump/dump_all
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/5520
Diffstat (limited to 'ext/objspace')
-rw-r--r--ext/objspace/objspace_dump.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c
index cf7acb5c6f..e958a831c5 100644
--- a/ext/objspace/objspace_dump.c
+++ b/ext/objspace/objspace_dump.c
@@ -35,6 +35,7 @@ struct dump_config {
const char *root_category;
VALUE cur_obj;
VALUE cur_obj_klass;
+ size_t cur_page_slot_size;
size_t cur_obj_references;
unsigned int roots: 1;
unsigned int full_heap: 1;
@@ -360,6 +361,9 @@ dump_object(VALUE obj, struct dump_config *dc)
dump_append(dc, obj_type(obj));
dump_append(dc, "\"");
+ dump_append(dc, ", \"slot_size\":");
+ dump_append_sizet(dc, dc->cur_page_slot_size);
+
if (dc->cur_obj_klass) {
dump_append(dc, ", \"class\":");
dump_append_ref(dc, dc->cur_obj_klass);
@@ -539,6 +543,7 @@ heap_i(void *vstart, void *vend, size_t stride, void *data)
for (; v != (VALUE)vend; v += stride) {
void *ptr = asan_poisoned_object_p(v);
asan_unpoison_object(v, false);
+ dc->cur_page_slot_size = stride;
if (dc->full_heap || RBASIC(v)->flags)
dump_object(v, dc);
@@ -616,6 +621,10 @@ static VALUE
objspace_dump(VALUE os, VALUE obj, VALUE output)
{
struct dump_config dc = {0,};
+ if (!RB_SPECIAL_CONST_P(obj)) {
+ dc.cur_page_slot_size = rb_gc_obj_slot_size(obj);
+ }
+
dump_output(&dc, output, Qnil, Qnil);
dump_object(obj, &dc);