Index: third_party/WebKit/Source/platform/heap/WrapperVisitor.h |
diff --git a/third_party/WebKit/Source/platform/heap/WrapperVisitor.h b/third_party/WebKit/Source/platform/heap/WrapperVisitor.h |
index 0a2c2cf3023e32f84a5863697f28c377eb4c48be..d0b0bb8b58f0181de6cb003571ab70d1a7a3c674 100644 |
--- a/third_party/WebKit/Source/platform/heap/WrapperVisitor.h |
+++ b/third_party/WebKit/Source/platform/heap/WrapperVisitor.h |
@@ -97,7 +97,13 @@ public: |
if (!traceable) |
return; |
- TraceTrait<T>::markWrapper(this, traceable); |
+ if (TraceTrait<T>::heapObjectHeader(traceable)->isWrapperHeaderMarked()) |
+ return; |
+ |
+ pushToMarkingDeque( |
+ TraceTrait<T>::markWrapper, |
+ TraceTrait<T>::heapObjectHeader, |
+ traceable); |
} |
template<typename T> |
@@ -117,8 +123,13 @@ public: |
#undef DECLARE_DISPATCH_TRACE_WRAPPERS |
virtual void dispatchTraceWrappers(const void*) const = 0; |
- virtual bool markWrapperHeader(const ScriptWrappable*) const = 0; |
- virtual bool markWrapperHeader(const void*) const = 0; |
+ virtual bool markWrapperHeader(HeapObjectHeader*) const = 0; |
+ virtual void markWrappersInAllWorlds(const ScriptWrappable*) const = 0; |
+ virtual void markWrappersInAllWorlds(const void*) const = 0; |
+ virtual void pushToMarkingDeque( |
+ void (*traceWrappersCallback)(const WrapperVisitor*, const void*), |
+ HeapObjectHeader* (*heapObjectHeaderCallback)(const void*), |
+ const void*) const = 0; |
}; |
} // namespace blink |