Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(630)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitor.cpp

Issue 2084933002: Implement wrapper tracing verifier (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use verifier when dchecks are on Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()) {

Powered by Google App Engine
This is Rietveld 408576698