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

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

Issue 205173002: Move webaudio to oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed Created 6 years, 8 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/AudioNode.h
diff --git a/Source/modules/webaudio/AudioNode.h b/Source/modules/webaudio/AudioNode.h
index 5ebe221ee62803656bb0fb4e6301e83faf4d0502..a747aa94db853485d4240be6574a20d903f56b5d 100644
--- a/Source/modules/webaudio/AudioNode.h
+++ b/Source/modules/webaudio/AudioNode.h
@@ -50,7 +50,7 @@ class ExceptionState;
// An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware.
// Most processing nodes such as filters will have one input and one output, although multiple inputs and outputs are possible.
-class AudioNode : public ScriptWrappable, public EventTargetWithInlineData {
+class AudioNode : public NoBaseWillBeGarbageCollectedFinalized<AudioNode>, public ScriptWrappable, public EventTargetWithInlineData {
haraken 2014/04/08 06:02:08 Add a comment about why this doesn't need to be Re
keishi 2014/04/21 17:10:11 Done.
public:
enum { ProcessingSizeInFrames = 128 };
@@ -179,6 +179,12 @@ public:
virtual const AtomicString& interfaceName() const OVERRIDE FINAL;
virtual ExecutionContext* executionContext() const OVERRIDE FINAL;
+ virtual void trace(Visitor*);
+
+#if ENABLE(OILPAN)
+ void clearKeepAlive();
+#endif
+
protected:
// Inputs and outputs must be created before the AudioNode is initialized.
void addInput(PassOwnPtr<AudioNodeInput>);
@@ -195,11 +201,26 @@ protected:
private:
volatile bool m_isInitialized;
NodeType m_nodeType;
- RefPtr<AudioContext> m_context;
+ RefPtrWillBeMember<AudioContext> m_context;
float m_sampleRate;
Vector<OwnPtr<AudioNodeInput> > m_inputs;
Vector<OwnPtr<AudioNodeOutput> > m_outputs;
+#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.
haraken 2014/04/08 06:02:08 EventTarget is not yet on-heap, so this comment do
keishi 2014/04/21 17:10:11 Done.
+ //
+ // 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.
haraken 2014/04/08 06:02:08 I'd put this comment in clearKeepAlive() in the cp
keishi 2014/04/21 17:10:11 Done.
+ GC_PLUGIN_IGNORE("http://crbug.com/353083")
+ OwnPtr<Persistent<AudioNode> > m_keepAlive;
+#endif
+
double m_lastProcessingTime;
double m_lastNonSilentTime;

Powered by Google App Engine
This is Rietveld 408576698