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

Side by Side Diff: Source/modules/webaudio/AudioNode.h

Issue 438293003: Enable Oilpan by default for webaudio/ (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/modules/webaudio/AudioListener.idl ('k') | Source/modules/webaudio/AudioNode.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010, Google Inc. All rights reserved. 2 * Copyright (C) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 class AudioNodeOutput; 42 class AudioNodeOutput;
43 class AudioParam; 43 class AudioParam;
44 class ExceptionState; 44 class ExceptionState;
45 45
46 // An AudioNode is the basic building block for handling audio within an AudioCo ntext. 46 // An AudioNode is the basic building block for handling audio within an AudioCo ntext.
47 // It may be an audio source, an intermediate processing module, or an audio des tination. 47 // It may be an audio source, an intermediate processing module, or an audio des tination.
48 // Each AudioNode can have inputs and/or outputs. An AudioSourceNode has no inpu ts and a single output. 48 // Each AudioNode can have inputs and/or outputs. An AudioSourceNode has no inpu ts and a single output.
49 // An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware. 49 // An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware.
50 // Most processing nodes such as filters will have one input and one output, alt hough multiple inputs and outputs are possible. 50 // Most processing nodes such as filters will have one input and one output, alt hough multiple inputs and outputs are possible.
51 51
52 // AudioNode has its own ref-counting mechanism that use RefTypes so we cannot u se RefCountedGarbageCollected. 52 class AudioNode : public RefCountedGarbageCollectedWillBeGarbageCollectedFinaliz ed<AudioNode>, public EventTargetWithInlineData {
53 class AudioNode : public NoBaseWillBeGarbageCollectedFinalized<AudioNode>, publi c EventTargetWithInlineData { 53 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<A udioNode>);
54 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(AudioNode); 54 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(AudioNode);
55 public: 55 public:
56 enum { ProcessingSizeInFrames = 128 }; 56 enum { ProcessingSizeInFrames = 128 };
57 57
58 AudioNode(AudioContext*, float sampleRate); 58 AudioNode(AudioContext*, float sampleRate);
59 virtual ~AudioNode(); 59 virtual ~AudioNode();
60 // dispose() is called just before the destructor. This must be called in 60 // dispose() is called just before the destructor. This must be called in
61 // the main thread, and while the graph lock is held. 61 // the main thread, and while the graph lock is held.
62 virtual void dispose(); 62 virtual void dispose();
63 static unsigned instanceCount() { return s_instanceCount; } 63 static unsigned instanceCount() { return s_instanceCount; }
(...skipping 26 matching lines...) Expand all
90 enum ChannelCountMode { 90 enum ChannelCountMode {
91 Max, 91 Max,
92 ClampedMax, 92 ClampedMax,
93 Explicit 93 Explicit
94 }; 94 };
95 95
96 NodeType nodeType() const { return m_nodeType; } 96 NodeType nodeType() const { return m_nodeType; }
97 String nodeTypeName() const; 97 String nodeTypeName() const;
98 void setNodeType(NodeType); 98 void setNodeType(NodeType);
99 99
100 #if !ENABLE(OILPAN)
101 // Can be called from main thread or context's audio thread.
102 void ref();
103 void deref();
104 #endif
105
106 // This object has been connected to another object. This might have 100 // This object has been connected to another object. This might have
107 // existing connections from others. 101 // existing connections from others.
108 // This function must be called after acquiring a connection reference. 102 // This function must be called after acquiring a connection reference.
109 void makeConnection(); 103 void makeConnection();
110 // This object will be disconnected from another object. This might have 104 // This object will be disconnected from another object. This might have
111 // remaining connections from others. 105 // remaining connections from others.
112 // This function must be called before releasing a connection reference. 106 // This function must be called before releasing a connection reference.
113 void breakConnection(); 107 void breakConnection();
114 108
115 // Can be called from main thread or context's audio thread. It must be cal led while the context's graph lock is held. 109 // Can be called from main thread or context's audio thread. It must be cal led while the context's graph lock is held.
116 #if !ENABLE(OILPAN)
117 void finishDeref();
118 #endif
119 void breakConnectionWithLock(); 110 void breakConnectionWithLock();
120 111
121 // The AudioNodeInput(s) (if any) will already have their input data availab le when process() is called. 112 // The AudioNodeInput(s) (if any) will already have their input data availab le when process() is called.
122 // Subclasses will take this input data and put the results in the AudioBus( s) of its AudioNodeOutput(s) (if any). 113 // Subclasses will take this input data and put the results in the AudioBus( s) of its AudioNodeOutput(s) (if any).
123 // Called from context's audio thread. 114 // Called from context's audio thread.
124 virtual void process(size_t framesToProcess) = 0; 115 virtual void process(size_t framesToProcess) = 0;
125 116
126 // No significant resources should be allocated until initialize() is called . 117 // No significant resources should be allocated until initialize() is called .
127 // Processing may not occur until a node is initialized. 118 // Processing may not occur until a node is initialized.
128 virtual void initialize(); 119 virtual void initialize();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 182
192 // EventTarget 183 // EventTarget
193 virtual const AtomicString& interfaceName() const OVERRIDE FINAL; 184 virtual const AtomicString& interfaceName() const OVERRIDE FINAL;
194 virtual ExecutionContext* executionContext() const OVERRIDE FINAL; 185 virtual ExecutionContext* executionContext() const OVERRIDE FINAL;
195 186
196 virtual void trace(Visitor*) OVERRIDE; 187 virtual void trace(Visitor*) OVERRIDE;
197 188
198 protected: 189 protected:
199 // Inputs and outputs must be created before the AudioNode is initialized. 190 // Inputs and outputs must be created before the AudioNode is initialized.
200 void addInput(); 191 void addInput();
201 void addOutput(PassOwnPtrWillBeRawPtr<AudioNodeOutput>); 192 void addOutput(AudioNodeOutput*);
202 193
203 // Called by processIfNecessary() to cause all parts of the rendering graph connected to us to process. 194 // Called by processIfNecessary() to cause all parts of the rendering graph connected to us to process.
204 // Each rendering quantum, the audio data for each of the AudioNode's inputs will be available after this method is called. 195 // Each rendering quantum, the audio data for each of the AudioNode's inputs will be available after this method is called.
205 // Called from context's audio thread. 196 // Called from context's audio thread.
206 virtual void pullInputs(size_t framesToProcess); 197 virtual void pullInputs(size_t framesToProcess);
207 198
208 // Force all inputs to take any channel interpretation changes into account. 199 // Force all inputs to take any channel interpretation changes into account.
209 void updateChannelsForInputs(); 200 void updateChannelsForInputs();
210 201
211 private: 202 private:
212 volatile bool m_isInitialized; 203 volatile bool m_isInitialized;
213 NodeType m_nodeType; 204 NodeType m_nodeType;
214 RefPtrWillBeMember<AudioContext> m_context; 205 Member<AudioContext> m_context;
215 float m_sampleRate; 206 float m_sampleRate;
216 WillBeHeapVector<OwnPtrWillBeMember<AudioNodeInput> > m_inputs; 207 HeapVector<Member<AudioNodeInput> > m_inputs;
217 WillBeHeapVector<OwnPtrWillBeMember<AudioNodeOutput> > m_outputs; 208 HeapVector<Member<AudioNodeOutput> > m_outputs;
218 209
219 double m_lastProcessingTime; 210 double m_lastProcessingTime;
220 double m_lastNonSilentTime; 211 double m_lastNonSilentTime;
221 212
222 #if !ENABLE(OILPAN)
223 // Ref-counting
224 volatile int m_normalRefCount;
225 #endif
226 volatile int m_connectionRefCount; 213 volatile int m_connectionRefCount;
227 214
228 bool m_isDisabled; 215 bool m_isDisabled;
229 bool m_isDisposeCalled; 216 bool m_isDisposeCalled;
230 217
231 #if DEBUG_AUDIONODE_REFERENCES 218 #if DEBUG_AUDIONODE_REFERENCES
232 static bool s_isNodeCountInitialized; 219 static bool s_isNodeCountInitialized;
233 static int s_nodeCount[NodeTypeEnd]; 220 static int s_nodeCount[NodeTypeEnd];
234 #endif 221 #endif
235 static unsigned s_instanceCount; 222 static unsigned s_instanceCount;
236 223
237 #if !ENABLE(OILPAN)
238 virtual void refEventTarget() OVERRIDE FINAL { ref(); }
239 virtual void derefEventTarget() OVERRIDE FINAL { deref(); }
240 #endif
241
242 protected: 224 protected:
243 unsigned m_channelCount; 225 unsigned m_channelCount;
244 ChannelCountMode m_channelCountMode; 226 ChannelCountMode m_channelCountMode;
245 AudioBus::ChannelInterpretation m_channelInterpretation; 227 AudioBus::ChannelInterpretation m_channelInterpretation;
246 }; 228 };
247 229
248 } // namespace blink 230 } // namespace blink
249 231
250 #endif // AudioNode_h 232 #endif // AudioNode_h
OLDNEW
« no previous file with comments | « Source/modules/webaudio/AudioListener.idl ('k') | Source/modules/webaudio/AudioNode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698