Index: src/heap/mark-compact.h |
diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h |
index 5858ba0ffaa001efde9849ec86fe3cd8e30fa5fc..7c569b802f666d0d351972095dfff94f44106954 100644 |
--- a/src/heap/mark-compact.h |
+++ b/src/heap/mark-compact.h |
@@ -19,10 +19,15 @@ namespace internal { |
// Forward declarations. |
class CodeFlusher; |
+class EvacuationJobTraits; |
class HeapObjectVisitor; |
class MarkCompactCollector; |
class MinorMarkCompactCollector; |
class MarkingVisitor; |
+class MigrationObserver; |
+template <typename JobTraits> |
+class PageParallelJob; |
+class RecordMigratedSlotVisitor; |
class ThreadLocalTop; |
class ObjectMarking : public AllStatic { |
@@ -435,10 +440,17 @@ class MarkCompactCollectorBase { |
explicit MarkCompactCollectorBase(Heap* heap) : heap_(heap) {} |
virtual void MarkLiveObjects() = 0; |
+ virtual void UpdatePointersAfterEvacuation() = 0; |
// The number of parallel compaction tasks, including the main thread. |
int NumberOfParallelCompactionTasks(int pages, intptr_t live_bytes); |
+ template <class Evacuator, class Collector> |
+ void CreateAndExecuteEvacuationTasks( |
+ Collector* collector, PageParallelJob<EvacuationJobTraits>* job, |
+ RecordMigratedSlotVisitor* record_visitor, MigrationObserver* observer, |
+ const intptr_t live_bytes, const int& abandoned_pages); |
+ |
Heap* heap_; |
}; |
@@ -446,7 +458,9 @@ class MarkCompactCollectorBase { |
class MinorMarkCompactCollector final : public MarkCompactCollectorBase { |
public: |
explicit MinorMarkCompactCollector(Heap* heap) |
- : MarkCompactCollectorBase(heap), marking_deque_(heap) {} |
+ : MarkCompactCollectorBase(heap), |
+ marking_deque_(heap), |
+ page_parallel_job_semaphore_(0) {} |
MarkingState marking_state(HeapObject* object) const override { |
return MarkingState::External(object); |
@@ -472,8 +486,18 @@ class MinorMarkCompactCollector final : public MarkCompactCollectorBase { |
void MarkLiveObjects() override; |
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() override; |
MarkingDeque marking_deque_; |
+ base::Semaphore page_parallel_job_semaphore_; |
+ List<Page*> new_space_evacuation_pages_; |
friend class StaticYoungGenerationMarkingVisitor; |
}; |
@@ -792,7 +816,7 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { |
void EvacuateNewSpaceAndCandidates(); |
- void UpdatePointersAfterEvacuation(); |
+ void UpdatePointersAfterEvacuation() override; |
void ReleaseEvacuationCandidates(); |