Index: third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h |
diff --git a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h |
index 94dfd95ce2684a8d16f1956213ceb6e2c0fbe493..23b48c585d8b8a99707764c280be077c2f2ce3f2 100644 |
--- a/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h |
+++ b/third_party/WebKit/Source/modules/webaudio/DeferredTaskHandler.h |
@@ -105,6 +105,14 @@ class MODULES_EXPORT DeferredTaskHandler final |
void RequestToDeleteHandlersOnMainThread(); |
void ClearHandlersToBeDeleted(); |
+ // If |node| requires tail processing, add it to the list of tail |
+ // nodes so the tail is processed. |
+ void AddTailProcessingNode(PassRefPtr<AudioHandler> node); |
+ |
+ // Remove |node| from the list of tail nodes (because the tail |
+ // processing is complete). |
+ void RemoveTailProcessingNode(PassRefPtr<AudioHandler> node); |
+ |
// |
// Thread Safety and Graph Locking: |
// |
@@ -171,6 +179,10 @@ class MODULES_EXPORT DeferredTaskHandler final |
void HandleDirtyAudioNodeOutputs(); |
void DeleteHandlersOnMainThread(); |
+ // Check tail processing nodes and remove any node if the tail has |
+ // been processed. |
+ void UpdateTailProcessingNodes(); |
+ |
// For the sake of thread safety, we maintain a seperate Vector of automatic |
// pull nodes for rendering in m_renderingAutomaticPullNodes. It will be |
// copied from m_automaticPullNodes by updateAutomaticPullNodes() at the |
@@ -199,6 +211,9 @@ class MODULES_EXPORT DeferredTaskHandler final |
Vector<RefPtr<AudioHandler>> rendering_orphan_handlers_; |
Vector<RefPtr<AudioHandler>> deletable_orphan_handlers_; |
+ // Nodes that are processing its tail. |
+ Vector<RefPtr<AudioHandler>> tail_processing_nodes_; |
+ |
// Graph locking. |
RecursiveMutex context_graph_mutex_; |
volatile ThreadIdentifier audio_thread_; |