Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp |
| diff --git a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp |
| index cba5a99247ab2929a07aae6107dbb4a70cfee023..d59d6a426fb06ed550c0da622031edd4df2b3e21 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp |
| +++ b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp |
| @@ -28,6 +28,7 @@ |
| #include "modules/webaudio/AudioNode.h" |
| #include "modules/webaudio/AudioNodeOutput.h" |
| +#include "modules/webaudio/OfflineAudioContext.h" |
| #include "platform/ThreadSafeFunctional.h" |
| #include "public/platform/Platform.h" |
| #include "wtf/MainThread.h" |
| @@ -60,6 +61,17 @@ void DeferredTaskHandler::unlock() |
| m_contextGraphMutex.unlock(); |
| } |
| +void DeferredTaskHandler::offlineLock() |
| +{ |
| + // It is safe to lock the audio thread for offline rendering, but |
| + // let us have RELEASE_ASSERT here to make sure to explicitly crash rather |
| + // than accidentally blocking the audio thread. |
| + RELEASE_ASSERT_WITH_MESSAGE(isAudioThread(), |
| + "DeferredTaskHandler::offlineLock() should be called within the audio thread."); |
| + |
| + m_contextGraphMutex.lock(); |
| +} |
|
Raymond Toy
2015/10/21 23:14:18
As discussed, we should just move all of this into
|
| + |
| #if ENABLE(ASSERT) |
| bool DeferredTaskHandler::isGraphOwner() |
| { |
| @@ -226,12 +238,19 @@ void DeferredTaskHandler::contextWillBeDestroyed() |
| // Some handlers might live because of their cross thread tasks. |
| } |
| + |
| DeferredTaskHandler::AutoLocker::AutoLocker(AbstractAudioContext* context) |
| : m_handler(context->deferredTaskHandler()) |
| { |
| m_handler.lock(); |
| } |
| +DeferredTaskHandler::OfflineAutoLocker::OfflineAutoLocker(OfflineAudioContext* context) |
| + : m_handler(context->deferredTaskHandler()) |
| +{ |
| + m_handler.offlineLock(); |
| +} |
| + |
| void DeferredTaskHandler::addRenderingOrphanHandler(PassRefPtr<AudioHandler> handler) |
| { |
| ASSERT(handler); |