From e20ab3811a4929540ee496ce4c4d05930a0d92ca Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 24 Feb 2012 11:20:09 -0800 Subject: [PATCH] Unlock effect chains in the middle of two if's As part of the upcoming threadLoop() merge, this CL makes it clearer what are the similar and different parts before and after unlocking effect chains. In each threadLoop(), the old code was: if (sleepTime == 0) { // A unlockEffectChains(effectChains); // B } else { unlockEffectChains(effectChains); // C } The new code is: if (sleepTime == 0) { // A } unlockEffectChains(effectChains); if (sleepTime == 0) { // B } else { // C } Also this is slightly slower by one "if", it has the advantage of making it much more obvious about what is done before and after the unlock, and also to see the similarities and differences among the various copies of threadLoop(). Change-Id: I7bf4369d2dcb072573ec43b7e52c637f0097dc00 --- services/audioflinger/AudioFlinger.cpp | 38 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 62569512566c8..2243e354ea25a 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -2111,13 +2111,19 @@ bool AudioFlinger::MixerThread::threadLoop() if (mSuspended) { sleepTime = suspendSleepTimeUs(); } - // sleepTime == 0 means we must write to audio hardware + + // only process effects if we're going to write if (sleepTime == 0) { for (size_t i = 0; i < effectChains.size(); i ++) { effectChains[i]->process_l(); } - // enable changes in effect chain - unlockEffectChains(effectChains); + } + + // enable changes in effect chain + unlockEffectChains(effectChains); + + // sleepTime == 0 means we must write to audio hardware + if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; @@ -2141,8 +2147,6 @@ bool AudioFlinger::MixerThread::threadLoop() } mStandby = false; } else { - // enable changes in effect chain - unlockEffectChains(effectChains); usleep(sleepTime); } @@ -2920,7 +2924,8 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (mSuspended) { sleepTime = suspendSleepTimeUs(); } - // sleepTime == 0 means we must write to audio hardware + + // only process effects if we're going to write if (sleepTime == 0) { if (mixerStatus == MIXER_TRACKS_READY) { applyVolume(leftVol, rightVol, rampVolume); @@ -2928,8 +2933,13 @@ bool AudioFlinger::DirectOutputThread::threadLoop() for (size_t i = 0; i < effectChains.size(); i ++) { effectChains[i]->process_l(); } - unlockEffectChains(effectChains); + } + // enable changes in effect chain + unlockEffectChains(effectChains); + + // sleepTime == 0 means we must write to audio hardware + if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; @@ -2939,7 +2949,6 @@ bool AudioFlinger::DirectOutputThread::threadLoop() mInWrite = false; mStandby = false; } else { - unlockEffectChains(effectChains); usleep(sleepTime); } @@ -3191,14 +3200,19 @@ bool AudioFlinger::DuplicatingThread::threadLoop() if (mSuspended) { sleepTime = suspendSleepTimeUs(); } - // sleepTime == 0 means we must write to audio hardware + + // only process effects if we're going to write if (sleepTime == 0) { for (size_t i = 0; i < effectChains.size(); i ++) { effectChains[i]->process_l(); } - // enable changes in effect chain - unlockEffectChains(effectChains); + } + // enable changes in effect chain + unlockEffectChains(effectChains); + + // sleepTime == 0 means we must write to audio hardware + if (sleepTime == 0) { standbyTime = systemTime() + mStandbyTimeInNsecs; for (size_t i = 0; i < outputTracks.size(); i++) { outputTracks[i]->write(mMixBuffer, writeFrames); @@ -3206,8 +3220,6 @@ bool AudioFlinger::DuplicatingThread::threadLoop() mStandby = false; mBytesWritten += mixBufferSize; } else { - // enable changes in effect chain - unlockEffectChains(effectChains); usleep(sleepTime); }