From daa60c22d6666980ef563aeac454dd32b9034f8f Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Mon, 15 Mar 2021 19:01:51 -0700 Subject: SoundPool: Avoid busy waiting during stream restart A stream on the restart queue can cause the StreamManager to busy-wait. This was introduced by a fix commit ba04dbe7732bc2d016bf81c81bd349d931de63f2. Test: Verbose log on StreamManager.cpp, run SoundPool CTS tests. Bug: 182923919 Merged-In: Iae794bc957869426a4e1e27cd3c088aa9dd83208 Change-Id: Iae794bc957869426a4e1e27cd3c088aa9dd83208 --- media/jni/soundpool/StreamManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'media') diff --git a/media/jni/soundpool/StreamManager.cpp b/media/jni/soundpool/StreamManager.cpp index 49c2b39f8904..309d71cfd062 100644 --- a/media/jni/soundpool/StreamManager.cpp +++ b/media/jni/soundpool/StreamManager.cpp @@ -358,14 +358,14 @@ void StreamManager::addToActiveQueue_l(Stream *stream) { void StreamManager::run(int32_t id) { ALOGV("%s(%d) entering", __func__, id); - int64_t waitTimeNs = kWaitTimeBeforeCloseNs; + int64_t waitTimeNs = 0; // on thread start, mRestartStreams can be non-empty. std::unique_lock lock(mStreamManagerLock); while (!mQuit) { - if (mRestartStreams.empty()) { // on thread start, mRestartStreams can be non-empty. + if (waitTimeNs > 0) { mStreamManagerCondition.wait_for( lock, std::chrono::duration(waitTimeNs)); } - ALOGV("%s(%d) awake", __func__, id); + ALOGV("%s(%d) awake lock waitTimeNs:%lld", __func__, id, (long long)waitTimeNs); sanityCheckQueue_l(); -- cgit v1.2.3