| Index: third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp
|
| index dd674b0191a48c2680a2a3a280dd56bac4e1b767..a15d094951129b5ef7635a51d390cc4d3109b103 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "bindings/core/v8/ActiveScriptWrappable.h"
|
| #include "bindings/core/v8/DOMWrapperWorld.h"
|
| +#include "bindings/core/v8/ScriptWrappableVisitorVerifier.h"
|
| #include "bindings/core/v8/V8AbstractEventListener.h"
|
| #include "bindings/core/v8/WrapperTypeInfo.h"
|
| #include "core/dom/DocumentStyleSheetCollection.h"
|
| @@ -27,6 +28,7 @@ void ScriptWrappableVisitor::TracePrologue()
|
| {
|
| DCHECK(m_headersToUnmark.isEmpty());
|
| DCHECK(m_markingDeque.isEmpty());
|
| + DCHECK(m_verifierDeque.isEmpty());
|
| m_tracingInProgress = true;
|
| }
|
|
|
| @@ -38,6 +40,12 @@ void ScriptWrappableVisitor::EnterFinalPause()
|
| void ScriptWrappableVisitor::TraceEpilogue()
|
| {
|
| DCHECK(m_markingDeque.isEmpty());
|
| +#if DCHECK_IS_ON()
|
| + ScriptWrappableVisitorVerifier verifier;
|
| + for (auto& markingData : m_verifierDeque) {
|
| + markingData.traceWrappers(&verifier);
|
| + }
|
| +#endif
|
| performCleanup();
|
| }
|
|
|
| @@ -54,6 +62,7 @@ void ScriptWrappableVisitor::performCleanup()
|
|
|
| m_headersToUnmark.clear();
|
| m_markingDeque.clear();
|
| + m_verifierDeque.clear();
|
| m_tracingInProgress = false;
|
| }
|
|
|
| @@ -87,6 +96,7 @@ void ScriptWrappableVisitor::RegisterV8References(const std::vector<std::pair<vo
|
| bool ScriptWrappableVisitor::AdvanceTracing(double deadlineInMs, v8::EmbedderHeapTracer::AdvanceTracingActions actions)
|
| {
|
| DCHECK(m_tracingInProgress);
|
| + WTF::TemporaryChange<bool>(m_advancingTracing, true);
|
| while (actions.force_completion == v8::EmbedderHeapTracer::ForceCompletionAction::FORCE_COMPLETION
|
| || WTF::monotonicallyIncreasingTimeMS() < deadlineInMs) {
|
| if (m_markingDeque.isEmpty()) {
|
| @@ -156,6 +166,12 @@ void ScriptWrappableVisitor::invalidateDeadObjectsInMarkingDeque()
|
| markingData.invalidate();
|
| }
|
| }
|
| + for (auto it = m_verifierDeque.begin(); it != m_verifierDeque.end(); ++it) {
|
| + auto& markingData = *it;
|
| + if (markingData.shouldBeInvalidated()) {
|
| + markingData.invalidate();
|
| + }
|
| + }
|
| for (auto it = m_headersToUnmark.begin(); it != m_headersToUnmark.end(); ++it) {
|
| auto header = *it;
|
| if (header && !header->isMarked()) {
|
|
|