[heap] Minor MinorMC fixes
Fix broken DCHECK: When using MinorMC, new space is a paged space and only uses the TO_PAGE page flag. New large object space however still uses both TO_PAGE and FROM_PAGE page flags. With MinorMC it still possible to find reference to FROM_PAGEs, but those pages have to be large pages. Fix broken test: MinorMC may only free empty pages when shrinking. Therefore, shrink may actually not change the space capacity at all (e.g. when all pages have live objects on them). More specifically, the capacity is not guaranteed to be half the previous capacity. Bug: v8:12612 Change-Id: Ib0edcafd758828f821f82bc8c796c205f162809c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3879493 Reviewed-by: Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Omer Katz <omerkatz@chromium.org> Auto-Submit: Omer Katz <omerkatz@chromium.org> Cr-Commit-Position: refs/heads/main@{#83061}
This commit is contained in:
parent
cab126f9ee
commit
a5b3c3df9b
@ -4946,7 +4946,8 @@ class RememberedSetUpdatingItem : public UpdatingItem {
|
||||
return REMOVE_SLOT;
|
||||
}
|
||||
if (Heap::InFromPage(heap_object)) {
|
||||
DCHECK(!v8_flags.minor_mc);
|
||||
DCHECK_IMPLIES(v8_flags.minor_mc,
|
||||
Page::FromHeapObject(heap_object)->IsLargePage());
|
||||
MapWord map_word = heap_object.map_word(kRelaxedLoad);
|
||||
if (map_word.IsForwardingAddress()) {
|
||||
HeapObjectReference::Update(THeapObjectSlot(slot),
|
||||
|
@ -228,7 +228,13 @@ TEST_F(HeapTest, GrowAndShrinkNewSpace) {
|
||||
old_capacity = new_space->TotalCapacity();
|
||||
new_space->Shrink();
|
||||
new_capacity = new_space->TotalCapacity();
|
||||
if (v8_flags.minor_mc) {
|
||||
// Shrinking may not be able to remove any pages if all contain live
|
||||
// objects.
|
||||
CHECK_GE(old_capacity, new_capacity);
|
||||
} else {
|
||||
CHECK_EQ(old_capacity, 2 * new_capacity);
|
||||
}
|
||||
|
||||
// Consecutive shrinking should not affect space capacity.
|
||||
old_capacity = new_space->TotalCapacity();
|
||||
|
Loading…
Reference in New Issue
Block a user