Index: third_party/WebKit/Source/web/WebLeakDetector.cpp |
diff --git a/third_party/WebKit/Source/web/WebLeakDetector.cpp b/third_party/WebKit/Source/web/WebLeakDetector.cpp |
index e1ddecbab86bf329b6cd9c60d7956be2f3b50bd0..1c1c7952c761575948ea7db8dabd925ab9c8b021 100644 |
--- a/third_party/WebKit/Source/web/WebLeakDetector.cpp |
+++ b/third_party/WebKit/Source/web/WebLeakDetector.cpp |
@@ -59,6 +59,9 @@ public: |
, m_delayedGCAndReportTimer(this, &WebLeakDetectorImpl::delayedGCAndReport) |
, m_delayedReportTimer(this, &WebLeakDetectorImpl::delayedReport) |
, m_numberOfGCNeeded(0) |
+#if ENABLE(ASSERT) |
+ , m_haveReported(false) |
+#endif |
{ |
ASSERT(m_client); |
} |
@@ -67,6 +70,9 @@ public: |
void collectGarbageAndGetDOMCounts(WebLocalFrame*) override; |
+ void prepareForLeakDetection(WebLocalFrame*) override; |
+ void collectGarbageAndReport() override; |
+ |
private: |
void delayedGCAndReport(Timer<WebLeakDetectorImpl>*); |
void delayedReport(Timer<WebLeakDetectorImpl>*); |
@@ -75,9 +81,12 @@ private: |
Timer<WebLeakDetectorImpl> m_delayedGCAndReportTimer; |
Timer<WebLeakDetectorImpl> m_delayedReportTimer; |
int m_numberOfGCNeeded; |
+#if ENABLE(ASSERT) |
+ bool m_haveReported; |
+#endif |
}; |
-void WebLeakDetectorImpl::collectGarbageAndGetDOMCounts(WebLocalFrame* frame) |
+void WebLeakDetectorImpl::prepareForLeakDetection(WebLocalFrame* frame) |
{ |
v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
v8::HandleScope handleScope(isolate); |
@@ -99,6 +108,18 @@ void WebLeakDetectorImpl::collectGarbageAndGetDOMCounts(WebLocalFrame* frame) |
} |
// FIXME: HTML5 Notification should be closed because notification affects the result of number of DOM objects. |
+} |
+ |
+void WebLeakDetectorImpl::collectGarbageAndReport() |
+{ |
+#if ENABLE(ASSERT) |
+ // Repeated uses are not supported. |
+ ASSERT(!m_haveReported); |
+ m_haveReported = true; |
+#endif |
+ |
+ v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
+ v8::HandleScope handleScope(isolate); |
V8GCController::collectAllGarbageForTesting(isolate); |
// Note: Oilpan precise GC is scheduled at the end of the event loop. |
@@ -113,6 +134,12 @@ void WebLeakDetectorImpl::collectGarbageAndGetDOMCounts(WebLocalFrame* frame) |
m_delayedGCAndReportTimer.startOneShot(0, BLINK_FROM_HERE); |
} |
+void WebLeakDetectorImpl::collectGarbageAndGetDOMCounts(WebLocalFrame* frame) |
+{ |
+ prepareForLeakDetection(frame); |
+ collectGarbageAndReport(); |
+} |
+ |
void WebLeakDetectorImpl::delayedGCAndReport(Timer<WebLeakDetectorImpl>*) |
{ |
// We do a second and third GC here to address flakiness |