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