| Index: src/heap/mark-compact.h
|
| diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h
|
| index 63afd834ea1e31f184d3bd70e233c6e2736a8ea5..9bb51c21a50451d13c9ff24044831656db0ecdeb 100644
|
| --- a/src/heap/mark-compact.h
|
| +++ b/src/heap/mark-compact.h
|
| @@ -80,7 +80,7 @@ class ObjectMarking : public AllStatic {
|
| (access_mode == MarkBit::ATOMIC || IsBlack<access_mode>(obj, state)));
|
| MarkBit markbit = MarkBitFrom(obj, state);
|
| if (!Marking::BlackToGrey<access_mode>(markbit)) return false;
|
| - state.IncrementLiveBytes(-obj->Size());
|
| + state.IncrementLiveBytes<access_mode>(-obj->Size());
|
| return true;
|
| }
|
|
|
| @@ -107,7 +107,7 @@ class ObjectMarking : public AllStatic {
|
| DCHECK((access_mode == MarkBit::ATOMIC || IsGrey<access_mode>(obj, state)));
|
| MarkBit markbit = MarkBitFrom(obj, state);
|
| if (!Marking::GreyToBlack<access_mode>(markbit)) return false;
|
| - state.IncrementLiveBytes(obj->Size());
|
| + state.IncrementLiveBytes<access_mode>(obj->Size());
|
| return true;
|
| }
|
|
|
| @@ -424,8 +424,16 @@ enum PageEvacuationMode { NEW_TO_NEW, NEW_TO_OLD };
|
|
|
| class MinorMarkCompactCollector {
|
| public:
|
| + MarkingState marking_state(HeapObject* object) const {
|
| + return MarkingState::External(object);
|
| + }
|
| +
|
| + MarkingState marking_state(MemoryChunk* chunk) const {
|
| + return MarkingState::External(chunk);
|
| + }
|
| +
|
| explicit MinorMarkCompactCollector(Heap* heap)
|
| - : heap_(heap), marking_deque_(heap) {}
|
| + : heap_(heap), marking_deque_(heap), page_parallel_job_semaphore_(0) {}
|
|
|
| void SetUp();
|
| void TearDown();
|
| @@ -447,9 +455,19 @@ class MinorMarkCompactCollector {
|
| void MarkLiveObjects();
|
| void ProcessMarkingDeque();
|
| void EmptyMarkingDeque();
|
| + void ClearNonLiveReferences();
|
| +
|
| + void EvacuatePrologue();
|
| + void EvacuateEpilogue();
|
| + void EvacuateNewSpace(std::vector<HeapObject*>* black_allocation_objects);
|
| + void EvacuatePagesInParallel(
|
| + std::vector<HeapObject*>* black_allocation_objects);
|
| + void UpdatePointersAfterEvacuation();
|
|
|
| Heap* heap_;
|
| MarkingDeque marking_deque_;
|
| + base::Semaphore page_parallel_job_semaphore_;
|
| + List<Page*> new_space_evacuation_pages_;
|
|
|
| friend class StaticYoungGenerationMarkingVisitor;
|
| };
|
| @@ -541,6 +559,14 @@ class MarkCompactCollector {
|
| kClearMarkbits,
|
| };
|
|
|
| + MarkingState marking_state(HeapObject* object) const {
|
| + return MarkingState::Internal(object);
|
| + }
|
| +
|
| + MarkingState marking_state(MemoryChunk* chunk) const {
|
| + return MarkingState::Internal(chunk);
|
| + }
|
| +
|
| static void Initialize();
|
|
|
| static SlotCallbackResult CheckAndMarkObject(Heap* heap,
|
| @@ -793,9 +819,6 @@ class MarkCompactCollector {
|
| void EvacuateEpilogue();
|
| void EvacuatePagesInParallel();
|
|
|
| - // The number of parallel compaction tasks, including the main thread.
|
| - int NumberOfParallelCompactionTasks(int pages, intptr_t live_bytes);
|
| -
|
| void EvacuateNewSpaceAndCandidates();
|
|
|
| void UpdatePointersAfterEvacuation();
|
|
|