Code simplification and movement to prepare for mActiveTracks
Share code to acquire wake lock at entry to loop
Change-Id: I01fb645de9417055c0adfc6a4c4011bf22ea4f94
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 4e23129..a3022c7 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -4423,12 +4423,6 @@
nsecs_t lastWarning = 0;
inputStandBy();
- sp<RecordTrack> activeTrack;
- {
- Mutex::Autolock _l(mLock);
- activeTrack = mActiveTrack;
- acquireWakeLock_l(activeTrack != 0 ? activeTrack->uid() : -1);
- }
// used to verify we've read at least once before evaluating how many bytes were read
bool readOnce = false;
@@ -4436,6 +4430,14 @@
// used to request a deferred sleep, to be executed later while mutex is unlocked
bool doSleep = false;
+reacquire_wakelock:
+ sp<RecordTrack> activeTrack;
+ {
+ Mutex::Autolock _l(mLock);
+ activeTrack = mActiveTrack;
+ acquireWakeLock_l(activeTrack != 0 ? activeTrack->uid() : -1);
+ }
+
// start recording
for (;;) {
TrackBase::track_state activeTrackState;
@@ -4455,14 +4457,9 @@
processConfigEvents_l();
// return value 'reconfig' is currently unused
bool reconfig = checkForNewParameters_l();
- if (mActiveTrack != 0 && activeTrack != mActiveTrack) {
- SortedVector<int> tmp;
- tmp.add(mActiveTrack->uid());
- updateWakeLockUids_l(tmp);
- }
- // make a stable copy of mActiveTrack
- activeTrack = mActiveTrack;
- if (activeTrack == 0) {
+
+ // if no active track, then standby and release wakelock
+ if (mActiveTrack == 0) {
standbyIfNotAlreadyInStandby();
// exitPending() can't become true here
releaseWakeLock_l();
@@ -4470,8 +4467,14 @@
// go to sleep
mWaitWorkCV.wait(mLock);
ALOGV("RecordThread: loop starting");
- acquireWakeLock_l(mActiveTrack != 0 ? mActiveTrack->uid() : -1);
- continue;
+ goto reacquire_wakelock;
+ }
+
+ if (activeTrack != mActiveTrack) {
+ SortedVector<int> tmp;
+ tmp.add(mActiveTrack->uid());
+ updateWakeLockUids_l(tmp);
+ activeTrack = mActiveTrack;
}
if (activeTrack->isTerminated()) {
@@ -4874,8 +4877,8 @@
if (mActiveTrack != 0) {
if (recordTrack != mActiveTrack.get()) {
status = -EBUSY;
- } else if (mActiveTrack->mState == TrackBase::PAUSING) {
- mActiveTrack->mState = TrackBase::ACTIVE;
+ } else if (recordTrack->mState == TrackBase::PAUSING) {
+ recordTrack->mState = TrackBase::ACTIVE;
}
return status;
}
@@ -4903,7 +4906,7 @@
}
// FIXME hijacking a playback track state name which was intended for start after pause;
// here 'STARTING_2' would be more accurate
- mActiveTrack->mState = TrackBase::RESUMING;
+ recordTrack->mState = TrackBase::RESUMING;
// signal thread to start
ALOGV("Signal record thread");
mWaitWorkCV.broadcast();