Loading services/core/java/com/android/server/am/ActivityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -978,7 +978,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } final SparseArray<PendingTempWhitelist> mPendingTempWhitelist = new SparseArray<>(); final PendingTempWhitelists mPendingTempWhitelist = new PendingTempWhitelists(this); /** * Information about and control over application operations Loading services/core/java/com/android/server/am/ActivityStarter.java +1 −1 Original line number Diff line number Diff line Loading @@ -899,7 +899,7 @@ class ActivityStarter { ? mService.mWindowManager.isAnyWindowVisibleForUid(targetUid) : false; final String targetWhitelistTag = (targetUid != -1) ? mService.mAm.getPendingTempWhitelistTagForUidLocked(targetUid) ? mService.getPendingTempWhitelistTagForUidLocked(targetUid) : null; mSupervisor.getActivityMetricsLogger().logActivityStart(intent, callerApp, r, Loading services/core/java/com/android/server/am/ActivityTaskManagerService.java +26 −5 Original line number Diff line number Diff line Loading @@ -331,7 +331,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final ActivityThread mSystemThread; H mH; UiHandler mUiHandler; ActivityManagerService mAm; ActivityManagerInternal mAmInternal; UriGrantsManagerInternal mUgmInternal; private PackageManagerInternal mPmInternal; Loading @@ -349,7 +348,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private UserManagerService mUserManager; private AppOpsService mAppOpsService; /** All active uids in the system. */ final SparseArray<Integer> mActiveUids = new SparseArray<>(); private final SparseArray<Integer> mActiveUids = new SparseArray<>(); private final SparseArray<String> mPendingTempWhitelist = new SparseArray<>(); /** All processes currently running that might have a window organized by name. */ final ProcessMap<WindowProcessController> mProcessNames = new ProcessMap<>(); /** All processes we currently have running mapped by pid */ Loading Loading @@ -708,10 +708,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } // TODO: Will be converted to WM lock once transition is complete. void setActivityManagerService(ActivityManagerService am, Looper looper, void setActivityManagerService(Object globalLock, Looper looper, IntentFirewall intentFirewall, PendingIntentController intentController) { mAm = am; mGlobalLock = mAm; mGlobalLock = globalLock; mH = new H(looper); mUiHandler = new UiHandler(); mIntentFirewall = intentFirewall; Loading Loading @@ -5462,6 +5461,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return mActiveUids.get(uid, PROCESS_STATE_NONEXISTENT); } /** * @return whitelist tag for a uid from mPendingTempWhitelist, null if not currently on * the whitelist */ String getPendingTempWhitelistTagForUidLocked(int uid) { return mPendingTempWhitelist.get(uid); } void logAppTooSlow(WindowProcessController app, long startTime, String msg) { if (true || Build.IS_USER) { return; Loading Loading @@ -6667,5 +6674,19 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } @Override public void onUidAddedToPendingTempWhitelist(int uid, String tag) { synchronized (mGlobalLock) { mPendingTempWhitelist.put(uid, tag); } } @Override public void onUidRemovedFromPendingTempWhitelist(int uid) { synchronized (mGlobalLock) { mPendingTempWhitelist.remove(uid); } } } } services/core/java/com/android/server/am/PendingTempWhitelists.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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 com.android.server.am; import android.util.SparseArray; /** Whitelists of uids to temporarily bypass Power Save mode. */ final class PendingTempWhitelists { private ActivityManagerService mService; private final SparseArray<ActivityManagerService.PendingTempWhitelist> mPendingTempWhitelist = new SparseArray<>(); PendingTempWhitelists(ActivityManagerService service) { mService = service; } void put(int uid, ActivityManagerService.PendingTempWhitelist value) { mPendingTempWhitelist.put(uid, value); mService.mAtmInternal.onUidAddedToPendingTempWhitelist(uid, value.tag); } void removeAt(int index) { final int uid = mPendingTempWhitelist.keyAt(index); mPendingTempWhitelist.removeAt(index); mService.mAtmInternal.onUidRemovedFromPendingTempWhitelist(uid); } ActivityManagerService.PendingTempWhitelist get(int uid) { return mPendingTempWhitelist.get(uid); } int size() { return mPendingTempWhitelist.size(); } ActivityManagerService.PendingTempWhitelist valueAt(int index) { return mPendingTempWhitelist.valueAt(index); } int indexOfKey(int key) { return mPendingTempWhitelist.indexOfKey(key); } } services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +3 −0 Original line number Diff line number Diff line Loading @@ -444,4 +444,7 @@ public abstract class ActivityTaskManagerInternal { public abstract void onUidInactive(int uid); public abstract void onActiveUidsCleared(); public abstract void onUidProcStateChanged(int uid, int procState); public abstract void onUidAddedToPendingTempWhitelist(int uid, String tag); public abstract void onUidRemovedFromPendingTempWhitelist(int uid); } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -978,7 +978,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } final SparseArray<PendingTempWhitelist> mPendingTempWhitelist = new SparseArray<>(); final PendingTempWhitelists mPendingTempWhitelist = new PendingTempWhitelists(this); /** * Information about and control over application operations Loading
services/core/java/com/android/server/am/ActivityStarter.java +1 −1 Original line number Diff line number Diff line Loading @@ -899,7 +899,7 @@ class ActivityStarter { ? mService.mWindowManager.isAnyWindowVisibleForUid(targetUid) : false; final String targetWhitelistTag = (targetUid != -1) ? mService.mAm.getPendingTempWhitelistTagForUidLocked(targetUid) ? mService.getPendingTempWhitelistTagForUidLocked(targetUid) : null; mSupervisor.getActivityMetricsLogger().logActivityStart(intent, callerApp, r, Loading
services/core/java/com/android/server/am/ActivityTaskManagerService.java +26 −5 Original line number Diff line number Diff line Loading @@ -331,7 +331,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final ActivityThread mSystemThread; H mH; UiHandler mUiHandler; ActivityManagerService mAm; ActivityManagerInternal mAmInternal; UriGrantsManagerInternal mUgmInternal; private PackageManagerInternal mPmInternal; Loading @@ -349,7 +348,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private UserManagerService mUserManager; private AppOpsService mAppOpsService; /** All active uids in the system. */ final SparseArray<Integer> mActiveUids = new SparseArray<>(); private final SparseArray<Integer> mActiveUids = new SparseArray<>(); private final SparseArray<String> mPendingTempWhitelist = new SparseArray<>(); /** All processes currently running that might have a window organized by name. */ final ProcessMap<WindowProcessController> mProcessNames = new ProcessMap<>(); /** All processes we currently have running mapped by pid */ Loading Loading @@ -708,10 +708,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } // TODO: Will be converted to WM lock once transition is complete. void setActivityManagerService(ActivityManagerService am, Looper looper, void setActivityManagerService(Object globalLock, Looper looper, IntentFirewall intentFirewall, PendingIntentController intentController) { mAm = am; mGlobalLock = mAm; mGlobalLock = globalLock; mH = new H(looper); mUiHandler = new UiHandler(); mIntentFirewall = intentFirewall; Loading Loading @@ -5462,6 +5461,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { return mActiveUids.get(uid, PROCESS_STATE_NONEXISTENT); } /** * @return whitelist tag for a uid from mPendingTempWhitelist, null if not currently on * the whitelist */ String getPendingTempWhitelistTagForUidLocked(int uid) { return mPendingTempWhitelist.get(uid); } void logAppTooSlow(WindowProcessController app, long startTime, String msg) { if (true || Build.IS_USER) { return; Loading Loading @@ -6667,5 +6674,19 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } @Override public void onUidAddedToPendingTempWhitelist(int uid, String tag) { synchronized (mGlobalLock) { mPendingTempWhitelist.put(uid, tag); } } @Override public void onUidRemovedFromPendingTempWhitelist(int uid) { synchronized (mGlobalLock) { mPendingTempWhitelist.remove(uid); } } } }
services/core/java/com/android/server/am/PendingTempWhitelists.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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 com.android.server.am; import android.util.SparseArray; /** Whitelists of uids to temporarily bypass Power Save mode. */ final class PendingTempWhitelists { private ActivityManagerService mService; private final SparseArray<ActivityManagerService.PendingTempWhitelist> mPendingTempWhitelist = new SparseArray<>(); PendingTempWhitelists(ActivityManagerService service) { mService = service; } void put(int uid, ActivityManagerService.PendingTempWhitelist value) { mPendingTempWhitelist.put(uid, value); mService.mAtmInternal.onUidAddedToPendingTempWhitelist(uid, value.tag); } void removeAt(int index) { final int uid = mPendingTempWhitelist.keyAt(index); mPendingTempWhitelist.removeAt(index); mService.mAtmInternal.onUidRemovedFromPendingTempWhitelist(uid); } ActivityManagerService.PendingTempWhitelist get(int uid) { return mPendingTempWhitelist.get(uid); } int size() { return mPendingTempWhitelist.size(); } ActivityManagerService.PendingTempWhitelist valueAt(int index) { return mPendingTempWhitelist.valueAt(index); } int indexOfKey(int key) { return mPendingTempWhitelist.indexOfKey(key); } }
services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +3 −0 Original line number Diff line number Diff line Loading @@ -444,4 +444,7 @@ public abstract class ActivityTaskManagerInternal { public abstract void onUidInactive(int uid); public abstract void onActiveUidsCleared(); public abstract void onUidProcStateChanged(int uid, int procState); public abstract void onUidAddedToPendingTempWhitelist(int uid, String tag); public abstract void onUidRemovedFromPendingTempWhitelist(int uid); }