| Index: src/mark-compact.h
|
| diff --git a/src/mark-compact.h b/src/mark-compact.h
|
| index 6420a21fe3b0ac746706bf13605188c80e1bf83e..dbc28697f006732d3f37cd2c5269cf1d8b0a01fe 100644
|
| --- a/src/mark-compact.h
|
| +++ b/src/mark-compact.h
|
| @@ -42,6 +42,7 @@ typedef bool (*IsAliveFunction)(HeapObject* obj, int* size, int* offset);
|
| // Forward declarations.
|
| class CodeFlusher;
|
| class GCTracer;
|
| +class MarkCompactCollector;
|
| class MarkingVisitor;
|
| class RootMarkingVisitor;
|
|
|
| @@ -166,7 +167,6 @@ class Marking {
|
|
|
| // ----------------------------------------------------------------------------
|
| // Marking deque for tracing live objects.
|
| -
|
| class MarkingDeque {
|
| public:
|
| MarkingDeque()
|
| @@ -383,6 +383,34 @@ class SlotsBuffer {
|
| };
|
|
|
|
|
| +// -------------------------------------------------------------------------
|
| +// Marker shared between incremental and non-incremental marking
|
| +template<class BaseMarker> class Marker {
|
| + public:
|
| + Marker(BaseMarker* base_marker, MarkCompactCollector* mark_compact_collector)
|
| + : base_marker_(base_marker),
|
| + mark_compact_collector_(mark_compact_collector) {}
|
| +
|
| + // Mark pointers in a Map and its DescriptorArray together, possibly
|
| + // treating transitions or back pointers weak.
|
| + void MarkMapContents(Map* map);
|
| + void MarkDescriptorArray(DescriptorArray* descriptors);
|
| + void MarkAccessorPairSlot(AccessorPair* accessors, int offset);
|
| +
|
| + private:
|
| + BaseMarker* base_marker() {
|
| + return base_marker_;
|
| + }
|
| +
|
| + MarkCompactCollector* mark_compact_collector() {
|
| + return mark_compact_collector_;
|
| + }
|
| +
|
| + BaseMarker* base_marker_;
|
| + MarkCompactCollector* mark_compact_collector_;
|
| +};
|
| +
|
| +
|
| // Defined in isolate.h.
|
| class ThreadLocalTop;
|
|
|
| @@ -584,8 +612,6 @@ class MarkCompactCollector {
|
|
|
| bool was_marked_incrementally_;
|
|
|
| - bool collect_maps_;
|
| -
|
| bool flush_monomorphic_ics_;
|
|
|
| // A pointer to the current stack-allocated GC tracer object during a full
|
| @@ -608,12 +634,13 @@ class MarkCompactCollector {
|
| //
|
| // After: Live objects are marked and non-live objects are unmarked.
|
|
|
| -
|
| friend class RootMarkingVisitor;
|
| friend class MarkingVisitor;
|
| friend class StaticMarkingVisitor;
|
| friend class CodeMarkingVisitor;
|
| friend class SharedFunctionInfoMarkingVisitor;
|
| + friend class Marker<IncrementalMarking>;
|
| + friend class Marker<MarkCompactCollector>;
|
|
|
| // Mark non-optimize code for functions inlined into the given optimized
|
| // code. This will prevent it from being flushed.
|
| @@ -631,22 +658,25 @@ class MarkCompactCollector {
|
| void AfterMarking();
|
|
|
| // Marks the object black and pushes it on the marking stack.
|
| - // This is for non-incremental marking.
|
| + // Returns true if object needed marking and false otherwise.
|
| + // This is for non-incremental marking only.
|
| + INLINE(bool MarkObjectAndPush(HeapObject* obj));
|
| +
|
| + // Marks the object black and pushes it on the marking stack.
|
| + // This is for non-incremental marking only.
|
| INLINE(void MarkObject(HeapObject* obj, MarkBit mark_bit));
|
|
|
| - INLINE(bool MarkObjectWithoutPush(HeapObject* object));
|
| - INLINE(void MarkObjectAndPush(HeapObject* value));
|
| + // Marks the object black without pushing it on the marking stack.
|
| + // Returns true if object needed marking and false otherwise.
|
| + // This is for non-incremental marking only.
|
| + INLINE(bool MarkObjectWithoutPush(HeapObject* obj));
|
|
|
| - // Marks the object black. This is for non-incremental marking.
|
| + // Marks the object black assuming that it is not yet marked.
|
| + // This is for non-incremental marking only.
|
| INLINE(void SetMark(HeapObject* obj, MarkBit mark_bit));
|
|
|
| void ProcessNewlyMarkedObject(HeapObject* obj);
|
|
|
| - // Mark a Map and its DescriptorArray together, skipping transitions.
|
| - void MarkMapContents(Map* map);
|
| - void MarkAccessorPairSlot(HeapObject* accessors, int offset);
|
| - void MarkDescriptorArray(DescriptorArray* descriptors);
|
| -
|
| // Mark the heap roots and all objects reachable from them.
|
| void MarkRoots(RootMarkingVisitor* visitor);
|
|
|
| @@ -749,6 +779,7 @@ class MarkCompactCollector {
|
| MarkingDeque marking_deque_;
|
| CodeFlusher* code_flusher_;
|
| Object* encountered_weak_maps_;
|
| + Marker<MarkCompactCollector> marker_;
|
|
|
| List<Page*> evacuation_candidates_;
|
| List<Code*> invalidated_code_;
|
|
|