diff options
author | Marco Nelissen <marcone@google.com> | 2013-10-16 10:57:51 -0700 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2013-10-16 12:57:32 -0700 |
commit | 5c0106e134366312206702f1b072347e20c90374 (patch) | |
tree | 8874b4dcd5218cdd5f731d72f55892db2f9b6ec9 | |
parent | c60f1ad0fa0dd31a774517d1c0081465e4169f91 (diff) | |
download | frameworks_native-5c0106e134366312206702f1b072347e20c90374.zip frameworks_native-5c0106e134366312206702f1b072347e20c90374.tar.gz frameworks_native-5c0106e134366312206702f1b072347e20c90374.tar.bz2 |
Native counterpart of new power manager method
Change-Id: I54c0ed50a57ac870da91db8589a73a2c792dbd8d
-rw-r--r-- | include/binder/Parcel.h | 1 | ||||
-rw-r--r-- | include/powermanager/IPowerManager.h | 1 | ||||
-rw-r--r-- | libs/binder/Parcel.cpp | 10 | ||||
-rw-r--r-- | services/powermanager/IPowerManager.cpp | 11 |
4 files changed, 23 insertions, 0 deletions
diff --git a/include/binder/Parcel.h b/include/binder/Parcel.h index 0e20da9..e770e6f 100644 --- a/include/binder/Parcel.h +++ b/include/binder/Parcel.h @@ -101,6 +101,7 @@ public: status_t writeString16(const char16_t* str, size_t len); status_t writeStrongBinder(const sp<IBinder>& val); status_t writeWeakBinder(const wp<IBinder>& val); + status_t writeInt32Array(size_t len, const int32_t *val); template<typename T> status_t write(const Flattenable<T>& val); diff --git a/include/powermanager/IPowerManager.h b/include/powermanager/IPowerManager.h index 2f4c3c4..d85003f 100644 --- a/include/powermanager/IPowerManager.h +++ b/include/powermanager/IPowerManager.h @@ -35,6 +35,7 @@ public: 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 updateWakeLockUids(const sp<IBinder>& lock, int len, const int *uids) = 0; }; // ---------------------------------------------------------------------------- diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index d130d7c..4cd2fe1 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -617,6 +617,16 @@ status_t Parcel::writeInt32(int32_t val) { return writeAligned(val); } +status_t Parcel::writeInt32Array(size_t len, const int32_t *val) { + if (!val) { + return writeAligned(-1); + } + status_t ret = writeAligned(len); + if (ret == NO_ERROR) { + ret = write(val, len * sizeof(*val)); + } + return ret; +} status_t Parcel::writeInt64(int64_t val) { diff --git a/services/powermanager/IPowerManager.cpp b/services/powermanager/IPowerManager.cpp index 9f60e75..5ecd299 100644 --- a/services/powermanager/IPowerManager.cpp +++ b/services/powermanager/IPowerManager.cpp @@ -32,6 +32,7 @@ enum { ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION, ACQUIRE_WAKE_LOCK_UID = IBinder::FIRST_CALL_TRANSACTION + 1, RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 2, + UPDATE_WAKE_LOCK_UIDS = IBinder::FIRST_CALL_TRANSACTION + 3, }; class BpPowerManager : public BpInterface<IPowerManager> @@ -78,6 +79,16 @@ public: data.writeInt32(flags); return remote()->transact(RELEASE_WAKE_LOCK, data, &reply); } + + virtual status_t updateWakeLockUids(const sp<IBinder>& lock, int len, const int *uids) { + 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); + } }; IMPLEMENT_META_INTERFACE(PowerManager, "android.os.IPowerManager"); |