Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(951)

Unified Diff: third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.cpp

Issue 1405413004: Implement suspend() and resume() for OfflineAudioContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing feedback Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698