| Index: third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h
|
| diff --git a/third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h b/third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h
|
| index 346e336b29024b01bb43d3577f6c12fa7fcec9b5..1f40fa1e3f78515f7f25e6c79b85ab1c56b9c94d 100644
|
| --- a/third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h
|
| +++ b/third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h
|
| @@ -16,7 +16,28 @@
|
|
|
| namespace blink {
|
|
|
| -template <typename Derived>
|
| +template <typename Derived, bool PerThreadHeapEnabled>
|
| +struct HeapAccessor {
|
| + static ThreadHeap* heap(Derived* visitor);
|
| +};
|
| +
|
| +template<typename Derived>
|
| +struct HeapAccessor<Derived, true> {
|
| + static ThreadHeap* heap(Derived* visitor)
|
| + {
|
| + return &visitor->heap();
|
| + }
|
| +};
|
| +
|
| +template<typename Derived>
|
| +struct HeapAccessor<Derived, false> {
|
| + static ThreadHeap* heap(Derived* visitor)
|
| + {
|
| + return ThreadHeap::mainThreadHeap();
|
| + }
|
| +};
|
| +
|
| +template <typename Derived, bool PerThreadHeapEnabled>
|
| class MarkingVisitorImpl {
|
| USING_FAST_MALLOC(MarkingVisitorImpl);
|
| protected:
|
| @@ -44,7 +65,7 @@ protected:
|
| header->mark();
|
|
|
| if (callback)
|
| - ThreadHeap::mainThreadHeap()->pushTraceCallback(const_cast<void*>(objectPointer), callback);
|
| + getThreadHeap()->pushTraceCallback(const_cast<void*>(objectPointer), callback);
|
| }
|
|
|
| inline void mark(const void* objectPointer, TraceCallback callback)
|
| @@ -58,7 +79,7 @@ protected:
|
| inline void registerDelayedMarkNoTracing(const void* objectPointer)
|
| {
|
| ASSERT(toDerived()->getMarkingMode() != Visitor::WeakProcessing);
|
| - ThreadHeap::mainThreadHeap()->pushPostMarkingCallback(const_cast<void*>(objectPointer), &markNoTracingCallback);
|
| + getThreadHeap()->pushPostMarkingCallback(const_cast<void*>(objectPointer), &markNoTracingCallback);
|
| }
|
|
|
| inline void registerWeakMembers(const void* closure, const void* objectPointer, WeakCallback callback)
|
| @@ -67,19 +88,19 @@ protected:
|
| // We don't want to run weak processings when taking a snapshot.
|
| if (toDerived()->getMarkingMode() == Visitor::SnapshotMarking)
|
| return;
|
| - ThreadHeap::mainThreadHeap()->pushThreadLocalWeakCallback(const_cast<void*>(closure), const_cast<void*>(objectPointer), callback);
|
| + getThreadHeap()->pushThreadLocalWeakCallback(const_cast<void*>(closure), const_cast<void*>(objectPointer), callback);
|
| }
|
|
|
| inline void registerWeakTable(const void* closure, EphemeronCallback iterationCallback, EphemeronCallback iterationDoneCallback)
|
| {
|
| ASSERT(toDerived()->getMarkingMode() != Visitor::WeakProcessing);
|
| - ThreadHeap::mainThreadHeap()->registerWeakTable(const_cast<void*>(closure), iterationCallback, iterationDoneCallback);
|
| + getThreadHeap()->registerWeakTable(const_cast<void*>(closure), iterationCallback, iterationDoneCallback);
|
| }
|
|
|
| #if ENABLE(ASSERT)
|
| inline bool weakTableRegistered(const void* closure)
|
| {
|
| - return ThreadHeap::mainThreadHeap()->weakTableRegistered(closure);
|
| + return getThreadHeap()->weakTableRegistered(closure);
|
| }
|
| #endif
|
|
|
| @@ -110,6 +131,11 @@ protected:
|
| return static_cast<Derived*>(this);
|
| }
|
|
|
| + ThreadHeap* getThreadHeap()
|
| + {
|
| + return HeapAccessor<Derived, PerThreadHeapEnabled>::heap(toDerived());
|
| + }
|
| +
|
| protected:
|
| inline void registerWeakCellWithCallback(void** cell, WeakCallback callback)
|
| {
|
| @@ -117,7 +143,7 @@ protected:
|
| // We don't want to run weak processings when taking a snapshot.
|
| if (toDerived()->getMarkingMode() == Visitor::SnapshotMarking)
|
| return;
|
| - ThreadHeap::mainThreadHeap()->pushGlobalWeakCallback(cell, callback);
|
| + getThreadHeap()->pushGlobalWeakCallback(cell, callback);
|
| }
|
|
|
| private:
|
|
|