| 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 @@ 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)) {
|
| - 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));
|
| }
|
| }
|
|
|
|
|