summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/spaces.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/spaces.h')
-rw-r--r--deps/v8/src/heap/spaces.h32
1 files changed, 18 insertions, 14 deletions
diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h
index ebb6876cbe..5652042d20 100644
--- a/deps/v8/src/heap/spaces.h
+++ b/deps/v8/src/heap/spaces.h
@@ -130,12 +130,6 @@ enum FreeMode { kLinkCategory, kDoNotLinkCategory };
enum class SpaceAccountingMode { kSpaceAccounted, kSpaceUnaccounted };
-enum RememberedSetType {
- OLD_TO_NEW,
- OLD_TO_OLD,
- NUMBER_OF_REMEMBERED_SET_TYPES = OLD_TO_OLD + 1
-};
-
// A free list category maintains a linked list of free memory blocks.
class FreeListCategory {
public:
@@ -606,7 +600,7 @@ class MemoryChunk : public BasicMemoryChunk {
+ kSystemPointerSize // Address owner_
+ kSizetSize // size_t progress_bar_
+ kIntptrSize // intptr_t live_byte_count_
- + kSystemPointerSize * NUMBER_OF_REMEMBERED_SET_TYPES // SlotSet* array
+ + kSystemPointerSize // SlotSet* sweeping_slot_set_
+ kSystemPointerSize *
NUMBER_OF_REMEMBERED_SET_TYPES // TypedSlotSet* array
+ kSystemPointerSize *
@@ -706,6 +700,13 @@ class MemoryChunk : public BasicMemoryChunk {
return slot_set_[type];
}
+ template <AccessMode access_mode = AccessMode::ATOMIC>
+ SlotSet* sweeping_slot_set() {
+ if (access_mode == AccessMode::ATOMIC)
+ return base::AsAtomicPointer::Acquire_Load(&sweeping_slot_set_);
+ return sweeping_slot_set_;
+ }
+
template <RememberedSetType type, AccessMode access_mode = AccessMode::ATOMIC>
TypedSlotSet* typed_slot_set() {
if (access_mode == AccessMode::ATOMIC)
@@ -715,9 +716,13 @@ class MemoryChunk : public BasicMemoryChunk {
template <RememberedSetType type>
V8_EXPORT_PRIVATE SlotSet* AllocateSlotSet();
+ SlotSet* AllocateSweepingSlotSet();
+ SlotSet* AllocateSlotSet(SlotSet** slot_set);
+
// Not safe to be called concurrently.
template <RememberedSetType type>
void ReleaseSlotSet();
+ void ReleaseSlotSet(SlotSet** slot_set);
template <RememberedSetType type>
TypedSlotSet* AllocateTypedSlotSet();
// Not safe to be called concurrently.
@@ -729,12 +734,8 @@ class MemoryChunk : public BasicMemoryChunk {
template <RememberedSetType type>
void ReleaseInvalidatedSlots();
template <RememberedSetType type>
- V8_EXPORT_PRIVATE void RegisterObjectWithInvalidatedSlots(HeapObject object,
- int size);
- // Updates invalidated_slots after array left-trimming.
- template <RememberedSetType type>
- void MoveObjectWithInvalidatedSlots(HeapObject old_start,
- HeapObject new_start);
+ V8_EXPORT_PRIVATE void RegisterObjectWithInvalidatedSlots(HeapObject object);
+ void InvalidateRecordedSlots(HeapObject object);
template <RememberedSetType type>
bool RegisteredObjectWithInvalidatedSlots(HeapObject object);
template <RememberedSetType type>
@@ -914,7 +915,7 @@ class MemoryChunk : public BasicMemoryChunk {
// A single slot set for small pages (of size kPageSize) or an array of slot
// set for large pages. In the latter case the number of entries in the array
// is ceil(size() / kPageSize).
- SlotSet* slot_set_[NUMBER_OF_REMEMBERED_SET_TYPES];
+ SlotSet* sweeping_slot_set_;
TypedSlotSet* typed_slot_set_[NUMBER_OF_REMEMBERED_SET_TYPES];
InvalidatedSlots* invalidated_slots_[NUMBER_OF_REMEMBERED_SET_TYPES];
@@ -1097,6 +1098,9 @@ class Page : public MemoryChunk {
void AllocateFreeListCategories();
void ReleaseFreeListCategories();
+ void MoveOldToNewRememberedSetForSweeping();
+ void MergeOldToNewRememberedSets();
+
#ifdef DEBUG
void Print();
#endif // DEBUG