summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2013-10-16 10:57:51 -0700
committerMarco Nelissen <marcone@google.com>2013-10-16 12:57:32 -0700
commit5c0106e134366312206702f1b072347e20c90374 (patch)
tree8874b4dcd5218cdd5f731d72f55892db2f9b6ec9
parentc60f1ad0fa0dd31a774517d1c0081465e4169f91 (diff)
downloadframeworks_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.h1
-rw-r--r--include/powermanager/IPowerManager.h1
-rw-r--r--libs/binder/Parcel.cpp10
-rw-r--r--services/powermanager/IPowerManager.cpp11
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");