Allow blaming a single uid for work done

This lets audioflinger assign blame for wakelocks to a single uid.
Currently this is only used for recording wakelocks.
b/10985160

Change-Id: Idc9adb22c29030010ac690d4cb95e7e7ea6b91e6
This commit is contained in:
Marco Nelissen 2013-10-02 12:42:20 -07:00
parent 86206b41b2
commit 9a7706bb17
2 changed files with 18 additions and 1 deletions

View File

@ -32,6 +32,8 @@ public:
virtual status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag, virtual status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag,
const String16& packageName) = 0; const String16& packageName) = 0;
virtual status_t acquireWakeLockWithUid(int flags, const sp<IBinder>& lock, const String16& tag,
const String16& packageName, int uid) = 0;
virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags) = 0; virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags) = 0;
}; };

View File

@ -30,7 +30,8 @@ namespace android {
// must be kept in sync with IPowerManager.aidl // must be kept in sync with IPowerManager.aidl
enum { enum {
ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION, ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION,
RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 1, ACQUIRE_WAKE_LOCK_UID = IBinder::FIRST_CALL_TRANSACTION + 1,
RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 2,
}; };
class BpPowerManager : public BpInterface<IPowerManager> class BpPowerManager : public BpInterface<IPowerManager>
@ -55,6 +56,20 @@ public:
return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply); return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply);
} }
virtual status_t acquireWakeLockWithUid(int flags, const sp<IBinder>& lock, const String16& tag,
const String16& packageName, int uid)
{
Parcel data, reply;
data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor());
data.writeStrongBinder(lock);
data.writeInt32(flags);
data.writeString16(tag);
data.writeString16(packageName);
data.writeInt32(uid); // uid to blame for the work
return remote()->transact(ACQUIRE_WAKE_LOCK_UID, data, &reply);
}
virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags) virtual status_t releaseWakeLock(const sp<IBinder>& lock, int flags)
{ {
Parcel data, reply; Parcel data, reply;