Title: [221578] releases/WebKitGTK/webkit-2.18/Source/WebCore
Revision
221578
Author
[email protected]
Date
2017-09-04 01:50:04 -0700 (Mon, 04 Sep 2017)

Log Message

Merge r221539 - Performance / PerformanceObserver leaks seen on bots
https://bugs.webkit.org/show_bug.cgi?id=176269

Patch by Joseph Pecoraro <[email protected]> on 2017-09-02
Reviewed by Darin Adler.

* page/DOMWindow.cpp:
(WebCore::DOMWindow::removeAllEventListeners):
* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::removeAllEventListeners):
Also use this opportunity to break up the reference cycle
between PerformanceObservers and the Performance object.

* page/Performance.h:
* page/Performance.cpp:
(WebCore::Performance::removeAllObservers):
Disassociate and clear observers.

* page/PerformanceObserver.h:
* page/PerformanceObserver.cpp:
(WebCore::PerformanceObserver::disassociate):
Clear the back-reference to the Performance object to
break the cycle.

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-09-04 08:50:04 UTC (rev 221578)
@@ -1,3 +1,28 @@
+2017-09-02  Joseph Pecoraro  <[email protected]>
+
+        Performance / PerformanceObserver leaks seen on bots
+        https://bugs.webkit.org/show_bug.cgi?id=176269
+
+        Reviewed by Darin Adler.
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::removeAllEventListeners):
+        * workers/WorkerGlobalScope.cpp:
+        (WebCore::WorkerGlobalScope::removeAllEventListeners):
+        Also use this opportunity to break up the reference cycle
+        between PerformanceObservers and the Performance object.
+
+        * page/Performance.h:
+        * page/Performance.cpp:
+        (WebCore::Performance::removeAllObservers):
+        Disassociate and clear observers.
+
+        * page/PerformanceObserver.h:
+        * page/PerformanceObserver.cpp:
+        (WebCore::PerformanceObserver::disassociate):
+        Clear the back-reference to the Performance object to
+        break the cycle.
+
 2017-09-02  Carlos Garcia Campos  <[email protected]>
 
         [GTK][Wayland] Use fast malloc to allocate backing store cairo surfaces data

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/DOMWindow.cpp (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/DOMWindow.cpp	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/DOMWindow.cpp	2017-09-04 08:50:04 UTC (rev 221578)
@@ -2018,8 +2018,10 @@
         document->didRemoveEventTargetNode(*document);
 #endif
 
-    if (m_performance)
+    if (m_performance) {
         m_performance->removeAllEventListeners();
+        m_performance->removeAllObservers();
+    }
 
     removeAllUnloadEventListeners(this);
     removeAllBeforeUnloadEventListeners(this);

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.cpp (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.cpp	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.cpp	2017-09-04 08:50:04 UTC (rev 221578)
@@ -231,6 +231,13 @@
     m_userTiming->clearMeasures(measureName);
 }
 
+void Performance::removeAllObservers()
+{
+    for (auto& observer : m_observers)
+        observer->disassociate();
+    m_observers.clear();
+}
+
 void Performance::registerPerformanceObserver(PerformanceObserver& observer)
 {
     m_observers.add(&observer);

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.h (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.h	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/Performance.h	2017-09-04 08:50:04 UTC (rev 221578)
@@ -76,6 +76,7 @@
 
     void addResourceTiming(ResourceTiming&&);
 
+    void removeAllObservers();
     void registerPerformanceObserver(PerformanceObserver&);
     void unregisterPerformanceObserver(PerformanceObserver&);
 

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.cpp (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.cpp	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.cpp	2017-09-04 08:50:04 UTC (rev 221578)
@@ -48,6 +48,11 @@
         ASSERT_NOT_REACHED();
 }
 
+void PerformanceObserver::disassociate()
+{
+    m_performance = nullptr;
+}
+
 ExceptionOr<void> PerformanceObserver::observe(Init&& init)
 {
     if (!m_performance)

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.h (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.h	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/PerformanceObserver.h	2017-09-04 08:50:04 UTC (rev 221578)
@@ -49,6 +49,8 @@
         return adoptRef(*new PerformanceObserver(context, WTFMove(callback)));
     }
 
+    void disassociate();
+
     ExceptionOr<void> observe(Init&&);
     void disconnect();
 

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/workers/WorkerGlobalScope.cpp (221577 => 221578)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/workers/WorkerGlobalScope.cpp	2017-09-04 08:49:55 UTC (rev 221577)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/workers/WorkerGlobalScope.cpp	2017-09-04 08:50:04 UTC (rev 221578)
@@ -103,6 +103,7 @@
 {
     EventTarget::removeAllEventListeners();
     m_performance->removeAllEventListeners();
+    m_performance->removeAllObservers();
 }
 
 bool WorkerGlobalScope::isSecureContext() const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to