From a602086872ad725d257b3be659a774f032f06d71 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 5 Sep 2014 16:46:46 -0700 Subject: [PATCH] Make IPowerManager native conform to .aidl for oneway But provide a temporary escape hatch for AudioFlinger. This oneway option will be removed as soon as possible. Bug: 16408906 Change-Id: I20d6da1969ae05b96e72795463470eb4c1f8fbdc --- include/powermanager/IPowerManager.h | 11 +++++++---- services/powermanager/IPowerManager.cpp | 24 ++++++++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/include/powermanager/IPowerManager.h b/include/powermanager/IPowerManager.h index 511797a8f..91ecc5aa3 100644 --- a/include/powermanager/IPowerManager.h +++ b/include/powermanager/IPowerManager.h @@ -31,12 +31,15 @@ class IPowerManager : public IInterface public: DECLARE_META_INTERFACE(PowerManager); + // FIXME remove the bool isOneWay parameters as they are not oneway in the .aidl virtual status_t acquireWakeLock(int flags, const sp& lock, const String16& tag, - const String16& packageName) = 0; + const String16& packageName, bool isOneWay = false) = 0; virtual status_t acquireWakeLockWithUid(int flags, const sp& lock, const String16& tag, - const String16& packageName, int uid) = 0; - virtual status_t releaseWakeLock(const sp& lock, int flags) = 0; - virtual status_t updateWakeLockUids(const sp& lock, int len, const int *uids) = 0; + const String16& packageName, int uid, bool isOneWay = false) = 0; + virtual status_t releaseWakeLock(const sp& lock, int flags, bool isOneWay = false) = 0; + virtual status_t updateWakeLockUids(const sp& lock, int len, const int *uids, + bool isOneWay = false) = 0; + // oneway in the .aidl virtual status_t powerHint(int hintId, int data) = 0; }; diff --git a/services/powermanager/IPowerManager.cpp b/services/powermanager/IPowerManager.cpp index 926c050ae..ec864ee50 100644 --- a/services/powermanager/IPowerManager.cpp +++ b/services/powermanager/IPowerManager.cpp @@ -45,7 +45,7 @@ public: } virtual status_t acquireWakeLock(int flags, const sp& lock, const String16& tag, - const String16& packageName) + const String16& packageName, bool isOneWay) { Parcel data, reply; data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); @@ -56,11 +56,12 @@ public: data.writeString16(packageName); data.writeInt32(0); // no WorkSource data.writeString16(NULL, 0); // no history tag - return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply, IBinder::FLAG_ONEWAY); + return remote()->transact(ACQUIRE_WAKE_LOCK, data, &reply, + isOneWay ? IBinder::FLAG_ONEWAY : 0); } virtual status_t acquireWakeLockWithUid(int flags, const sp& lock, const String16& tag, - const String16& packageName, int uid) + const String16& packageName, int uid, bool isOneWay) { Parcel data, reply; data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); @@ -70,26 +71,28 @@ public: data.writeString16(tag); data.writeString16(packageName); data.writeInt32(uid); // uid to blame for the work - return remote()->transact(ACQUIRE_WAKE_LOCK_UID, data, &reply, IBinder::FLAG_ONEWAY); + return remote()->transact(ACQUIRE_WAKE_LOCK_UID, data, &reply, + isOneWay ? IBinder::FLAG_ONEWAY : 0); } - virtual status_t releaseWakeLock(const sp& lock, int flags) + virtual status_t releaseWakeLock(const sp& lock, int flags, bool isOneWay) { Parcel data, reply; data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); data.writeStrongBinder(lock); data.writeInt32(flags); - return remote()->transact(RELEASE_WAKE_LOCK, data, &reply, IBinder::FLAG_ONEWAY); + return remote()->transact(RELEASE_WAKE_LOCK, data, &reply, + isOneWay ? IBinder::FLAG_ONEWAY : 0); } - virtual status_t updateWakeLockUids(const sp& lock, int len, const int *uids) { + virtual status_t updateWakeLockUids(const sp& lock, int len, const int *uids, + bool isOneWay) { Parcel data, reply; data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); data.writeStrongBinder(lock); data.writeInt32Array(len, uids); - // We don't really care too much if this succeeds (there's nothing we can do if it doesn't) - // but it should return ASAP - return remote()->transact(UPDATE_WAKE_LOCK_UIDS, data, &reply, IBinder::FLAG_ONEWAY); + return remote()->transact(UPDATE_WAKE_LOCK_UIDS, data, &reply, + isOneWay ? IBinder::FLAG_ONEWAY : 0); } virtual status_t powerHint(int hintId, int param) @@ -98,6 +101,7 @@ public: data.writeInterfaceToken(IPowerManager::getInterfaceDescriptor()); data.writeInt32(hintId); data.writeInt32(param); + // This FLAG_ONEWAY is in the .aidl, so there is no way to disable it return remote()->transact(POWER_HINT, data, &reply, IBinder::FLAG_ONEWAY); } };