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

Unified Diff: Source/modules/webaudio/ScriptProcessorNode.h

Issue 205173002: Move webaudio to oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: WIP Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: Source/modules/webaudio/ScriptProcessorNode.h
diff --git a/Source/modules/webaudio/ScriptProcessorNode.h b/Source/modules/webaudio/ScriptProcessorNode.h
index 08a187df65576382d6bb8b5c43f893d02af020f8..d6afb822bb1db12374e67e0898bd81f23416f48b 100644
--- a/Source/modules/webaudio/ScriptProcessorNode.h
+++ b/Source/modules/webaudio/ScriptProcessorNode.h
@@ -50,7 +50,7 @@ public:
// This value controls how frequently the onaudioprocess event handler is called and how many sample-frames need to be processed each call.
// Lower numbers for bufferSize will result in a lower (better) latency. Higher numbers will be necessary to avoid audio breakup and glitches.
// The value chosen must carefully balance between latency and audio quality.
- static PassRefPtr<ScriptProcessorNode> create(AudioContext*, float sampleRate, size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfOutputChannels);
+ static PassRefPtrWillBeRawPtr<ScriptProcessorNode> create(AudioContext*, float sampleRate, size_t bufferSize, unsigned numberOfInputChannels, unsigned numberOfOutputChannels);
virtual ~ScriptProcessorNode();
@@ -63,6 +63,11 @@ public:
DEFINE_ATTRIBUTE_EVENT_LISTENER(audioprocess);
+#if ENABLE(OILPAN)
+ virtual void clearKeepAlive() OVERRIDE;
+#endif
+
+ void trace(Visitor*);
private:
virtual double tailTime() const OVERRIDE;
@@ -78,8 +83,8 @@ private:
void swapBuffers() { m_doubleBufferIndex = 1 - m_doubleBufferIndex; }
unsigned m_doubleBufferIndex;
unsigned m_doubleBufferIndexForEvent;
- Vector<RefPtr<AudioBuffer> > m_inputBuffers;
- Vector<RefPtr<AudioBuffer> > m_outputBuffers;
+ WillBeHeapVector<RefPtrWillBeMember<AudioBuffer> > m_inputBuffers;
+ WillBeHeapVector<RefPtrWillBeMember<AudioBuffer> > m_outputBuffers;
size_t m_bufferSize;
unsigned m_bufferReadWriteIndex;
@@ -91,6 +96,20 @@ private:
// Synchronize process() with fireProcessEvent().
mutable Mutex m_processEventLock;
+
+#if ENABLE(OILPAN)
+ // AudioNodes are still reference counted but they are in the
+ // oilpan heap because the ScriptProcessorNode is an EventTarget.
+ // This self-persistent keeps the object from being deleted
+ // until the reference count reaches zero.
+ //
+ // It is safe to drop the self-persistent when the ref count
+ // of a ScriptProcessorNode reaches zero. At that point, the
+ // ScriptProcessor node is removed from the AudioContext and
+ // it cannot be reattached. Therefore, the reference count
+ // will not go above zero again.
+ OwnPtr<Persistent<AudioNode> > m_keepAlive;
Mads Ager (chromium) 2014/04/03 08:39:33 This has to be in AudioNode. When the ref count in
keishi 2014/04/08 02:33:40 Done.
+#endif
};
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698