Index: Source/modules/webaudio/ScriptProcessorNode.cpp |
diff --git a/Source/modules/webaudio/ScriptProcessorNode.cpp b/Source/modules/webaudio/ScriptProcessorNode.cpp |
index e7fa915e8ab8d17e0fff06f863b0623ef0fc5f0b..2abe051793a903591880b12cad7f4f5c3dab29b8 100644 |
--- a/Source/modules/webaudio/ScriptProcessorNode.cpp |
+++ b/Source/modules/webaudio/ScriptProcessorNode.cpp |
@@ -56,7 +56,7 @@ static size_t chooseBufferSize() |
return bufferSize; |
} |
-PassRefPtr<ScriptProcessorNode> ScriptProcessorNode::create(AudioContext* context, float sampleRate, size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfOutputChannels) |
+PassRefPtrWillBeRawPtr<ScriptProcessorNode> ScriptProcessorNode::create(AudioContext* context, float sampleRate, size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfOutputChannels) |
{ |
// Check for valid buffer size. |
switch (bufferSize) { |
@@ -84,7 +84,7 @@ PassRefPtr<ScriptProcessorNode> ScriptProcessorNode::create(AudioContext* contex |
if (numberOfOutputChannels > AudioContext::maxNumberOfChannels()) |
return nullptr; |
- return adoptRef(new ScriptProcessorNode(context, sampleRate, bufferSize, numberOfInputChannels, numberOfOutputChannels)); |
+ return adoptRefWillBeRefCountedGarbageCollected(new ScriptProcessorNode(context, sampleRate, bufferSize, numberOfInputChannels, numberOfOutputChannels)); |
} |
ScriptProcessorNode::ScriptProcessorNode(AudioContext* context, float sampleRate, size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfOutputChannels) |
@@ -96,6 +96,9 @@ ScriptProcessorNode::ScriptProcessorNode(AudioContext* context, float sampleRate |
, m_numberOfInputChannels(numberOfInputChannels) |
, m_numberOfOutputChannels(numberOfOutputChannels) |
, m_internalInputBus(AudioBus::create(numberOfInputChannels, AudioNode::ProcessingSizeInFrames, false)) |
+#if ENABLE(OILPAN) |
+ , m_keepAlive(adoptPtr(new Persistent<AudioNode>(this))) |
+#endif |
{ |
ScriptWrappable::init(this); |
// Regardless of the allowed buffer sizes, we still need to process at the granularity of the AudioNode. |
@@ -127,8 +130,8 @@ void ScriptProcessorNode::initialize() |
// Create double buffers on both the input and output sides. |
// These AudioBuffers will be directly accessed in the main thread by JavaScript. |
for (unsigned i = 0; i < 2; ++i) { |
- RefPtr<AudioBuffer> inputBuffer = m_numberOfInputChannels ? AudioBuffer::create(m_numberOfInputChannels, bufferSize(), sampleRate) : nullptr; |
- RefPtr<AudioBuffer> outputBuffer = m_numberOfOutputChannels ? AudioBuffer::create(m_numberOfOutputChannels, bufferSize(), sampleRate) : nullptr; |
+ RefPtrWillBeRawPtr<AudioBuffer> inputBuffer = m_numberOfInputChannels ? AudioBuffer::create(m_numberOfInputChannels, bufferSize(), sampleRate) : nullptr; |
+ RefPtrWillBeRawPtr<AudioBuffer> outputBuffer = m_numberOfOutputChannels ? AudioBuffer::create(m_numberOfOutputChannels, bufferSize(), sampleRate) : nullptr; |
m_inputBuffers.append(inputBuffer); |
m_outputBuffers.append(outputBuffer); |
@@ -280,6 +283,21 @@ double ScriptProcessorNode::latencyTime() const |
return std::numeric_limits<double>::infinity(); |
} |
+#if ENABLE(OILPAN) |
+void ScriptProcessorNode::clearKeepAlive() |
+{ |
+ ASSERT(m_keepAlive); |
+ m_keepAlive = nullptr; |
+} |
+#endif |
+ |
+void ScriptProcessorNode::trace(Visitor* visitor) |
+{ |
+ visitor->trace(m_inputBuffers); |
+ visitor->trace(m_outputBuffers); |
+ AudioNode::trace(visitor); |
+} |
+ |
} // namespace WebCore |
#endif // ENABLE(WEB_AUDIO) |