Title: [201614] trunk/Source/WebCore
Revision
201614
Author
[email protected]
Date
2016-06-02 13:35:14 -0700 (Thu, 02 Jun 2016)

Log Message

ScriptExecutionContext::Task constructor should take a NoncopyableFunction<void ()> as parameter
https://bugs.webkit.org/show_bug.cgi?id=158309

Reviewed by Brady Eidson.

ScriptExecutionContext::Task constructor should take a NoncopyableFunction<void ()>
as parameter for consistency with the other constructor and because this can be
called cross-thread.

* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::suspend):
(WebCore::AudioContext::resume):
(WebCore::AudioContext::close):
(WebCore::AudioContext::suspendPlayback):
(WebCore::AudioContext::mayResumePlayback):
* Modules/webaudio/AudioDestinationNode.h:
(WebCore::AudioDestinationNode::resume):
(WebCore::AudioDestinationNode::suspend):
(WebCore::AudioDestinationNode::close):
* Modules/webaudio/DefaultAudioDestinationNode.cpp:
(WebCore::DefaultAudioDestinationNode::resume):
(WebCore::DefaultAudioDestinationNode::suspend):
(WebCore::DefaultAudioDestinationNode::close):
* Modules/webaudio/DefaultAudioDestinationNode.h:
* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::Task::Task):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (201613 => 201614)


--- trunk/Source/WebCore/ChangeLog	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/ChangeLog	2016-06-02 20:35:14 UTC (rev 201614)
@@ -1,3 +1,32 @@
+2016-06-02  Chris Dumez  <[email protected]>
+
+        ScriptExecutionContext::Task constructor should take a NoncopyableFunction<void ()> as parameter
+        https://bugs.webkit.org/show_bug.cgi?id=158309
+
+        Reviewed by Brady Eidson.
+
+        ScriptExecutionContext::Task constructor should take a NoncopyableFunction<void ()>
+        as parameter for consistency with the other constructor and because this can be
+        called cross-thread.
+
+        * Modules/webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::suspend):
+        (WebCore::AudioContext::resume):
+        (WebCore::AudioContext::close):
+        (WebCore::AudioContext::suspendPlayback):
+        (WebCore::AudioContext::mayResumePlayback):
+        * Modules/webaudio/AudioDestinationNode.h:
+        (WebCore::AudioDestinationNode::resume):
+        (WebCore::AudioDestinationNode::suspend):
+        (WebCore::AudioDestinationNode::close):
+        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
+        (WebCore::DefaultAudioDestinationNode::resume):
+        (WebCore::DefaultAudioDestinationNode::suspend):
+        (WebCore::DefaultAudioDestinationNode::close):
+        * Modules/webaudio/DefaultAudioDestinationNode.h:
+        * dom/ScriptExecutionContext.h:
+        (WebCore::ScriptExecutionContext::Task::Task):
+
 2016-06-02  Darin Adler  <[email protected]>
 
         Fix a couple of mistakes in CSSParserValue memory management

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (201613 => 201614)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2016-06-02 20:35:14 UTC (rev 201614)
@@ -1061,9 +1061,8 @@
 
     lazyInitialize();
 
-    RefPtr<AudioContext> protectedThis(this);
-    m_destinationNode->suspend([protectedThis] {
-        protectedThis->setState(State::Suspended);
+    m_destinationNode->suspend([this, protectedThis = Ref<AudioContext>(*this)] {
+        setState(State::Suspended);
     });
 }
 
@@ -1091,9 +1090,8 @@
 
     lazyInitialize();
 
-    RefPtr<AudioContext> protectedThis(this);
-    m_destinationNode->resume([protectedThis] {
-        protectedThis->setState(State::Running);
+    m_destinationNode->resume([this, protectedThis = Ref<AudioContext>(*this)] {
+        setState(State::Running);
     });
 }
 
@@ -1113,10 +1111,9 @@
 
     lazyInitialize();
 
-    RefPtr<AudioContext> protectedThis(this);
-    m_destinationNode->close([protectedThis] {
-        protectedThis->setState(State::Closed);
-        protectedThis->uninitialize();
+    m_destinationNode->close([this, protectedThis = Ref<AudioContext>(*this)] {
+        setState(State::Closed);
+        uninitialize();
     });
 }
 
@@ -1134,10 +1131,9 @@
 
     lazyInitialize();
 
-    RefPtr<AudioContext> protectedThis(this);
-    m_destinationNode->suspend([protectedThis] {
-        bool interrupted = protectedThis->m_mediaSession->state() == PlatformMediaSession::Interrupted;
-        protectedThis->setState(interrupted ? State::Interrupted : State::Suspended);
+    m_destinationNode->suspend([this, protectedThis = Ref<AudioContext>(*this)] {
+        bool interrupted = m_mediaSession->state() == PlatformMediaSession::Interrupted;
+        setState(interrupted ? State::Interrupted : State::Suspended);
     });
 }
 
@@ -1156,9 +1152,8 @@
 
     lazyInitialize();
 
-    RefPtr<AudioContext> protectedThis(this);
-    m_destinationNode->resume([protectedThis] {
-        protectedThis->setState(State::Running);
+    m_destinationNode->resume([this, protectedThis = Ref<AudioContext>(*this)] {
+        setState(State::Running);
     });
 }
 

Modified: trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.h (201613 => 201614)


--- trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.h	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/Modules/webaudio/AudioDestinationNode.h	2016-06-02 20:35:14 UTC (rev 201614)
@@ -30,6 +30,7 @@
 #include "AudioIOCallback.h"
 #include "AudioNode.h"
 #include "AudioSourceProvider.h"
+#include <wtf/NoncopyableFunction.h>
 
 namespace WebCore {
 
@@ -58,9 +59,9 @@
     virtual void enableInput(const String& inputDeviceId) = 0;
 
     virtual void startRendering() = 0;
-    virtual void resume(std::function<void()>) { }
-    virtual void suspend(std::function<void()>) { }
-    virtual void close(std::function<void()>) { }
+    virtual void resume(NoncopyableFunction<void ()>&&) { }
+    virtual void suspend(NoncopyableFunction<void ()>&&) { }
+    virtual void close(NoncopyableFunction<void ()>&&) { }
 
     virtual bool isPlaying() { return false; }
     void isPlayingDidChange() override;

Modified: trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp (201613 => 201614)


--- trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp	2016-06-02 20:35:14 UTC (rev 201614)
@@ -106,30 +106,30 @@
         m_destination->start();
 }
 
-void DefaultAudioDestinationNode::resume(std::function<void()> function)
+void DefaultAudioDestinationNode::resume(NoncopyableFunction<void ()>&& function)
 {
     ASSERT(isInitialized());
     if (isInitialized())
         m_destination->start();
     if (auto scriptExecutionContext = context().scriptExecutionContext())
-        scriptExecutionContext->postTask(function);
+        scriptExecutionContext->postTask(WTFMove(function));
 }
 
-void DefaultAudioDestinationNode::suspend(std::function<void()> function)
+void DefaultAudioDestinationNode::suspend(NoncopyableFunction<void ()>&& function)
 {
     ASSERT(isInitialized());
     if (isInitialized())
         m_destination->stop();
     if (auto scriptExecutionContext = context().scriptExecutionContext())
-        scriptExecutionContext->postTask(function);
+        scriptExecutionContext->postTask(WTFMove(function));
 }
 
-void DefaultAudioDestinationNode::close(std::function<void()> function)
+void DefaultAudioDestinationNode::close(NoncopyableFunction<void()>&& function)
 {
     ASSERT(isInitialized());
     uninitialize();
     if (auto scriptExecutionContext = context().scriptExecutionContext())
-        scriptExecutionContext->postTask(function);
+        scriptExecutionContext->postTask(WTFMove(function));
 }
 
 unsigned long DefaultAudioDestinationNode::maxChannelCount() const

Modified: trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.h (201613 => 201614)


--- trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.h	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.h	2016-06-02 20:35:14 UTC (rev 201614)
@@ -50,9 +50,9 @@
     // AudioDestinationNode
     void enableInput(const String& inputDeviceId) override;
     void startRendering() override;
-    void resume(std::function<void()>) override;
-    void suspend(std::function<void()>) override;
-    void close(std::function<void()>) override;
+    void resume(NoncopyableFunction<void ()>&&) override;
+    void suspend(NoncopyableFunction<void ()>&&) override;
+    void close(NoncopyableFunction<void ()>&&) override;
     unsigned long maxChannelCount() const override;
     bool isPlaying() override;
 

Modified: trunk/Source/WebCore/dom/ScriptExecutionContext.h (201613 => 201614)


--- trunk/Source/WebCore/dom/ScriptExecutionContext.h	2016-06-02 20:05:08 UTC (rev 201613)
+++ trunk/Source/WebCore/dom/ScriptExecutionContext.h	2016-06-02 20:35:14 UTC (rev 201614)
@@ -140,8 +140,8 @@
         {
         }
 
-        Task(std::function<void ()> task)
-            : m_task([task](ScriptExecutionContext&) { task(); })
+        Task(NoncopyableFunction<void ()>&& task)
+            : m_task([task = WTFMove(task)](ScriptExecutionContext&) { task(); })
             , m_isCleanupTask(false)
         {
         }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to