| Index: src/heap/incremental-marking.h
|
| diff --git a/src/heap/incremental-marking.h b/src/heap/incremental-marking.h
|
| index a4678c10270f09bbd23dc339f35e19cbc3962830..200fbf39c48a8114bc3faf271e90a232ab8ee930 100644
|
| --- a/src/heap/incremental-marking.h
|
| +++ b/src/heap/incremental-marking.h
|
| @@ -32,35 +32,41 @@ class V8_EXPORT_PRIVATE IncrementalMarking {
|
|
|
| enum GCRequestType { NONE, COMPLETE_MARKING, FINALIZATION };
|
|
|
| - static void MarkGrey(Heap* heap, HeapObject* object);
|
| + static void Initialize();
|
| +
|
| + explicit IncrementalMarking(Heap* heap);
|
| +
|
| + MarkingState marking_state(HeapObject* object) const {
|
| + return MarkingState::Internal(object);
|
| + }
|
| +
|
| + MarkingState marking_state(MemoryChunk* chunk) const {
|
| + return MarkingState::Internal(chunk);
|
| + }
|
|
|
| - static void MarkBlack(HeapObject* object, int size);
|
| + void MarkBlack(HeapObject* object, int size);
|
| + void MarkGrey(HeapObject* object);
|
|
|
| // Transfers mark bits without requiring proper object headers.
|
| - static void TransferMark(Heap* heap, HeapObject* from, HeapObject* to);
|
| + void TransferMark(Heap* heap, HeapObject* from, HeapObject* to);
|
|
|
| // Transfers color including live byte count, requiring properly set up
|
| // objects.
|
| template <MarkBit::AccessMode access_mode = MarkBit::NON_ATOMIC>
|
| - V8_INLINE static void TransferColor(HeapObject* from, HeapObject* to) {
|
| - if (ObjectMarking::IsBlack<access_mode>(to, MarkingState::Internal(to))) {
|
| - DCHECK(to->GetHeap()->incremental_marking()->black_allocation());
|
| + V8_INLINE void TransferColor(HeapObject* from, HeapObject* to) {
|
| + if (ObjectMarking::IsBlack<access_mode>(to, marking_state(to))) {
|
| + DCHECK(black_allocation());
|
| return;
|
| }
|
|
|
| - DCHECK(ObjectMarking::IsWhite<access_mode>(to, MarkingState::Internal(to)));
|
| - if (ObjectMarking::IsGrey<access_mode>(from,
|
| - MarkingState::Internal(from))) {
|
| - ObjectMarking::WhiteToGrey<access_mode>(to, MarkingState::Internal(to));
|
| - } else if (ObjectMarking::IsBlack<access_mode>(
|
| - from, MarkingState::Internal(from))) {
|
| - ObjectMarking::WhiteToBlack<access_mode>(to, MarkingState::Internal(to));
|
| + DCHECK(ObjectMarking::IsWhite<access_mode>(to, marking_state(to)));
|
| + if (ObjectMarking::IsGrey<access_mode>(from, marking_state(from))) {
|
| + ObjectMarking::WhiteToGrey<access_mode>(to, marking_state(to));
|
| + } else if (ObjectMarking::IsBlack<access_mode>(from, marking_state(from))) {
|
| + ObjectMarking::WhiteToBlack<access_mode>(to, marking_state(to));
|
| }
|
| }
|
|
|
| - explicit IncrementalMarking(Heap* heap);
|
| -
|
| - static void Initialize();
|
|
|
| State state() {
|
| DCHECK(state_ == STOPPED || FLAG_incremental_marking);
|
| @@ -219,6 +225,15 @@ class V8_EXPORT_PRIVATE IncrementalMarking {
|
|
|
| void AbortBlackAllocation();
|
|
|
| + MarkingDeque* marking_deque() {
|
| + SLOW_DCHECK(marking_deque_ != nullptr);
|
| + return marking_deque_;
|
| + }
|
| +
|
| + void set_marking_deque(MarkingDeque* marking_deque) {
|
| + marking_deque_ = marking_deque;
|
| + }
|
| +
|
| private:
|
| class Observer : public AllocationObserver {
|
| public:
|
| @@ -276,6 +291,7 @@ class V8_EXPORT_PRIVATE IncrementalMarking {
|
| size_t StepSizeToMakeProgress();
|
|
|
| Heap* heap_;
|
| + MarkingDeque* marking_deque_;
|
|
|
| double start_time_ms_;
|
| size_t initial_old_generation_size_;
|
|
|