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