OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010, Google Inc. All rights reserved. | 2 * Copyright (C) 2010, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 } | 162 } |
163 } | 163 } |
164 | 164 |
165 void DeferredTaskHandler::ProcessAutomaticPullNodes(size_t frames_to_process) { | 165 void DeferredTaskHandler::ProcessAutomaticPullNodes(size_t frames_to_process) { |
166 DCHECK(IsAudioThread()); | 166 DCHECK(IsAudioThread()); |
167 | 167 |
168 for (unsigned i = 0; i < rendering_automatic_pull_nodes_.size(); ++i) | 168 for (unsigned i = 0; i < rendering_automatic_pull_nodes_.size(); ++i) |
169 rendering_automatic_pull_nodes_[i]->ProcessIfNecessary(frames_to_process); | 169 rendering_automatic_pull_nodes_[i]->ProcessIfNecessary(frames_to_process); |
170 } | 170 } |
171 | 171 |
| 172 void DeferredTaskHandler::AddTailProcessingNode(PassRefPtr<AudioHandler> node) { |
| 173 DCHECK(IsGraphOwner()); |
| 174 |
| 175 if (!tail_processing_nodes_.Contains(node)) { |
| 176 #if DEBUG_AUDIONODE_REFERENCES > 1 |
| 177 node->AddTailProcessingDebug(); |
| 178 #endif |
| 179 tail_processing_nodes_.push_back(std::move(node)); |
| 180 } |
| 181 } |
| 182 |
| 183 void DeferredTaskHandler::RemoveTailProcessingNode( |
| 184 PassRefPtr<AudioHandler> node) { |
| 185 DCHECK(IsGraphOwner()); |
| 186 |
| 187 size_t index = tail_processing_nodes_.Find(node); |
| 188 if (index != kNotFound) { |
| 189 #if DEBUG_AUDIONODE_REFERENCES > 1 |
| 190 node->RemoveTailProcessingDebug(); |
| 191 #endif |
| 192 node->ReallyDisableOutputs(); |
| 193 tail_processing_nodes_.erase(index); |
| 194 } |
| 195 } |
| 196 |
| 197 void DeferredTaskHandler::UpdateTailProcessingNodes() { |
| 198 DCHECK(IsAudioThread()); |
| 199 |
| 200 for (unsigned k = tail_processing_nodes_.size(); k > 0; --k) { |
| 201 RefPtr<AudioHandler> node = tail_processing_nodes_[k - 1]; |
| 202 if (node->PropagatesSilence()) { |
| 203 #if DEBUG_AUDIONODE_REFERENCES |
| 204 fprintf(stderr, "[%16p]: %16p: %2d: updateTail @%.15g\n", node->Context(), |
| 205 node.Get(), node->GetNodeType(), node->Context()->currentTime()); |
| 206 #endif |
| 207 RemoveTailProcessingNode(node); |
| 208 } |
| 209 } |
| 210 } |
| 211 |
172 void DeferredTaskHandler::AddChangedChannelCountMode(AudioHandler* node) { | 212 void DeferredTaskHandler::AddChangedChannelCountMode(AudioHandler* node) { |
173 DCHECK(IsGraphOwner()); | 213 DCHECK(IsGraphOwner()); |
174 DCHECK(IsMainThread()); | 214 DCHECK(IsMainThread()); |
175 deferred_count_mode_change_.insert(node); | 215 deferred_count_mode_change_.insert(node); |
176 } | 216 } |
177 | 217 |
178 void DeferredTaskHandler::RemoveChangedChannelCountMode(AudioHandler* node) { | 218 void DeferredTaskHandler::RemoveChangedChannelCountMode(AudioHandler* node) { |
179 DCHECK(IsGraphOwner()); | 219 DCHECK(IsGraphOwner()); |
180 | 220 |
181 deferred_count_mode_change_.erase(node); | 221 deferred_count_mode_change_.erase(node); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 rendering_automatic_pull_nodes_.resize(automatic_pull_nodes_.size()); | 263 rendering_automatic_pull_nodes_.resize(automatic_pull_nodes_.size()); |
224 DCHECK(!rendering_automatic_pull_nodes_.size()); | 264 DCHECK(!rendering_automatic_pull_nodes_.size()); |
225 } | 265 } |
226 | 266 |
227 void DeferredTaskHandler::HandleDeferredTasks() { | 267 void DeferredTaskHandler::HandleDeferredTasks() { |
228 UpdateChangedChannelCountMode(); | 268 UpdateChangedChannelCountMode(); |
229 UpdateChangedChannelInterpretation(); | 269 UpdateChangedChannelInterpretation(); |
230 HandleDirtyAudioSummingJunctions(); | 270 HandleDirtyAudioSummingJunctions(); |
231 HandleDirtyAudioNodeOutputs(); | 271 HandleDirtyAudioNodeOutputs(); |
232 UpdateAutomaticPullNodes(); | 272 UpdateAutomaticPullNodes(); |
| 273 UpdateTailProcessingNodes(); |
233 } | 274 } |
234 | 275 |
235 void DeferredTaskHandler::ContextWillBeDestroyed() { | 276 void DeferredTaskHandler::ContextWillBeDestroyed() { |
236 for (auto& handler : rendering_orphan_handlers_) | 277 for (auto& handler : rendering_orphan_handlers_) |
237 handler->ClearContext(); | 278 handler->ClearContext(); |
238 for (auto& handler : deletable_orphan_handlers_) | 279 for (auto& handler : deletable_orphan_handlers_) |
239 handler->ClearContext(); | 280 handler->ClearContext(); |
240 ClearHandlersToBeDeleted(); | 281 ClearHandlersToBeDeleted(); |
241 // Some handlers might live because of their cross thread tasks. | 282 // Some handlers might live because of their cross thread tasks. |
242 } | 283 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 deletable_orphan_handlers_.clear(); | 326 deletable_orphan_handlers_.clear(); |
286 } | 327 } |
287 | 328 |
288 void DeferredTaskHandler::SetAudioThreadToCurrentThread() { | 329 void DeferredTaskHandler::SetAudioThreadToCurrentThread() { |
289 DCHECK(!IsMainThread()); | 330 DCHECK(!IsMainThread()); |
290 ThreadIdentifier thread = CurrentThread(); | 331 ThreadIdentifier thread = CurrentThread(); |
291 ReleaseStore(&audio_thread_, thread); | 332 ReleaseStore(&audio_thread_, thread); |
292 } | 333 } |
293 | 334 |
294 } // namespace blink | 335 } // namespace blink |
OLD | NEW |