summaryrefslogtreecommitdiffstats
path: root/services/audioflinger
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2013-10-03 21:15:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-10-03 21:15:05 +0000
commit8097068de97c0cdab8150931f290edbd5b3721e5 (patch)
tree953f68c84ab80ca4f899e88081768d81dd31c93e /services/audioflinger
parent580ed263a6ea6c766f9f715e101340c7fe26ab75 (diff)
parente14a5d6d2cc91dd2fc09ffdf7aa670b37da0795d (diff)
downloadframeworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.zip
frameworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.tar.gz
frameworks_av-8097068de97c0cdab8150931f290edbd5b3721e5.tar.bz2
Merge "Better recording wake lock accounting" into klp-dev
Diffstat (limited to 'services/audioflinger')
-rw-r--r--services/audioflinger/Threads.cpp30
-rw-r--r--services/audioflinger/Threads.h5
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;
};