[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
crogers at google.com
crogers at google.com
Wed Dec 22 13:55:46 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 5a1b652656de6d675cd6b5ae69ab1932abe6a8c7
Author: crogers at google.com <crogers at google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Sep 29 21:56:46 2010 +0000
2010-09-29 Chris Rogers <crogers at google.com>
Reviewed by Kenneth Russell.
Limit number of AudioNode deletions per render quantum in AudioContext
https://bugs.webkit.org/show_bug.cgi?id=46834
No new tests since audio API is not yet implemented.
* webaudio/AudioContext.cpp:
(WebCore::AudioContext::handlePostRenderTasks):
(WebCore::AudioContext::deleteMarkedNodes):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68689 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index f15dad8..fe84988 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2010-09-29 Chris Rogers <crogers at google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Limit number of AudioNode deletions per render quantum in AudioContext
+ https://bugs.webkit.org/show_bug.cgi?id=46834
+
+ No new tests since audio API is not yet implemented.
+
+ * webaudio/AudioContext.cpp:
+ (WebCore::AudioContext::handlePostRenderTasks):
+ (WebCore::AudioContext::deleteMarkedNodes):
+
2010-09-29 David Hyatt <hyatt at apple.com>
Reviewed by Simon Fraser.
diff --git a/WebCore/webaudio/AudioContext.cpp b/WebCore/webaudio/AudioContext.cpp
index 6ca8ee1..63a26a2 100644
--- a/WebCore/webaudio/AudioContext.cpp
+++ b/WebCore/webaudio/AudioContext.cpp
@@ -58,7 +58,9 @@
// FIXME: check the proper way to reference an undefined thread ID
const int UndefinedThreadIdentifier = 0xffffffff;
-
+
+const unsigned MaxNodesToDeletePerQuantum = 10;
+
namespace WebCore {
PassRefPtr<CachedAudio> AudioContext::createAudioRequest(const String &url, bool mixToMono)
@@ -412,7 +414,7 @@ void AudioContext::addDeferredFinishDeref(AudioNode* node, AudioNode::RefType re
void AudioContext::handlePostRenderTasks()
{
ASSERT(isAudioThread());
-
+
// Must use a tryLock() here too. Don't worry, the lock will very rarely be contended and this method is called frequently.
// The worst that can happen is that there will be some nodes which will take slightly longer than usual to be deleted or removed
// from the render graph (in which case they'll render silence).
@@ -455,10 +457,15 @@ void AudioContext::deleteMarkedNodes()
ASSERT(isGraphOwner() || isAudioThreadFinished());
// Note: deleting an AudioNode can cause m_nodesToDelete to grow.
+ size_t nodesDeleted = 0;
while (size_t n = m_nodesToDelete.size()) {
AudioNode* node = m_nodesToDelete[n - 1];
m_nodesToDelete.removeLast();
delete node;
+
+ // Don't delete too many nodes per render quantum since we don't want to do too much work in the realtime audio thread.
+ if (++nodesDeleted > MaxNodesToDeletePerQuantum)
+ break;
}
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list