Chromium Code Reviews| Index: src/heap/mark-compact.h |
| diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h |
| index de182073eaa2267c2458d38b3da709587152d824..a339aa68582118d85721f0ae7c76fe64352a6d06 100644 |
| --- a/src/heap/mark-compact.h |
| +++ b/src/heap/mark-compact.h |
| @@ -17,6 +17,8 @@ |
| namespace v8 { |
| namespace internal { |
| +enum class MarkCompactMode { FULL, YOUNG_GENERATION }; |
| + |
| // Callback function, returns whether an object is alive. The heap size |
| // of the object is returned in size. It optionally updates the offset |
| // to the first live object in the page (only used for old and map objects). |
| @@ -29,6 +31,7 @@ typedef void (*MarkObjectFunction)(Heap* heap, HeapObject* object); |
| class CodeFlusher; |
| class MarkCompactCollector; |
| class MarkingVisitor; |
| +template <MarkCompactMode mode> |
| class RootMarkingVisitor; |
| class ObjectMarking : public AllStatic { |
| @@ -72,7 +75,7 @@ class MarkingDeque { |
| // Ensures that the marking deque is committed and will stay committed until |
| // StopUsing() is called. |
| void StartUsing(); |
| - void StopUsing(); |
| + void StopUsing(bool free_immediately = false); |
|
ulan
2016/11/15 19:57:21
nit: let's use enum instead of bool
Michael Lippautz
2016/11/16 08:59:37
Done.
|
| void Clear(); |
| inline bool IsFull() { return ((top_ + 1) & mask_) == bottom_; } |
| @@ -416,6 +419,9 @@ class MarkCompactCollector { |
| static void Initialize(); |
| + static SlotCallbackResult CheckAndMarkObject(Heap* heap, |
| + Address slot_address); |
| + |
| void SetUp(); |
| void TearDown(); |
| @@ -465,6 +471,11 @@ class MarkCompactCollector { |
| static void VerifyMarkbitsAreClean(NewSpace* space); |
| void VerifyWeakEmbeddedObjectsInCode(); |
| void VerifyOmittedMapChecks(); |
| + |
| + void MarkYoungGenerationForVerification(); |
| + std::vector<HeapObject*> GetObjectsInToSpace(); |
| + void VerifyYoungGenerationMarkbitsUsingForwardingPointers( |
| + const std::vector<HeapObject*>& objects); |
| #endif |
| INLINE(static bool ShouldSkipEvacuationSlotRecording(Object* host)) { |
| @@ -564,8 +575,10 @@ class MarkCompactCollector { |
| friend class MarkCompactMarkingVisitor; |
| friend class MarkingVisitor; |
| friend class RecordMigratedSlotVisitor; |
| + template <MarkCompactMode mode> |
| friend class RootMarkingVisitor; |
| friend class SharedFunctionInfoMarkingVisitor; |
| + friend class StaticYoungGenerationMarkingVisitor; |
| // Mark code objects that are active on the stack to prevent them |
| // from being flushed. |
| @@ -575,6 +588,8 @@ class MarkCompactCollector { |
| // Marking operations for objects reachable from roots. |
| void MarkLiveObjects(); |
| + // Mark the young generation. |
| + void MarkLiveObjectsInYoungGeneration(); |
| // Pushes a black object onto the marking stack and accounts for live bytes. |
| // Note that this assumes live bytes have not yet been counted. |
| @@ -593,14 +608,15 @@ class MarkCompactCollector { |
| INLINE(void SetMark(HeapObject* obj, MarkBit mark_bit)); |
| // Mark the heap roots and all objects reachable from them. |
| - void MarkRoots(RootMarkingVisitor* visitor); |
| + void MarkRoots(RootMarkingVisitor<MarkCompactMode::FULL>* visitor); |
| // Mark the string table specially. References to internalized strings from |
| // the string table are weak. |
| - void MarkStringTable(RootMarkingVisitor* visitor); |
| + void MarkStringTable(RootMarkingVisitor<MarkCompactMode::FULL>* visitor); |
| // Mark objects reachable (transitively) from objects in the marking stack |
| // or overflowed in the heap. |
| + template <MarkCompactMode mode> |
| void ProcessMarkingDeque(); |
| // Mark objects reachable (transitively) from objects in the marking stack |
| @@ -624,11 +640,13 @@ class MarkCompactCollector { |
| // stack. This function empties the marking stack, but may leave |
| // overflowed objects in the heap, in which case the marking stack's |
| // overflow flag will be set. |
| + template <MarkCompactMode mode> |
| void EmptyMarkingDeque(); |
| // Refill the marking stack with overflowed objects from the heap. This |
| // function either leaves the marking stack full or clears the overflow |
| // flag on the marking stack. |
| + template <MarkCompactMode mode> |
| void RefillMarkingDeque(); |
| // Helper methods for refilling the marking stack by discovering grey objects |