Chromium Code Reviews| Index: src/heap/mark-compact.h |
| diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h |
| index 640a7f9dfffe969f3d084a92daedd0d129e88e47..0f9cb93a81f33939a3db91b52e7b4e014c97fde1 100644 |
| --- a/src/heap/mark-compact.h |
| +++ b/src/heap/mark-compact.h |
| @@ -440,6 +440,10 @@ class MarkCompactCollectorBase { |
| explicit MarkCompactCollectorBase(Heap* heap) : heap_(heap) {} |
| virtual void MarkLiveObjects() = 0; |
| + virtual void ClearNonLiveReferences() = 0; |
| + virtual void EvacuatePrologue() = 0; |
| + virtual void EvacuateEpilogue() = 0; |
| + virtual void UpdatePointersAfterEvacuation() = 0; |
| // The number of parallel compaction tasks, including the main thread. |
| int NumberOfParallelCompactionTasks(int pages, intptr_t live_bytes); |
| @@ -447,7 +451,8 @@ class MarkCompactCollectorBase { |
| template <class Evacuator, class Collector> |
| void CreateAndExecuteEvacuationTasks( |
| Collector* collector, PageParallelJob<EvacuationJobTraits>* job, |
| - RecordMigratedSlotVisitor* record_visitor, const intptr_t live_bytes, |
| + RecordMigratedSlotVisitor* record_visitor, |
| + MigrationObserver* migration_observer, const intptr_t live_bytes, |
| const int& abandoned_pages); |
| Heap* heap_; |
| @@ -457,7 +462,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); |
| @@ -483,8 +490,18 @@ class MinorMarkCompactCollector final : public MarkCompactCollectorBase { |
| void MarkLiveObjects() override; |
| void ProcessMarkingDeque(); |
|
Hannes Payer (out of office)
2017/05/02 16:17:26
ProcessMarkingDeque and EmtyMarkingDeque could als
Michael Lippautz
2017/05/02 16:56:17
Done.
|
| void EmptyMarkingDeque(); |
| + void ClearNonLiveReferences() override; |
| + |
| + void EvacuatePrologue() override; |
| + void EvacuateEpilogue() override; |
| + void EvacuateNewSpace(std::vector<HeapObject*>* black_allocation_objects); |
|
Hannes Payer (out of office)
2017/05/02 16:17:26
Evacuate* could be virtual if we do not expose bla
Michael Lippautz
2017/05/02 16:56:17
See above.
|
| + 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; |
| }; |
| @@ -758,7 +775,7 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { |
| // Clear non-live references in weak cells, transition and descriptor arrays, |
| // and deoptimize dependent code of non-live maps. |
| - void ClearNonLiveReferences(); |
| + void ClearNonLiveReferences() override; |
| void MarkDependentCodeForDeoptimization(DependentCode* list); |
| // Find non-live targets of simple transitions in the given list. Clear |
| // transitions to non-live targets and if needed trim descriptors arrays. |
| @@ -797,13 +814,13 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { |
| void StartSweepSpaces(); |
| void StartSweepSpace(PagedSpace* space); |
| - void EvacuatePrologue(); |
| - void EvacuateEpilogue(); |
| + void EvacuatePrologue() override; |
| + void EvacuateEpilogue() override; |
| void EvacuatePagesInParallel(); |
| void EvacuateNewSpaceAndCandidates(); |
| - void UpdatePointersAfterEvacuation(); |
| + void UpdatePointersAfterEvacuation() override; |
| void ReleaseEvacuationCandidates(); |