AudioContext is not correctly accounting for hardware resources
authorcrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Jul 2011 00:15:37 +0000 (00:15 +0000)
committercrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Jul 2011 00:15:37 +0000 (00:15 +0000)
https://bugs.webkit.org/show_bug.cgi?id=65217

Reviewed by Kenneth Russell.

No new tests since audio API is not yet implemented.

* webaudio/AudioContext.cpp:
(WebCore::AudioContext::create):
(WebCore::AudioContext::AudioContext):
(WebCore::AudioContext::lazyInitialize):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@91801 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/webaudio/AudioContext.cpp

index 72261ef..86121bf 100644 (file)
@@ -1,3 +1,17 @@
+2011-07-26  Chris Rogers  <crogers@google.com>
+
+        AudioContext is not correctly accounting for hardware resources
+        https://bugs.webkit.org/show_bug.cgi?id=65217
+
+        Reviewed by Kenneth Russell.
+
+        No new tests since audio API is not yet implemented.
+
+        * webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::create):
+        (WebCore::AudioContext::AudioContext):
+        (WebCore::AudioContext::lazyInitialize):
+
 2011-07-26  Luke Macpherson   <macpherson@chromium.org>
 
         Handle CSS Properties that can be either auto or a primitive value in CSSStyleApplyProperty
index 4bb88dc..567149f 100644 (file)
@@ -93,8 +93,6 @@ PassRefPtr<AudioContext> AudioContext::create(Document* document)
     ASSERT(isMainThread());
     if (s_hardwareContextCount >= MaxHardwareContexts)
         return 0;
-
-    ++s_hardwareContextCount;
         
     return adoptRef(new AudioContext(document));
 }
@@ -135,10 +133,6 @@ AudioContext::AudioContext(Document* document)
     // It's not that useful to have a callback function for this since the audio thread automatically starts rendering on the graph
     // when this has finished (see AudioDestinationNode).
     m_hrtfDatabaseLoader = HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary(sampleRate());
-
-    // FIXME: for now default AudioContext does not need an explicit startRendering() call.
-    // We may want to consider requiring it for symmetry with OfflineAudioContext
-    m_destinationNode->startRendering();
 }
 
 // Constructor for offline (non-realtime) rendering.
@@ -194,9 +188,17 @@ void AudioContext::lazyInitialize()
         ASSERT(!m_isAudioThreadFinished);
         if (!m_isAudioThreadFinished) {
             if (m_destinationNode.get()) {
-                // This starts the audio thread.  The destination node's provideInput() method will now be called repeatedly to render audio.
-                // Each time provideInput() is called, a portion of the audio stream is rendered.  Let's call this time period a "render quantum".
                 m_destinationNode->initialize();
+
+                if (!isOfflineContext()) {
+                    // This starts the audio thread. The destination node's provideInput() method will now be called repeatedly to render audio.
+                    // Each time provideInput() is called, a portion of the audio stream is rendered. Let's call this time period a "render quantum".
+                    // NOTE: for now default AudioContext does not need an explicit startRendering() call from JavaScript.
+                    // We may want to consider requiring it for symmetry with OfflineAudioContext.
+                    m_destinationNode->startRendering();                    
+                    ++s_hardwareContextCount;
+                }
+
             }
             m_isInitialized = true;
         }