summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2015-09-09 12:25:51 -0700
committerGlenn Kasten <gkasten@google.com>2015-09-10 10:31:27 -0700
commita2ab4505c807f42afe34809409c4e85d91618a8c (patch)
treecffdeb827eb93870aa692b8a9d3a0842ff8405de
parent0f05031545e43c8fe49a9dda0cfd9dce202d1ef3 (diff)
downloadframeworks_av-a2ab4505c807f42afe34809409c4e85d91618a8c.zip
frameworks_av-a2ab4505c807f42afe34809409c4e85d91618a8c.tar.gz
frameworks_av-a2ab4505c807f42afe34809409c4e85d91618a8c.tar.bz2
audio flinger: force audio path start from normal mixer
The audio HAL wakes up and configures the audio path when receiving the first write() in standby state. This causes a certain amount of process to take place in the mixer threads which is problematic for fast mixer running at FIFO priority. We now force a fake write() of 0 bytes from normal mixer to trigger the audio path configuration before starting the fast mixer. Bug: 23791972. Change-Id: I54311b337fda956444846f5d2f53a3263d54e04b
-rw-r--r--services/audioflinger/Threads.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 0a7d4a2..5bd9149 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -3479,6 +3479,12 @@ ssize_t AudioFlinger::MixerThread::threadLoop_write()
if (state->mCommand != FastMixerState::MIX_WRITE &&
(kUseFastMixer != FastMixer_Dynamic || state->mTrackMask > 1)) {
if (state->mCommand == FastMixerState::COLD_IDLE) {
+
+ // FIXME workaround for first HAL write being CPU bound on some devices
+ ATRACE_BEGIN("write");
+ mOutput->write((char *)mSinkBuffer, 0);
+ ATRACE_END();
+
int32_t old = android_atomic_inc(&mFastMixerFutex);
if (old == -1) {
(void) syscall(__NR_futex, &mFastMixerFutex, FUTEX_WAKE_PRIVATE, 1);