| Index: Source/platform/heap/Visitor.h
|
| diff --git a/Source/platform/heap/Visitor.h b/Source/platform/heap/Visitor.h
|
| index e0511aef6949441b6ed38e714feb8a0885cd4f4d..3139e493366c480a8cf5fa3e0f1d0ed7c2d74f91 100644
|
| --- a/Source/platform/heap/Visitor.h
|
| +++ b/Source/platform/heap/Visitor.h
|
| @@ -32,6 +32,7 @@
|
| #define Visitor_h
|
|
|
| #include "platform/PlatformExport.h"
|
| +#include "platform/heap/StackFrameDepth.h"
|
| #include "platform/heap/ThreadState.h"
|
| #include "wtf/Assertions.h"
|
| #include "wtf/Deque.h"
|
| @@ -614,18 +615,37 @@ public:
|
| }
|
| #endif
|
|
|
| - inline bool canTraceEagerly() const { return m_traceDepth < kMaxEagerTraceDepth; }
|
| - inline void incrementTraceDepth() { m_traceDepth++; }
|
| - inline void decrementTraceDepth() { ASSERT(m_traceDepth > 0); m_traceDepth--; }
|
| + inline bool canTraceEagerly() const
|
| + {
|
| + ASSERT(m_traceDepth);
|
| + return m_traceDepth->isSafeToRecurse();
|
| + }
|
| +
|
| + inline void incrementTraceDepth()
|
| + {
|
| + ASSERT(m_traceDepth);
|
| + m_traceDepth->increment();
|
| + }
|
| +
|
| + inline void decrementTraceDepth()
|
| + {
|
| + ASSERT(m_traceDepth);
|
| + m_traceDepth->decrement();
|
| + }
|
| +
|
| + inline void configureEagerTraceLimit()
|
| + {
|
| + if (!m_traceDepth)
|
| + m_traceDepth = new StackFrameDepth;
|
| + m_traceDepth->configureLimit();
|
| + }
|
|
|
| inline bool isGlobalMarkingVisitor() const { return m_isGlobalMarkingVisitor; }
|
|
|
| protected:
|
| explicit Visitor(VisitorType type)
|
| : m_isGlobalMarkingVisitor(type == GlobalMarkingVisitorType)
|
| - {
|
| - m_traceDepth = 0;
|
| - }
|
| + { }
|
|
|
| virtual void registerWeakCellWithCallback(void**, WeakPointerCallback) = 0;
|
| #if ENABLE(GC_PROFILE_MARKING)
|
| @@ -639,11 +659,7 @@ protected:
|
| #endif
|
|
|
| private:
|
| - // The maximum depth of eager, unrolled trace() calls that is
|
| - // considered safe and allowed.
|
| - const int kMaxEagerTraceDepth = 100;
|
| -
|
| - static int m_traceDepth;
|
| + static StackFrameDepth* m_traceDepth;
|
| bool m_isGlobalMarkingVisitor;
|
| };
|
|
|
|
|