diff options
| author | 2021-12-09 01:10:04 +0000 | |
|---|---|---|
| committer | 2021-12-09 01:10:04 +0000 | |
| commit | af6b3f308778c9cd55363976133db11bfa38f33a (patch) | |
| tree | 776068e6dfa3588a52b661835bb9c5eab834d679 | |
| parent | 23bedb26768ca0f08a7cee9eca35112d004fc1fb (diff) | |
| parent | 678b445a564d71428083e8a0bb8237e77418dfdd (diff) | |
Merge "Fix process capabilities on re-computation for cycles in oomAdjuster" into sc-v2-dev
| -rw-r--r-- | services/core/java/com/android/server/am/OomAdjuster.java | 10 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java | 31 |
2 files changed, 36 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index ff480d1f614c..7673123c6476 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1633,7 +1633,7 @@ public class OomAdjuster { int schedGroup; int procState; int cachedAdjSeq; - int capability = 0; + int capability = cycleReEval ? app.mState.getCurCapability() : 0; boolean foregroundActivities = false; boolean hasVisibleActivities = false; @@ -2018,10 +2018,6 @@ public class OomAdjuster { } if ((cr.flags & Context.BIND_WAIVE_PRIORITY) == 0) { - if (shouldSkipDueToCycle(app, cstate, procState, adj, cycleReEval)) { - continue; - } - if (cr.hasFlag(Context.BIND_INCLUDE_CAPABILITIES)) { capability |= cstate.getCurCapability(); } @@ -2042,6 +2038,10 @@ public class OomAdjuster { } } + if (shouldSkipDueToCycle(app, cstate, procState, adj, cycleReEval)) { + continue; + } + if (clientProcState >= PROCESS_STATE_CACHED_ACTIVITY) { // If the other app is cached for any reason, for purposes here // we are going to consider it empty. The specific cached state diff --git a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java index 18f1267b890f..0dd4f5b338b4 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java @@ -16,6 +16,7 @@ package com.android.server.am; +import static android.app.ActivityManager.PROCESS_CAPABILITY_ALL; import static android.app.ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP; import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY; @@ -1854,6 +1855,36 @@ public class MockingOomAdjusterTests { @SuppressWarnings("GuardedBy") @Test + public void testUpdateOomAdj_DoAll_BoundByPersService_Cycle_Branch_Capability() { + ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, + MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false)); + ProcessRecord client = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID, + MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false)); + bindService(app, client, null, Context.BIND_INCLUDE_CAPABILITIES, mock(IBinder.class)); + ProcessRecord client2 = spy(makeDefaultProcessRecord(MOCKAPP3_PID, MOCKAPP3_UID, + MOCKAPP3_PROCESSNAME, MOCKAPP3_PACKAGENAME, false)); + bindService(client, client2, null, Context.BIND_INCLUDE_CAPABILITIES, mock(IBinder.class)); + bindService(client2, app, null, Context.BIND_INCLUDE_CAPABILITIES, mock(IBinder.class)); + ProcessRecord client3 = spy(makeDefaultProcessRecord(MOCKAPP4_PID, MOCKAPP4_UID, + MOCKAPP4_PROCESSNAME, MOCKAPP4_PACKAGENAME, false)); + client3.mState.setMaxAdj(PERSISTENT_PROC_ADJ); + bindService(app, client3, null, Context.BIND_INCLUDE_CAPABILITIES, mock(IBinder.class)); + ArrayList<ProcessRecord> lru = sService.mProcessList.getLruProcessesLOSP(); + lru.clear(); + lru.add(app); + lru.add(client); + lru.add(client2); + lru.add(client3); + sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE); + sService.mOomAdjuster.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE); + + assertEquals(PROCESS_CAPABILITY_ALL, client.mState.getSetCapability()); + assertEquals(PROCESS_CAPABILITY_ALL, client2.mState.getSetCapability()); + assertEquals(PROCESS_CAPABILITY_ALL, app.mState.getSetCapability()); + } + + @SuppressWarnings("GuardedBy") + @Test public void testUpdateOomAdj_DoAll_Provider_Cycle_Branch_2() { ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false)); |