| 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();
|
|
|
|
|