Title: [119302] trunk/Source/WebCore
Revision
119302
Author
[email protected]
Date
2012-06-01 17:09:04 -0700 (Fri, 01 Jun 2012)

Log Message

Remove RefInfo class
https://bugs.webkit.org/show_bug.cgi?id=87904

Patch by Raymond Toy <[email protected]> on 2012-06-01
Reviewed by Chris Rogers.

No new tests; covered by existing tests.

* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::~AudioBufferSourceNode): Clear
panner node.
(WebCore::AudioBufferSourceNode::totalPitchRate):
(WebCore::AudioBufferSourceNode::setPannerNode): Use
RefTypeConnection counting for panner node.
(WebCore):
(WebCore::AudioBufferSourceNode::clearPannerNode): New function to
 clear panner node in AudioBufferSourceNode.
(WebCore::AudioBufferSourceNode::finish): Clear panner node when done.
* Modules/webaudio/AudioBufferSourceNode.h:
(AudioBufferSourceNode): Add virtual finish(), m_pannerNode is not
a RefPtr anymore.
* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::addDeferredFinishDeref): Remove unneeded RefTyp.
(WebCore::AudioContext::handleDeferredFinishDerefs): Remove
unneeded RefType.
* Modules/webaudio/AudioContext.h:
(AudioContext): Update addDeferredFinishDeref signature.
* Modules/webaudio/AudioNode.cpp:
(WebCore::AudioNode::deref): Update call to addDeferredFinishDeref.
* Modules/webaudio/AudioScheduledSourceNode.h:
(AudioScheduledSourceNode): Make finish() virtual.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (119301 => 119302)


--- trunk/Source/WebCore/ChangeLog	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/ChangeLog	2012-06-02 00:09:04 UTC (rev 119302)
@@ -1,3 +1,36 @@
+2012-06-01  Raymond Toy  <[email protected]>
+
+        Remove RefInfo class
+        https://bugs.webkit.org/show_bug.cgi?id=87904
+
+        Reviewed by Chris Rogers.
+
+        No new tests; covered by existing tests.
+
+        * Modules/webaudio/AudioBufferSourceNode.cpp:
+        (WebCore::AudioBufferSourceNode::~AudioBufferSourceNode): Clear
+        panner node.
+        (WebCore::AudioBufferSourceNode::totalPitchRate):
+        (WebCore::AudioBufferSourceNode::setPannerNode): Use
+        RefTypeConnection counting for panner node.
+        (WebCore):
+        (WebCore::AudioBufferSourceNode::clearPannerNode): New function to
+         clear panner node in AudioBufferSourceNode.
+        (WebCore::AudioBufferSourceNode::finish): Clear panner node when done.
+        * Modules/webaudio/AudioBufferSourceNode.h:
+        (AudioBufferSourceNode): Add virtual finish(), m_pannerNode is not
+        a RefPtr anymore.
+        * Modules/webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::addDeferredFinishDeref): Remove unneeded RefTyp.
+        (WebCore::AudioContext::handleDeferredFinishDerefs): Remove
+        unneeded RefType.
+        * Modules/webaudio/AudioContext.h:
+        (AudioContext): Update addDeferredFinishDeref signature.
+        * Modules/webaudio/AudioNode.cpp:
+        (WebCore::AudioNode::deref): Update call to addDeferredFinishDeref. 
+        * Modules/webaudio/AudioScheduledSourceNode.h:
+        (AudioScheduledSourceNode): Make finish() virtual.
+
 2012-06-01  Tony Chang  <[email protected]>
 
         rename -webkit-flex-pack and -webkit-flex-line-pack to -webkit-justify-content and -webkit-align-content

Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp	2012-06-02 00:09:04 UTC (rev 119302)
@@ -78,6 +78,7 @@
 
 AudioBufferSourceNode::~AudioBufferSourceNode()
 {
+    clearPannerNode();
     uninitialize();
 }
 
@@ -385,7 +386,7 @@
 double AudioBufferSourceNode::totalPitchRate()
 {
     double dopplerRate = 1.0;
-    if (m_pannerNode.get())
+    if (m_pannerNode)
         dopplerRate = m_pannerNode->dopplerRate();
     
     // Incorporate buffer's sample-rate versus AudioContext's sample-rate.
@@ -439,6 +440,33 @@
     return !isPlayingOrScheduled() || hasFinished() || !m_buffer;
 }
 
+void AudioBufferSourceNode::setPannerNode(AudioPannerNode* pannerNode)
+{
+    if (m_pannerNode != pannerNode && !hasFinished()) {
+        if (pannerNode)
+            pannerNode->ref(AudioNode::RefTypeConnection);
+        if (m_pannerNode)
+            m_pannerNode->deref(AudioNode::RefTypeConnection);
+
+        m_pannerNode = pannerNode;
+    }
+}
+
+void AudioBufferSourceNode::clearPannerNode()
+{
+    if (m_pannerNode) {
+        m_pannerNode->deref(AudioNode::RefTypeConnection);
+        m_pannerNode = 0;
+    }
+}
+
+void AudioBufferSourceNode::finish()
+{
+    clearPannerNode();
+    ASSERT(!m_pannerNode);
+    AudioScheduledSourceNode::finish();
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h	2012-06-02 00:09:04 UTC (rev 119302)
@@ -79,11 +79,15 @@
     AudioParam* playbackRate() { return m_playbackRate.get(); }
 
     // If a panner node is set, then we can incorporate doppler shift into the playback pitch rate.
-    void setPannerNode(PassRefPtr<AudioPannerNode> pannerNode) { m_pannerNode = pannerNode; }
+    void setPannerNode(AudioPannerNode*);
+    void clearPannerNode();
 
     // If we are no longer playing, propogate silence ahead to downstream nodes.
     virtual bool propagatesSilence() const;
 
+    // AudioScheduledSourceNode
+    virtual void finish() OVERRIDE;
+
 private:
     AudioBufferSourceNode(AudioContext*, float sampleRate);
 
@@ -123,8 +127,9 @@
     // m_lastGain provides continuity when we dynamically adjust the gain.
     float m_lastGain;
     
-    // We optionally keep track of a panner node which has a doppler shift that is incorporated into the pitch rate.
-    RefPtr<AudioPannerNode> m_pannerNode;
+    // We optionally keep track of a panner node which has a doppler shift that is incorporated into
+    // the pitch rate. We manually manage ref-counting because we want to use RefTypeConnection.
+    AudioPannerNode* m_pannerNode;
 
     // This synchronizes process() with setBuffer() which can cause dynamic channel count changes.
     mutable Mutex m_processLock;

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2012-06-02 00:09:04 UTC (rev 119302)
@@ -659,10 +659,10 @@
     return currentThread() == m_graphOwnerThread;
 }
 
-void AudioContext::addDeferredFinishDeref(AudioNode* node, AudioNode::RefType refType)
+void AudioContext::addDeferredFinishDeref(AudioNode* node)
 {
     ASSERT(isAudioThread());
-    m_deferredFinishDerefList.append(AudioContext::RefInfo(node, refType));
+    m_deferredFinishDerefList.append(node);
 }
 
 void AudioContext::handlePreRenderTasks()
@@ -718,9 +718,8 @@
 {
     ASSERT(isAudioThread() && isGraphOwner());
     for (unsigned i = 0; i < m_deferredFinishDerefList.size(); ++i) {
-        AudioNode* node = m_deferredFinishDerefList[i].m_node;
-        AudioNode::RefType refType = m_deferredFinishDerefList[i].m_refType;
-        node->finishDeref(refType);
+        AudioNode* node = m_deferredFinishDerefList[i];
+        node->finishDeref(AudioNode::RefTypeConnection);
     }
     
     m_deferredFinishDerefList.clear();

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h	2012-06-02 00:09:04 UTC (rev 119302)
@@ -213,7 +213,7 @@
     };
     
     // In AudioNode::deref() a tryLock() is used for calling finishDeref(), but if it fails keep track here.
-    void addDeferredFinishDeref(AudioNode*, AudioNode::RefType);
+    void addDeferredFinishDeref(AudioNode*);
 
     // In the audio thread at the start of each render cycle, we'll call handleDeferredFinishDerefs().
     void handleDeferredFinishDerefs();
@@ -308,19 +308,8 @@
     volatile ThreadIdentifier m_audioThread;
     volatile ThreadIdentifier m_graphOwnerThread; // if the lock is held then this is the thread which owns it, otherwise == UndefinedThreadIdentifier
     
-    // Deferred de-referencing.
-    struct RefInfo {
-        RefInfo(AudioNode* node, AudioNode::RefType refType)
-            : m_node(node)
-            , m_refType(refType)
-        {
-        }
-        AudioNode* m_node;
-        AudioNode::RefType m_refType;
-    };    
-
     // Only accessed in the audio thread.
-    Vector<RefInfo> m_deferredFinishDerefList;
+    Vector<AudioNode*> m_deferredFinishDerefList;
     
     // HRTF Database loader
     RefPtr<HRTFDatabaseLoader> m_hrtfDatabaseLoader;

Modified: trunk/Source/WebCore/Modules/webaudio/AudioNode.cpp (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioNode.cpp	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioNode.cpp	2012-06-02 00:09:04 UTC (rev 119302)
@@ -350,7 +350,8 @@
     } else {
         // We were unable to get the lock, so put this in a list to finish up later.
         ASSERT(context()->isAudioThread());
-        context()->addDeferredFinishDeref(this, refType);
+        ASSERT(refType == RefTypeConnection);
+        context()->addDeferredFinishDeref(this);
     }
 
     // Once AudioContext::uninitialize() is called there's no more chances for deleteMarkedNodes() to get called, so we call here.

Modified: trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h (119301 => 119302)


--- trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h	2012-06-01 23:54:36 UTC (rev 119301)
+++ trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h	2012-06-02 00:09:04 UTC (rev 119302)
@@ -78,7 +78,7 @@
                               size_t& nonSilentFramesToProcess);
 
     // Called when we have no more sound to play or the noteOff() time has been reached.
-    void finish();
+    virtual void finish();
 
     PlaybackState m_playbackState;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to