Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions gc/default/default.c
Original file line number Diff line number Diff line change
Expand Up @@ -3546,7 +3546,7 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit
rb_gc_event_hook(vp, RUBY_INTERNAL_EVENT_FREEOBJ);
}

(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, BASE_SLOT_SIZE);
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, slot_size);
heap_page_add_freeobj(objspace, sweep_page, vp);
gc_report(3, objspace, "page_sweep: %s (fast path) added to freelist\n", rb_obj_info(vp));
ctx->freed_slots++;
Expand All @@ -3558,7 +3558,7 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit

rb_gc_obj_free_vm_weak_references(vp);
if (rb_gc_obj_free(objspace, vp)) {
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, BASE_SLOT_SIZE);
(void)VALGRIND_MAKE_MEM_UNDEFINED((void*)p, slot_size);
heap_page_add_freeobj(objspace, sweep_page, vp);
gc_report(3, objspace, "page_sweep: %s is added to freelist\n", rb_obj_info(vp));
ctx->freed_slots++;
Expand Down Expand Up @@ -8647,18 +8647,29 @@ gc_prof_set_heap_info(rb_objspace_t *objspace)
{
if (gc_prof_enabled(objspace)) {
gc_profile_record *record = gc_prof_record(objspace);
size_t live = objspace->profile.total_allocated_objects_at_gc_start - total_freed_objects(objspace);
size_t total = objspace->profile.heap_total_slots_at_gc_start;

/* Sum across all size pools since each has a different slot size. */
size_t total = 0;
size_t use_size = 0;
size_t total_size = 0;
for (int i = 0; i < HEAP_COUNT; i++) {
rb_heap_t *heap = &heaps[i];
size_t heap_live = heap->total_allocated_objects - heap->total_freed_objects - heap->final_slots_count;
total += heap->total_slots;
use_size += heap_live * heap->slot_size;
total_size += heap->total_slots * heap->slot_size;
}

#if GC_PROFILE_MORE_DETAIL
size_t live = objspace->profile.total_allocated_objects_at_gc_start - total_freed_objects(objspace);
record->heap_use_pages = objspace->profile.heap_used_at_gc_start;
record->heap_live_objects = live;
record->heap_free_objects = total - live;
#endif

record->heap_total_objects = total;
record->heap_use_size = live * BASE_SLOT_SIZE;
record->heap_total_size = total * BASE_SLOT_SIZE;
record->heap_use_size = use_size;
record->heap_total_size = total_size;
}
}

Expand Down
10 changes: 5 additions & 5 deletions test/ruby/test_gc_compact.rb
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ def test_moving_arrays_down_heaps
}.resume
stats = GC.verify_compaction_references(expand_heap: true, toward: :empty)
assert_operator(stats.dig(:moved_down, :T_ARRAY) || 0, :>=, ARY_COUNT - 10)
assert_operator(stats.dig(:moved_down, :T_ARRAY) || 0, :>=, ARY_COUNT - 25)
refute_empty($arys.keep_if { |o| ObjectSpace.dump(o).include?('"embedded":true') })
end;
end
Expand Down Expand Up @@ -356,7 +356,7 @@ def add_ivars
stats = GC.verify_compaction_references(expand_heap: true, toward: :empty)
assert_operator(stats.dig(:moved_up, :T_OBJECT) || 0, :>=, OBJ_COUNT - 15)
assert_operator(stats.dig(:moved_up, :T_OBJECT) || 0, :>=, OBJ_COUNT - 25)
refute_empty($ary.keep_if { |o| ObjectSpace.dump(o).include?('"embedded":true') })
end;
end
Expand Down Expand Up @@ -393,7 +393,7 @@ def test_moving_strings_up_heaps
stats = GC.verify_compaction_references(expand_heap: true, toward: :empty)
assert_operator(stats[:moved_up][:T_STRING], :>=, STR_COUNT - 15)
assert_operator(stats[:moved_up][:T_STRING], :>=, STR_COUNT - 25)
refute_empty($ary.keep_if { |o| ObjectSpace.dump(o).include?('"embedded":true') })
end;
end
Expand All @@ -413,7 +413,7 @@ def test_moving_strings_down_heaps
stats = GC.verify_compaction_references(expand_heap: true, toward: :empty)
assert_operator(stats[:moved_down][:T_STRING], :>=, STR_COUNT - 10)
assert_operator(stats[:moved_down][:T_STRING], :>=, STR_COUNT - 25)
refute_empty($ary.keep_if { |o| ObjectSpace.dump(o).include?('"embedded":true') })
end;
end
Expand All @@ -437,7 +437,7 @@ def test_moving_hashes_down_heaps
stats = GC.verify_compaction_references(expand_heap: true, toward: :empty)
assert_operator(stats[:moved_down][:T_HASH], :>=, HASH_COUNT - 10)
assert_operator(stats[:moved_down][:T_HASH], :>=, HASH_COUNT - 25)
end;
end

Expand Down