diff options
| author | Dianne Hackborn <hackbod@google.com> | 2015-05-19 16:44:09 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-19 16:44:12 +0000 |
| commit | 8e3f29540db56d02a45966344133d6144c81e7c5 (patch) | |
| tree | 7f9d309f1bd231f08b481f3875527498d681bd1d /core | |
| parent | 5ddde02ac243b28ae9189a9f7ba64ba99c2d11d7 (diff) | |
| parent | d23e0d6901935588f9472bd7073fea0009581e9b (diff) | |
| download | frameworks_base-8e3f29540db56d02a45966344133d6144c81e7c5.zip frameworks_base-8e3f29540db56d02a45966344133d6144c81e7c5.tar.gz frameworks_base-8e3f29540db56d02a45966344133d6144c81e7c5.tar.bz2 | |
Merge "Update power manager to track uid state like netstats." into mnc-dev
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 38 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 5 | ||||
| -rw-r--r-- | core/java/android/app/IUidObserver.aidl | 23 | ||||
| -rw-r--r-- | core/java/android/os/PowerManagerInternal.java | 4 | ||||
| -rw-r--r-- | core/java/android/util/SparseArray.java | 18 | ||||
| -rw-r--r-- | core/java/com/android/internal/app/ProcessMap.java | 6 |
6 files changed, 92 insertions, 2 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 15cfbcd..cdf15e1 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1970,6 +1970,22 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case REGISTER_UID_OBSERVER_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IUidObserver observer = IUidObserver.Stub.asInterface( + data.readStrongBinder()); + registerUidObserver(observer); + return true; + } + + case UNREGISTER_UID_OBSERVER_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IUidObserver observer = IUidObserver.Stub.asInterface( + data.readStrongBinder()); + unregisterUidObserver(observer); + return true; + } + case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); @@ -5077,6 +5093,28 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + public void registerUidObserver(IUidObserver observer) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(observer != null ? observer.asBinder() : null); + mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + + public void unregisterUidObserver(IUidObserver observer) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(observer != null ? observer.asBinder() : null); + mRemote.transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 4ba1055..310c5ef 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -387,6 +387,9 @@ public interface IActivityManager extends IInterface { public void registerProcessObserver(IProcessObserver observer) throws RemoteException; public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException; + public void registerUidObserver(IUidObserver observer) throws RemoteException; + public void unregisterUidObserver(IUidObserver observer) throws RemoteException; + public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException; public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException; @@ -844,4 +847,6 @@ public interface IActivityManager extends IInterface { int UPDATE_DEVICE_OWNER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+295; int UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+296; int KEYGUARD_GOING_AWAY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+297; + int REGISTER_UID_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+298; + int UNREGISTER_UID_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+299; } diff --git a/core/java/android/app/IUidObserver.aidl b/core/java/android/app/IUidObserver.aidl new file mode 100644 index 0000000..308cb94 --- /dev/null +++ b/core/java/android/app/IUidObserver.aidl @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +/** {@hide} */ +oneway interface IUidObserver { + void onUidStateChanged(int uid, int procState); + void onUidGone(int uid); +} diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java index 9a0d0d0..e523285 100644 --- a/core/java/android/os/PowerManagerInternal.java +++ b/core/java/android/os/PowerManagerInternal.java @@ -136,4 +136,8 @@ public abstract class PowerManagerInternal { public abstract void setDeviceIdleMode(boolean enabled); public abstract void setDeviceIdleWhitelist(int[] appids); + + public abstract void updateUidProcState(int uid, int procState); + + public abstract void uidGone(int uid); } diff --git a/core/java/android/util/SparseArray.java b/core/java/android/util/SparseArray.java index 92e874f..dc965ed 100644 --- a/core/java/android/util/SparseArray.java +++ b/core/java/android/util/SparseArray.java @@ -134,6 +134,24 @@ public class SparseArray<E> implements Cloneable { } /** + * @hide + * Removes the mapping from the specified key, if there was any, returning the old value. + */ + public E removeReturnOld(int key) { + int i = ContainerHelpers.binarySearch(mKeys, mSize, key); + + if (i >= 0) { + if (mValues[i] != DELETED) { + final E old = (E) mValues[i]; + mValues[i] = DELETED; + mGarbage = true; + return old; + } + } + return null; + } + + /** * Alias for {@link #delete(int)}. */ public void remove(int key) { diff --git a/core/java/com/android/internal/app/ProcessMap.java b/core/java/com/android/internal/app/ProcessMap.java index 6ff0304..23a8bd7 100644 --- a/core/java/com/android/internal/app/ProcessMap.java +++ b/core/java/com/android/internal/app/ProcessMap.java @@ -39,14 +39,16 @@ public class ProcessMap<E> { return value; } - public void remove(String name, int uid) { + public E remove(String name, int uid) { SparseArray<E> uids = mMap.get(name); if (uids != null) { - uids.remove(uid); + final E old = uids.removeReturnOld(uid); if (uids.size() == 0) { mMap.remove(name); } + return old; } + return null; } public ArrayMap<String, SparseArray<E>> getMap() { |
