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

Side by Side Diff: Source/modules/webaudio/ScriptProcessorNode.cpp

Issue 670113002: Oilpan: A thread that is not attached to Oilpan shouldn't create a CrossThreadPersistent Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/CrossThreadTask.h ('k') | Source/platform/CrossThreadCopier.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 20 matching lines...) Expand all
31 #include "bindings/core/v8/ExceptionState.h" 31 #include "bindings/core/v8/ExceptionState.h"
32 #include "core/dom/CrossThreadTask.h" 32 #include "core/dom/CrossThreadTask.h"
33 #include "core/dom/ExecutionContext.h" 33 #include "core/dom/ExecutionContext.h"
34 #include "modules/webaudio/AudioBuffer.h" 34 #include "modules/webaudio/AudioBuffer.h"
35 #include "modules/webaudio/AudioContext.h" 35 #include "modules/webaudio/AudioContext.h"
36 #include "modules/webaudio/AudioNodeInput.h" 36 #include "modules/webaudio/AudioNodeInput.h"
37 #include "modules/webaudio/AudioNodeOutput.h" 37 #include "modules/webaudio/AudioNodeOutput.h"
38 #include "modules/webaudio/AudioProcessingEvent.h" 38 #include "modules/webaudio/AudioProcessingEvent.h"
39 #include "public/platform/Platform.h" 39 #include "public/platform/Platform.h"
40 #include "wtf/Float32Array.h" 40 #include "wtf/Float32Array.h"
41 #include "wtf/UnretainedPtr.h"
41 42
42 namespace blink { 43 namespace blink {
43 44
44 static size_t chooseBufferSize() 45 static size_t chooseBufferSize()
45 { 46 {
46 // Choose a buffer size based on the audio hardware buffer size. Arbitarily make it a power of 47 // Choose a buffer size based on the audio hardware buffer size. Arbitarily make it a power of
47 // two that is 4 times greater than the hardware buffer size. 48 // two that is 4 times greater than the hardware buffer size.
48 // FIXME: What is the best way to choose this? 49 // FIXME: What is the best way to choose this?
49 size_t hardwareBufferSize = Platform::current()->audioHardwareBufferSize(); 50 size_t hardwareBufferSize = Platform::current()->audioHardwareBufferSize();
50 size_t bufferSize = 1 << static_cast<unsigned>(log2(4 * hardwareBufferSize) + 0.5); 51 size_t bufferSize = 1 << static_cast<unsigned>(log2(4 * hardwareBufferSize) + 0.5);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 // This could be a problem if the main thread is very busy doing other t hings and is being held up handling previous requests. 224 // This could be a problem if the main thread is very busy doing other t hings and is being held up handling previous requests.
224 // The audio thread can't block on this lock, so we call tryLock() inste ad. 225 // The audio thread can't block on this lock, so we call tryLock() inste ad.
225 MutexTryLocker tryLocker(m_processEventLock); 226 MutexTryLocker tryLocker(m_processEventLock);
226 if (!tryLocker.locked()) { 227 if (!tryLocker.locked()) {
227 // We're late in handling the previous request. The main thread must be very busy. 228 // We're late in handling the previous request. The main thread must be very busy.
228 // The best we can do is clear out the buffer ourself here. 229 // The best we can do is clear out the buffer ourself here.
229 outputBuffer->zero(); 230 outputBuffer->zero();
230 } else if (context()->executionContext()) { 231 } else if (context()->executionContext()) {
231 // Fire the event on the main thread, not this one (which is the rea ltime audio thread). 232 // Fire the event on the main thread, not this one (which is the rea ltime audio thread).
232 m_doubleBufferIndexForEvent = m_doubleBufferIndex; 233 m_doubleBufferIndexForEvent = m_doubleBufferIndex;
233 context()->executionContext()->postTask(createCrossThreadTask(&Scrip tProcessorNode::fireProcessEvent, this)); 234 context()->executionContext()->postTask(createCrossThreadTask(&Scrip tProcessorNode::fireProcessEvent, UnretainedPtr<ScriptProcessorNode>(this)));
234 } 235 }
235 236
236 swapBuffers(); 237 swapBuffers();
237 } 238 }
238 } 239 }
239 240
240 void ScriptProcessorNode::fireProcessEvent() 241 void ScriptProcessorNode::fireProcessEvent()
241 { 242 {
242 ASSERT(isMainThread()); 243 ASSERT(isMainThread());
243 244
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 void ScriptProcessorNode::trace(Visitor* visitor) 304 void ScriptProcessorNode::trace(Visitor* visitor)
304 { 305 {
305 visitor->trace(m_inputBuffers); 306 visitor->trace(m_inputBuffers);
306 visitor->trace(m_outputBuffers); 307 visitor->trace(m_outputBuffers);
307 AudioNode::trace(visitor); 308 AudioNode::trace(visitor);
308 } 309 }
309 310
310 } // namespace blink 311 } // namespace blink
311 312
312 #endif // ENABLE(WEB_AUDIO) 313 #endif // ENABLE(WEB_AUDIO)
OLDNEW
« no previous file with comments | « Source/core/dom/CrossThreadTask.h ('k') | Source/platform/CrossThreadCopier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698