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

Commit 078538cf authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Work around bug in offload driver

There is a bug in the offload driver that causes the last offload buffer(s)
to be dropped unless the device is on power or holding a wake lock.
To avoid truncated playback, we now hold a wake lock during the drain phase
of offloaded playback.

Bug: 19928717
Change-Id: I8df22e965ec791448aa5d9b74e743f48ef886fc4
parent 3af8a321
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -2679,13 +2679,23 @@ bool AudioFlinger::PlaybackThread::threadLoop()
                if (exitPending()) {
                    break;
                }
                bool released = false;
                // The following works around a bug in the offload driver. Ideally we would release
                // the wake lock every time, but that causes the last offload buffer(s) to be
                // dropped while the device is on battery, so we need to hold a wake lock during
                // the drain phase.
                if (mBytesRemaining && !(mDrainSequence & 1)) {
                    releaseWakeLock_l();
                    released = true;
                }
                mWakeLockUids.clear();
                mActiveTracksGeneration++;
                ALOGV("wait async completion");
                mWaitWorkCV.wait(mLock);
                ALOGV("async completion/wake");
                if (released) {
                    acquireWakeLock_l();
                }
                standbyTime = systemTime() + standbyDelay;
                sleepTime = 0;