diff options
| author | 2018-10-23 21:03:31 +0000 | |
|---|---|---|
| committer | 2018-10-23 21:03:31 +0000 | |
| commit | 92b7af321c91f8da94e5d25ad453be1c012ceff1 (patch) | |
| tree | dfa231b4324dffcdf86b8b385edaafa447720d0f | |
| parent | 8884cfc13ef7a8848a41094e4452c7a72a62c908 (diff) | |
| parent | 9de19446c4f39d949dae64d74ea6e96d6b5adf31 (diff) | |
Merge "Mirror pending temp whitelist from AMS to ATMS (30/n)"
6 files changed, 90 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 951414f49fdb..7a0a742bfae7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -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 diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 14b4de9e3ec5..fa227a27dced 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -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, diff --git a/services/core/java/com/android/server/am/ActivityTaskManagerService.java b/services/core/java/com/android/server/am/ActivityTaskManagerService.java index b3359bddec71..194aa1b7eef6 100644 --- a/services/core/java/com/android/server/am/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/am/ActivityTaskManagerService.java @@ -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; @@ -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 */ @@ -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; @@ -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; @@ -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); + } + } } } diff --git a/services/core/java/com/android/server/am/PendingTempWhitelists.java b/services/core/java/com/android/server/am/PendingTempWhitelists.java new file mode 100644 index 000000000000..b36e3c7b9e35 --- /dev/null +++ b/services/core/java/com/android/server/am/PendingTempWhitelists.java @@ -0,0 +1,59 @@ +/* + * 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); + } +} diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index ac308990d514..443d6fe5de74 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -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); } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java index 65e4fa0f4aff..270d394ead34 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java @@ -109,7 +109,6 @@ public class ActivityStartInterceptorTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - mService.mAm = mAm; mService.mAmInternal = mAmInternal; mInterceptor = new ActivityStartInterceptor(mService, mSupervisor, mContext); mInterceptor.setStates(TEST_USER_ID, TEST_REAL_CALLING_PID, TEST_REAL_CALLING_UID, |