Title: [187544] trunk/Source
Revision
187544
Author
cdu...@apple.com
Date
2015-07-29 00:16:34 -0700 (Wed, 29 Jul 2015)

Log Message

Avoid unnecessarily constructing PlatformMediaSessionManager on Document destruction
https://bugs.webkit.org/show_bug.cgi?id=147398

Reviewed by Jer Noble.

Only call PlatformMediaSessionManager::stopAllMediaPlaybackForProcess() in
Source/WebCore:

destructors if an PlatformMediaSessionManager instance already exists, to
avoid constructing one unecessarily at that point.

* dom/Document.cpp:
(WebCore::Document::~Document):
* platform/audio/PlatformMediaSessionManager.cpp:
(WebCore::PlatformMediaSessionManager::sharedManager):
(WebCore::PlatformMediaSessionManager::sharedManagerIfExists):
* platform/audio/PlatformMediaSessionManager.h:
* platform/audio/ios/MediaSessionManagerIOS.mm:
(WebCore::PlatformMediaSessionManager::sharedManager):
(WebCore::PlatformMediaSessionManager::sharedManagerIfExists):

Source/WebKit2:

destructors if an PlatformMediaSessionManager instance already exists, to
avoid constructing one unecessarily at that point.

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::didClose):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (187543 => 187544)


--- trunk/Source/WebCore/ChangeLog	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebCore/ChangeLog	2015-07-29 07:16:34 UTC (rev 187544)
@@ -1,3 +1,24 @@
+2015-07-29  Chris Dumez  <cdu...@apple.com>
+
+        Avoid unnecessarily constructing PlatformMediaSessionManager on Document destruction
+        https://bugs.webkit.org/show_bug.cgi?id=147398
+
+        Reviewed by Jer Noble.
+
+        Only call PlatformMediaSessionManager::stopAllMediaPlaybackForProcess() in
+        destructors if an PlatformMediaSessionManager instance already exists, to
+        avoid constructing one unecessarily at that point.
+
+        * dom/Document.cpp:
+        (WebCore::Document::~Document):
+        * platform/audio/PlatformMediaSessionManager.cpp:
+        (WebCore::PlatformMediaSessionManager::sharedManager):
+        (WebCore::PlatformMediaSessionManager::sharedManagerIfExists):
+        * platform/audio/PlatformMediaSessionManager.h:
+        * platform/audio/ios/MediaSessionManagerIOS.mm:
+        (WebCore::PlatformMediaSessionManager::sharedManager):
+        (WebCore::PlatformMediaSessionManager::sharedManagerIfExists):
+
 2015-07-28  Simon Fraser  <simon.fra...@apple.com>
 
         Fix debug builds.

Modified: trunk/Source/WebCore/dom/Document.cpp (187543 => 187544)


--- trunk/Source/WebCore/dom/Document.cpp	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebCore/dom/Document.cpp	2015-07-29 07:16:34 UTC (rev 187544)
@@ -634,7 +634,8 @@
         m_cachedResourceLoader->setDocument(nullptr);
 
 #if ENABLE(VIDEO)
-    PlatformMediaSessionManager::sharedManager().stopAllMediaPlaybackForDocument(this);
+    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
+        platformMediaSessionManager->stopAllMediaPlaybackForDocument(this);
 #endif
     
     // We must call clearRareData() here since a Document class inherits TreeScope

Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp (187543 => 187544)


--- trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp	2015-07-29 07:16:34 UTC (rev 187544)
@@ -37,11 +37,19 @@
 namespace WebCore {
 
 #if !PLATFORM(IOS)
+static PlatformMediaSessionManager* platformMediaSessionManager = nullptr;
+
 PlatformMediaSessionManager& PlatformMediaSessionManager::sharedManager()
 {
-    DEPRECATED_DEFINE_STATIC_LOCAL(PlatformMediaSessionManager, manager, ());
-    return manager;
+    if (!platformMediaSessionManager)
+        platformMediaSessionManager = new PlatformMediaSessionManager;
+    return *platformMediaSessionManager;
 }
+
+PlatformMediaSessionManager* PlatformMediaSessionManager::sharedManagerIfExists()
+{
+    return platformMediaSessionManager;
+}
 #endif
 
 PlatformMediaSessionManager::PlatformMediaSessionManager()

Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h (187543 => 187544)


--- trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.h	2015-07-29 07:16:34 UTC (rev 187544)
@@ -44,6 +44,7 @@
 class PlatformMediaSessionManager : private RemoteCommandListenerClient, private SystemSleepListener::Client, private AudioHardwareListener::Client {
     WTF_MAKE_FAST_ALLOCATED;
 public:
+    WEBCORE_EXPORT static PlatformMediaSessionManager* sharedManagerIfExists();
     WEBCORE_EXPORT static PlatformMediaSessionManager& sharedManager();
     virtual ~PlatformMediaSessionManager() { }
 

Modified: trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm (187543 => 187544)


--- trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm	2015-07-29 07:16:34 UTC (rev 187544)
@@ -114,12 +114,20 @@
 
 namespace WebCore {
 
+static MediaSessionManageriOS* platformMediaSessionManager = nullptr;
+
 PlatformMediaSessionManager& PlatformMediaSessionManager::sharedManager()
 {
-    DEPRECATED_DEFINE_STATIC_LOCAL(MediaSessionManageriOS, manager, ());
-    return manager;
+    if (!platformMediaSessionManager)
+        platformMediaSessionManager = new MediaSessionManageriOS;
+    return *platformMediaSessionManager;
 }
 
+PlatformMediaSessionManager* PlatformMediaSessionManager::sharedManagerIfExists()
+{
+    return platformMediaSessionManager;
+}
+
 MediaSessionManageriOS::MediaSessionManageriOS()
     : PlatformMediaSessionManager()
     , m_objcObserver(adoptNS([[WebMediaSessionHelper alloc] initWithCallback:this]))

Modified: trunk/Source/WebKit2/ChangeLog (187543 => 187544)


--- trunk/Source/WebKit2/ChangeLog	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebKit2/ChangeLog	2015-07-29 07:16:34 UTC (rev 187544)
@@ -1,3 +1,17 @@
+2015-07-29  Chris Dumez  <cdu...@apple.com>
+
+        Avoid unnecessarily constructing PlatformMediaSessionManager on Document destruction
+        https://bugs.webkit.org/show_bug.cgi?id=147398
+
+        Reviewed by Jer Noble.
+
+        Only call PlatformMediaSessionManager::stopAllMediaPlaybackForProcess() in
+        destructors if an PlatformMediaSessionManager instance already exists, to 
+        avoid constructing one unecessarily at that point.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::didClose):
+
 2015-07-28  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] Add API to set the maximum number of web processes per WebKitWebContext

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (187543 => 187544)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2015-07-29 06:50:50 UTC (rev 187543)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2015-07-29 07:16:34 UTC (rev 187544)
@@ -661,7 +661,8 @@
 
 #if ENABLE(VIDEO)
     // FIXME(146657): This explicit media stop command should not be necessary
-    PlatformMediaSessionManager::sharedManager().stopAllMediaPlaybackForProcess();
+    if (auto* platformMediaSessionManager = PlatformMediaSessionManager::sharedManagerIfExists())
+        platformMediaSessionManager->stopAllMediaPlaybackForProcess();
 #endif
 
     // The UI process closed this connection, shut down.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to