Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(571)

Unified Diff: src/heap/mark-compact.h

Issue 2796233003: [heap] Evacuation for young generation (Closed)
Patch Set: Rebase after smaller refactorings landed Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | src/heap/mark-compact.cc » ('j') | src/heap/mark-compact.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698