Chromium Code Reviews| Index: Source/modules/webaudio/AudioContext.cpp |
| diff --git a/Source/modules/webaudio/AudioContext.cpp b/Source/modules/webaudio/AudioContext.cpp |
| index b95baa9b5029229b3c05accae3cbd6c20fcef04b..6bce909b72c9001d9aebed2546f267483dd7ccba 100644 |
| --- a/Source/modules/webaudio/AudioContext.cpp |
| +++ b/Source/modules/webaudio/AudioContext.cpp |
| @@ -681,6 +681,12 @@ bool AudioContext::isGraphOwner() const |
| return currentThread() == m_graphOwnerThread; |
| } |
| +void AudioContext::addDeferredBreakConnection(AudioNode& node) |
| +{ |
| + ASSERT(isAudioThread()); |
| + m_deferredBreakConnectionList.append(&node); |
| +} |
| + |
| void AudioContext::addDeferredFinishDeref(AudioNode* node) |
| { |
| ASSERT(isAudioThread()); |
| @@ -715,8 +721,8 @@ void AudioContext::handlePostRenderTasks() |
| // from the render graph (in which case they'll render silence). |
| bool mustReleaseLock; |
| if (tryLock(mustReleaseLock)) { |
| - // Take care of finishing any derefs where the tryLock() failed previously. |
| - handleDeferredFinishDerefs(); |
| + // Take care of AudioNode tasks where the tryLock() failed previously. |
| + handleDeferredAudioNodeTasks(); |
| // Dynamically clean up nodes which are no longer needed. |
| derefFinishedSourceNodes(); |
| @@ -736,14 +742,18 @@ void AudioContext::handlePostRenderTasks() |
| } |
| } |
| -void AudioContext::handleDeferredFinishDerefs() |
| +void AudioContext::handleDeferredAudioNodeTasks() |
| { |
| ASSERT(isAudioThread() && isGraphOwner()); |
| + |
| + for (unsigned i = 0; i < m_deferredBreakConnectionList.size(); ++i) |
| + m_deferredBreakConnectionList[i]->breakConnectionWithLock(); |
| + m_deferredBreakConnectionList.clear(); |
| + |
| for (unsigned i = 0; i < m_deferredFinishDerefList.size(); ++i) { |
| AudioNode* node = m_deferredFinishDerefList[i]; |
|
sof
2014/07/14 19:09:26
style nit: if you want to use a consistent style i
tkent
2014/07/15 01:19:23
Done.
|
| node->finishDeref(); |
| } |
| - |
| m_deferredFinishDerefList.clear(); |
| } |