OSDN Git Service

Allow blaming a single uid for work done
authorMarco Nelissen <marcone@google.com>
Wed, 2 Oct 2013 19:42:20 +0000 (12:42 -0700)
committerMarco Nelissen <marcone@google.com>
Thu, 3 Oct 2013 15:49:07 +0000 (08:49 -0700)
This lets audioflinger assign blame for wakelocks to a single uid.
Currently this is only used for recording wakelocks.
b/10985160

Change-Id: Idc9adb22c29030010ac690d4cb95e7e7ea6b91e6

include/powermanager/IPowerManager.h
services/powermanager/IPowerManager.cpp

index e21e6a8..2f4c3c4 100644 (file)
@@ -32,6 +32,8 @@ public:
 
     virtual status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag,
             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;
 };
 
index 3f5b81e..9f60e75 100644 (file)
@@ -30,7 +30,8 @@ namespace android {
 // must be kept in sync with IPowerManager.aidl
 enum {
     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>
@@ -55,6 +56,20 @@ public:
         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)
     {
         Parcel data, reply;