Index: Source/modules/webaudio/AudioNode.h |
diff --git a/Source/modules/webaudio/AudioNode.h b/Source/modules/webaudio/AudioNode.h |
index 5ebe221ee62803656bb0fb4e6301e83faf4d0502..b7fc5b9a301dabffad797bf98428449db93fc578 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 GarbageCollectedFinalized<AudioNode>, public ScriptWrappable, public EventTargetWithInlineData { |
Mads Ager (chromium)
2014/03/20 08:30:00
We don't want to move this into the oilpan heap wh
keishi
2014/03/27 07:39:37
Done.
|
public: |
enum { ProcessingSizeInFrames = 128 }; |
@@ -179,6 +179,10 @@ public: |
virtual const AtomicString& interfaceName() const OVERRIDE FINAL; |
virtual ExecutionContext* executionContext() const OVERRIDE FINAL; |
+ virtual void trace(Visitor*); |
+ |
+ void clearKeepAlive(); |
+ |
protected: |
// Inputs and outputs must be created before the AudioNode is initialized. |
void addInput(PassOwnPtr<AudioNodeInput>); |
@@ -195,11 +199,23 @@ 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; |
+ // 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/03/20 08:30:00
This should be guarded with #if ENABLE(OILPAN)
|
+ |
double m_lastProcessingTime; |
double m_lastNonSilentTime; |