| Index: Source/modules/webaudio/AudioNode.h
|
| diff --git a/Source/modules/webaudio/AudioNode.h b/Source/modules/webaudio/AudioNode.h
|
| index 5ebe221ee62803656bb0fb4e6301e83faf4d0502..631514e263ad2a0753de7acc42be1451b3921a00 100644
|
| --- a/Source/modules/webaudio/AudioNode.h
|
| +++ b/Source/modules/webaudio/AudioNode.h
|
| @@ -50,7 +50,8 @@ 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 {
|
| +// AudioNode has its own ref-counting mechanism that use RefTypes so we cannot use RefCountedGarbageCollected.
|
| +class AudioNode : public NoBaseWillBeGarbageCollectedFinalized<AudioNode>, public ScriptWrappable, public EventTargetWithInlineData {
|
| public:
|
| enum { ProcessingSizeInFrames = 128 };
|
|
|
| @@ -179,6 +180,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 +202,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;
|
|
|
| +#if ENABLE(OILPAN)
|
| + // AudioNodes are in the oilpan heap but they are still reference counted at
|
| + // the same time. This is because we are not allowed to stop the audio
|
| + // thread and thus the audio thread cannot allocate objects in the oilpan
|
| + // heap.
|
| + // The m_keepAlive handle is used to keep a persistent reference to this
|
| + // AudioNode while someone has a reference to this AudioNode through a
|
| + // RefPtr.
|
| + GC_PLUGIN_IGNORE("http://crbug.com/353083")
|
| + OwnPtr<Persistent<AudioNode> > m_keepAlive;
|
| +#endif
|
| +
|
| double m_lastProcessingTime;
|
| double m_lastNonSilentTime;
|
|
|
|
|