Index: src/heap/mark-compact-inl.h |
diff --git a/src/heap/mark-compact-inl.h b/src/heap/mark-compact-inl.h |
index 9cc7d7c39e57ceb75f5bb78eb3293f26a2c160cb..f117acee9b12f8a28d0af898eb0bcb04176cf715 100644 |
--- a/src/heap/mark-compact-inl.h |
+++ b/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/remembered-set.h" |
+#include "src/heap/slots-buffer.h" |
#include "src/isolate.h" |
namespace v8 { |
@@ -70,11 +70,25 @@ |
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)) { |
- RememberedSet<OLD_TO_OLD>::Insert(source_page, |
- reinterpret_cast<Address>(slot)); |
+ 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)); |
} |
} |