diff options
author | Marco Nelissen <marcone@google.com> | 2013-10-03 21:15:05 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-10-03 21:15:05 +0000 |
commit | 8097068de97c0cdab8150931f290edbd5b3721e5 (patch) | |
tree | 953f68c84ab80ca4f899e88081768d81dd31c93e | |
parent | 580ed263a6ea6c766f9f715e101340c7fe26ab75 (diff) | |
parent | e14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d (diff) | |
download | frameworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.zip frameworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.tar.gz frameworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.tar.bz2 |
Merge "Better recording wake lock accounting" into klp-dev
-rw-r--r-- | services/audioflinger/Threads.cpp | 30 | ||||
-rw-r--r-- | services/audioflinger/Threads.h | 5 |
2 files changed, 22 insertions, 13 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 187adf3..8aae892 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -476,13 +476,13 @@ void AudioFlinger::ThreadBase::dumpEffectChains(int fd, const Vector<String16>& } } -void AudioFlinger::ThreadBase::acquireWakeLock() +void AudioFlinger::ThreadBase::acquireWakeLock(int uid) { Mutex::Autolock _l(mLock); - acquireWakeLock_l(); + acquireWakeLock_l(uid); } -void AudioFlinger::ThreadBase::acquireWakeLock_l() +void AudioFlinger::ThreadBase::acquireWakeLock_l(int uid) { if (mPowerManager == 0) { // use checkService() to avoid blocking if power service is not up yet @@ -497,10 +497,19 @@ void AudioFlinger::ThreadBase::acquireWakeLock_l() } if (mPowerManager != 0) { sp<IBinder> binder = new BBinder(); - status_t status = mPowerManager->acquireWakeLock(POWERMANAGER_PARTIAL_WAKE_LOCK, - binder, - String16(mName), - String16("media")); + status_t status; + if (uid >= 0) { + mPowerManager->acquireWakeLockWithUid(POWERMANAGER_PARTIAL_WAKE_LOCK, + binder, + String16(mName), + String16("media"), + uid); + } else { + mPowerManager->acquireWakeLock(POWERMANAGER_PARTIAL_WAKE_LOCK, + binder, + String16(mName), + String16("media")); + } if (status == NO_ERROR) { mWakeLockToken = binder; } @@ -4283,7 +4292,7 @@ AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger, snprintf(mName, kNameLength, "AudioIn_%X", id); readInputParameters(); - + mClientUid = IPCThreadState::self()->getCallingUid(); } @@ -4315,7 +4324,7 @@ bool AudioFlinger::RecordThread::threadLoop() nsecs_t lastWarning = 0; inputStandBy(); - acquireWakeLock(); + acquireWakeLock(mClientUid); // used to verify we've read at least once before evaluating how many bytes were read bool readOnce = false; @@ -4340,7 +4349,7 @@ bool AudioFlinger::RecordThread::threadLoop() // go to sleep mWaitWorkCV.wait(mLock); ALOGV("RecordThread: loop starting"); - acquireWakeLock_l(); + acquireWakeLock_l(mClientUid); continue; } if (mActiveTrack != 0) { @@ -4562,7 +4571,6 @@ sp<AudioFlinger::RecordThread::RecordTrack> AudioFlinger::RecordThread::createR ALOGE("Audio driver not initialized."); goto Exit; } - // client expresses a preference for FAST, but we get the final say if (*flags & IAudioFlinger::TRACK_FAST) { if ( diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 241424f..0cb3ef7 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -237,8 +237,8 @@ protected: effect_uuid_t mType; // effect type UUID }; - void acquireWakeLock(); - void acquireWakeLock_l(); + void acquireWakeLock(int uid = -1); + void acquireWakeLock_l(int uid = -1); void releaseWakeLock(); void releaseWakeLock_l(); void setEffectSuspended_l(const effect_uuid_t *type, @@ -951,4 +951,5 @@ private: // For dumpsys const sp<NBAIO_Sink> mTeeSink; + int mClientUid; }; |