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

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

Issue 2796233003: [heap] Evacuation for young generation (Closed)
Patch Set: Fix recording 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 63afd834ea1e31f184d3bd70e233c6e2736a8ea5..9bb51c21a50451d13c9ff24044831656db0ecdeb 100644
--- a/src/heap/mark-compact.h
+++ b/src/heap/mark-compact.h
@@ -80,7 +80,7 @@ class ObjectMarking : public AllStatic {
(access_mode == MarkBit::ATOMIC || IsBlack<access_mode>(obj, state)));
MarkBit markbit = MarkBitFrom(obj, state);
if (!Marking::BlackToGrey<access_mode>(markbit)) return false;
- state.IncrementLiveBytes(-obj->Size());
+ state.IncrementLiveBytes<access_mode>(-obj->Size());
return true;
}
@@ -107,7 +107,7 @@ class ObjectMarking : public AllStatic {
DCHECK((access_mode == MarkBit::ATOMIC || IsGrey<access_mode>(obj, state)));
MarkBit markbit = MarkBitFrom(obj, state);
if (!Marking::GreyToBlack<access_mode>(markbit)) return false;
- state.IncrementLiveBytes(obj->Size());
+ state.IncrementLiveBytes<access_mode>(obj->Size());
return true;
}
@@ -424,8 +424,16 @@ enum PageEvacuationMode { NEW_TO_NEW, NEW_TO_OLD };
class MinorMarkCompactCollector {
public:
+ MarkingState marking_state(HeapObject* object) const {
+ return MarkingState::External(object);
+ }
+
+ MarkingState marking_state(MemoryChunk* chunk) const {
+ return MarkingState::External(chunk);
+ }
+
explicit MinorMarkCompactCollector(Heap* heap)
- : heap_(heap), marking_deque_(heap) {}
+ : heap_(heap), marking_deque_(heap), page_parallel_job_semaphore_(0) {}
void SetUp();
void TearDown();
@@ -447,9 +455,19 @@ class MinorMarkCompactCollector {
void MarkLiveObjects();
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();
Heap* heap_;
MarkingDeque marking_deque_;
+ base::Semaphore page_parallel_job_semaphore_;
+ List<Page*> new_space_evacuation_pages_;
friend class StaticYoungGenerationMarkingVisitor;
};
@@ -541,6 +559,14 @@ class MarkCompactCollector {
kClearMarkbits,
};
+ MarkingState marking_state(HeapObject* object) const {
+ return MarkingState::Internal(object);
+ }
+
+ MarkingState marking_state(MemoryChunk* chunk) const {
+ return MarkingState::Internal(chunk);
+ }
+
static void Initialize();
static SlotCallbackResult CheckAndMarkObject(Heap* heap,
@@ -793,9 +819,6 @@ class MarkCompactCollector {
void EvacuateEpilogue();
void EvacuatePagesInParallel();
- // The number of parallel compaction tasks, including the main thread.
- int NumberOfParallelCompactionTasks(int pages, intptr_t live_bytes);
-
void EvacuateNewSpaceAndCandidates();
void UpdatePointersAfterEvacuation();

Powered by Google App Engine
This is Rietveld 408576698