diff options
Diffstat (limited to 'deps/v8/src/heap/mark-compact-inl.h')
-rw-r--r-- | deps/v8/src/heap/mark-compact-inl.h | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/deps/v8/src/heap/mark-compact-inl.h b/deps/v8/src/heap/mark-compact-inl.h index f117acee9b..281ece4cc8 100644 --- a/deps/v8/src/heap/mark-compact-inl.h +++ b/deps/v8/src/heap/mark-compact-inl.h @@ -6,7 +6,7 @@ #define V8_HEAP_MARK_COMPACT_INL_H_ #include "src/heap/mark-compact.h" -#include "src/heap/slots-buffer.h" +#include "src/heap/remembered-set.h" #include "src/isolate.h" namespace v8 { @@ -70,25 +70,12 @@ bool MarkCompactCollector::IsMarked(Object* obj) { void MarkCompactCollector::RecordSlot(HeapObject* object, Object** slot, Object* target) { Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target)); + Page* source_page = Page::FromAddress(reinterpret_cast<Address>(object)); if (target_page->IsEvacuationCandidate() && !ShouldSkipEvacuationSlotRecording(object)) { - if (!SlotsBuffer::AddTo(slots_buffer_allocator_, - target_page->slots_buffer_address(), slot, - SlotsBuffer::FAIL_ON_OVERFLOW)) { - EvictPopularEvacuationCandidate(target_page); - } - } -} - - -void MarkCompactCollector::ForceRecordSlot(HeapObject* object, Object** slot, - Object* target) { - Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target)); - if (target_page->IsEvacuationCandidate() && - !ShouldSkipEvacuationSlotRecording(object)) { - CHECK(SlotsBuffer::AddTo(slots_buffer_allocator_, - target_page->slots_buffer_address(), slot, - SlotsBuffer::IGNORE_OVERFLOW)); + DCHECK(Marking::IsBlackOrGrey(Marking::MarkBitFrom(object))); + RememberedSet<OLD_TO_OLD>::Insert(source_page, + reinterpret_cast<Address>(slot)); } } @@ -182,6 +169,7 @@ HeapObject* LiveObjectIterator<T>::Next() { } else if (T == kAllLiveObjects) { object = HeapObject::FromAddress(addr); } + // Clear the second bit of the found object. current_cell_ &= ~second_bit_index; |