diff options
Diffstat (limited to 'deps/v8/src/heap/remembered-set.h')
-rw-r--r-- | deps/v8/src/heap/remembered-set.h | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/deps/v8/src/heap/remembered-set.h b/deps/v8/src/heap/remembered-set.h index 74791b926b..a625b13dbf 100644 --- a/deps/v8/src/heap/remembered-set.h +++ b/deps/v8/src/heap/remembered-set.h @@ -45,7 +45,8 @@ class RememberedSet { // Given a page and a range of slots in that page, this function removes the // slots from the remembered set. - static void RemoveRange(MemoryChunk* chunk, Address start, Address end) { + static void RemoveRange(MemoryChunk* chunk, Address start, Address end, + SlotSet::EmptyBucketMode mode) { SlotSet* slot_set = GetSlotSet(chunk); if (slot_set != nullptr) { uintptr_t start_offset = start - chunk->address(); @@ -53,7 +54,7 @@ class RememberedSet { DCHECK_LT(start_offset, end_offset); if (end_offset < static_cast<uintptr_t>(Page::kPageSize)) { slot_set->RemoveRange(static_cast<int>(start_offset), - static_cast<int>(end_offset)); + static_cast<int>(end_offset), mode); } else { // The large page has multiple slot sets. // Compute slot set indicies for the range [start_offset, end_offset). @@ -67,17 +68,17 @@ class RememberedSet { end_offset - static_cast<uintptr_t>(end_chunk) * Page::kPageSize); if (start_chunk == end_chunk) { slot_set[start_chunk].RemoveRange(offset_in_start_chunk, - offset_in_end_chunk); + offset_in_end_chunk, mode); } else { // Clear all slots from start_offset to the end of first chunk. slot_set[start_chunk].RemoveRange(offset_in_start_chunk, - Page::kPageSize); + Page::kPageSize, mode); // Clear all slots in intermediate chunks. for (int i = start_chunk + 1; i < end_chunk; i++) { - slot_set[i].RemoveRange(0, Page::kPageSize); + slot_set[i].RemoveRange(0, Page::kPageSize, mode); } // Clear slots from the beginning of the last page to end_offset. - slot_set[end_chunk].RemoveRange(0, offset_in_end_chunk); + slot_set[end_chunk].RemoveRange(0, offset_in_end_chunk, mode); } } } @@ -201,9 +202,7 @@ class RememberedSet { // slots that are not part of live objects anymore. This method must be // called after marking, when the whole transitive closure is known and // must be called before sweeping when mark bits are still intact. - static void ClearInvalidSlots(Heap* heap); - - static void VerifyValidSlots(Heap* heap); + static void ClearInvalidTypedSlots(Heap* heap, MemoryChunk* chunk); private: static SlotSet* GetSlotSet(MemoryChunk* chunk) { |