| Index: third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h
|
| index 15ab14a313fbc9caa1cf708889fc082353710db9..7d6a6b28294800f4ff24f8f9aea9e7316cc25287 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.h
|
| @@ -6,15 +6,16 @@
|
| #define ScriptWrappableVisitor_h
|
|
|
| #include "bindings/core/v8/ScopedPersistent.h"
|
| +#include "bindings/core/v8/ScriptWrappable.h"
|
| #include "core/CoreExport.h"
|
| #include "platform/heap/WrapperVisitor.h"
|
| +#include "wtf/Deque.h"
|
| #include "wtf/Vector.h"
|
| #include <v8.h>
|
|
|
|
|
| namespace blink {
|
|
|
| -class ScriptWrappable;
|
| class HeapObjectHeader;
|
| template<typename T> class Member;
|
|
|
| @@ -23,8 +24,9 @@ template<typename T> class Member;
|
| * references. It is used during V8 garbage collection. When this visitor is
|
| * set to the v8::Isolate as its embedder heap tracer, V8 will call it during
|
| * its garbage collection. At the beginning, it will call TracePrologue, then
|
| - * repeatedly (as v8 discovers more wrappers) it will call TraceWrappersFrom,
|
| - * and at the end it will call TraceEpilogue.
|
| + * repeatedly it will call AdvanceTracing, and at the end it will call
|
| + * TraceEpilogue. Everytime V8 finds new wrappers, it will let the tracer know
|
| + * using RegisterV8References.
|
| */
|
| class CORE_EXPORT ScriptWrappableVisitor : public WrapperVisitor, public v8::EmbedderHeapTracer {
|
| public:
|
| @@ -45,11 +47,10 @@ public:
|
| }
|
|
|
| void TracePrologue() override;
|
| - void TraceWrappersFrom(const std::vector<std::pair<void*, void*>>& internalFieldsOfPotentialWrappers) override;
|
| + void RegisterV8References(const std::vector<std::pair<void*, void*>>& internalFieldsOfPotentialWrappers) override;
|
| + bool AdvanceTracing(double deadlineInMs, v8::EmbedderHeapTracer::AdvanceTracingActions) override;
|
| void TraceEpilogue() override;
|
|
|
| - void traceWrappersFrom(const ScriptWrappable*) const;
|
| -
|
| template <typename T>
|
| void markWrapper(const v8::Persistent<T>* handle) const
|
| {
|
| @@ -71,9 +72,16 @@ private:
|
| bool markWrapperHeader(HeapObjectHeader*) const;
|
| bool markWrapperHeader(const ScriptWrappable*) const override;
|
| bool markWrapperHeader(const void* garbageCollected) const override;
|
| - inline void traceWrappersFrom(std::pair<void*, void*> internalFields);
|
| bool m_tracingInProgress = false;
|
| /**
|
| + * Collection of ScriptWrappables we need to trace from. We assume it safe
|
| + * to hold on to the raw pointers because:
|
| + * * oilpan object cannot move
|
| + * * for the oilpan gc, this deque is part of the root set, so objects
|
| + * in the deque will not die
|
| + */
|
| + mutable WTF::Deque<const ScriptWrappable*> m_markingDeque;
|
| + /**
|
| * Collection of headers we need to unmark after the tracing finished. We
|
| * assume it is safe to hold on to the headers because:
|
| * * oilpan objects cannot move
|
|
|