Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f10ffec1 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Code simplification and movement to prepare for mActiveTracks

Share code to acquire wake lock at entry to loop

Change-Id: I01fb645de9417055c0adfc6a4c4011bf22ea4f94
parent 7ae75196
Loading
Loading
Loading
Loading
+22 −19
Original line number Diff line number Diff line
@@ -4423,12 +4423,6 @@ bool AudioFlinger::RecordThread::threadLoop()
    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 @@ bool AudioFlinger::RecordThread::threadLoop()
    // 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 @@ bool AudioFlinger::RecordThread::threadLoop()
            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 @@ bool AudioFlinger::RecordThread::threadLoop()
                // 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 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac
        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 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac
        }
        // 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();