Loading core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7054,6 +7054,9 @@ RSS is being collected instead. --> <item name="config_am_pssToRssThresholdModifier" format="float" type="dimen">1.5</item> <!-- The size of the UI tier if cached app oom_adj_score tiers are enabled. --> <integer name="config_am_tieredCachedAdjUiTierSize">10</integer> <!-- Whether unlocking and waking a device are sequenced --> <bool name="config_orderUnlockAndWake">false</bool> Loading core/res/res/values/symbols.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5499,6 +5499,9 @@ <java-symbol type="bool" name="config_am_disablePssProfiling" /> <java-symbol type="dimen" name="config_am_pssToRssThresholdModifier" /> <!-- For OomAdjuster cached app tiers configurability --> <java-symbol type="integer" name="config_am_tieredCachedAdjUiTierSize" /> <java-symbol type="raw" name="default_ringtone_vibration_effect" /> <!-- For activity embedding divider --> Loading services/core/java/com/android/server/am/ActivityManagerConstants.java +20 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ final class ActivityManagerConstants extends ContentObserver { static final String KEY_USE_TIERED_CACHED_ADJ = "use_tiered_cached_adj"; static final String KEY_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time"; static final String KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE = "tiered_cached_adj_ui_tier_size"; /** * Whether or not to enable the new oom adjuster implementation. Loading Loading @@ -248,6 +249,8 @@ final class ActivityManagerConstants extends ContentObserver { private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = Flags.oomadjusterCachedAppTiers(); private static final long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000; private static final int TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE = 50; private final int mDefaultTieredCachedAdjUiTierSize; /** * The default value to {@link #KEY_ENABLE_NEW_OOMADJ}. Loading Loading @@ -1154,6 +1157,9 @@ final class ActivityManagerConstants extends ContentObserver { /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ public long TIERED_CACHED_ADJ_DECAY_TIME = DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME; /** @see #KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE */ public int TIERED_CACHED_ADJ_UI_TIER_SIZE; /** @see #KEY_ENABLE_NEW_OOMADJ */ public boolean ENABLE_NEW_OOMADJ = DEFAULT_ENABLE_NEW_OOM_ADJ; Loading Loading @@ -1363,6 +1369,7 @@ final class ActivityManagerConstants extends ContentObserver { break; case KEY_USE_TIERED_CACHED_ADJ: case KEY_TIERED_CACHED_ADJ_DECAY_TIME: case KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE: updateUseTieredCachedAdj(); break; case KEY_DISABLE_APP_PROFILER_PSS_PROFILING: Loading Loading @@ -1466,6 +1473,11 @@ final class ActivityManagerConstants extends ContentObserver { mDefaultPssToRssThresholdModifier = context.getResources().getFloat( com.android.internal.R.dimen.config_am_pssToRssThresholdModifier); PSS_TO_RSS_THRESHOLD_MODIFIER = mDefaultPssToRssThresholdModifier; mDefaultTieredCachedAdjUiTierSize = context.getResources().getInteger( com.android.internal.R.integer.config_am_tieredCachedAdjUiTierSize); TIERED_CACHED_ADJ_UI_TIER_SIZE = Math.min( mDefaultTieredCachedAdjUiTierSize, TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE); } public void start(ContentResolver resolver) { Loading Loading @@ -2255,6 +2267,12 @@ final class ActivityManagerConstants extends ContentObserver { DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_TIERED_CACHED_ADJ_DECAY_TIME, DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME); TIERED_CACHED_ADJ_UI_TIER_SIZE = Math.min( DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE, mDefaultTieredCachedAdjUiTierSize), TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE); } private void updateEnableNewOomAdj() { Loading Loading @@ -2510,6 +2528,8 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(USE_TIERED_CACHED_ADJ); pw.print(" "); pw.print(KEY_TIERED_CACHED_ADJ_DECAY_TIME); pw.print("="); pw.println(TIERED_CACHED_ADJ_DECAY_TIME); pw.print(" "); pw.print(KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE); pw.print("="); pw.println(TIERED_CACHED_ADJ_UI_TIER_SIZE); pw.print(" "); pw.print(KEY_ENABLE_NEW_OOMADJ); pw.print("="); pw.println(ENABLE_NEW_OOMADJ); Loading services/core/java/com/android/server/am/OomAdjuster.java +8 −6 Original line number Diff line number Diff line Loading @@ -1149,6 +1149,8 @@ public class OomAdjuster { if (mConstants.USE_TIERED_CACHED_ADJ) { final long now = mInjector.getUptimeMillis(); int uiTargetAdj = 10; // mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE is 10 by default, but is configurable. final int uiTierMaxAdj = 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; for (int i = numLru - 1; i >= 0; i--) { ProcessRecord app = lruList.get(i); final ProcessStateRecord state = app.mState; Loading @@ -1162,17 +1164,17 @@ public class OomAdjuster { if (opt != null && opt.isFreezeExempt()) { // BIND_WAIVE_PRIORITY and the like get oom_adj 900 targetAdj += 0; } else if (state.hasShownUi() && uiTargetAdj < 20) { // The most recent 10 apps that have shown UI get 910-919 } else if (state.hasShownUi() && uiTargetAdj < uiTierMaxAdj) { // The most recent UI-showing apps get [910, 910 + ui tier size). targetAdj += uiTargetAdj++; } else if ((state.getSetAdj() >= CACHED_APP_MIN_ADJ) && (state.getLastStateTime() + mConstants.TIERED_CACHED_ADJ_DECAY_TIME) < now) { // Older cached apps get 950 targetAdj += 50; // Older cached apps get 940 + ui tier size (950 by default). targetAdj += 40 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; } else { // Newer cached apps get 920 targetAdj += 20; // Newer cached apps get 910 + ui tier size (920 by default). targetAdj += 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; } state.setCurRawAdj(targetAdj); state.setCurAdj(psr.modifyRawOomAdj(targetAdj)); Loading services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +20 −16 Original line number Diff line number Diff line Loading @@ -167,8 +167,6 @@ public class MockingOomAdjusterTests { private static int sFirstCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + ProcessList.CACHED_APP_IMPORTANCE_LEVELS; private static int sFirstUiCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + 10; private static int sFirstNonUiCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + 20; private static int sUiTierSize = 10; private Context mContext; private ProcessStateController mProcessStateController; Loading @@ -177,6 +175,9 @@ public class MockingOomAdjusterTests { private ActivityManagerService mService; private OomAdjusterInjector mInjector = new OomAdjusterInjector(); private int mUiTierSize; private int mFirstNonUiCachedAdj; @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); Loading Loading @@ -247,6 +248,9 @@ public class MockingOomAdjusterTests { mService.mOomAdjuster.mAdjSeq = 10000; mService.mWakefulness = new AtomicInteger(PowerManagerInternal.WAKEFULNESS_AWAKE); mSetFlagsRule.enableFlags(Flags.FLAG_NEW_FGS_RESTRICTION_LOGIC); mUiTierSize = mService.mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; mFirstNonUiCachedAdj = sFirstUiCachedAdj + mUiTierSize; } @SuppressWarnings("GuardedBy") Loading Loading @@ -927,8 +931,8 @@ public class MockingOomAdjusterTests { final int mruIndex = numberOfApps - i - 1; int expectedAdj; if (mService.mConstants.USE_TIERED_CACHED_ADJ) { expectedAdj = (i < numberOfApps - sUiTierSize) ? sFirstNonUiCachedAdj : sFirstUiCachedAdj + mruIndex; expectedAdj = (i < numberOfApps - mUiTierSize) ? mFirstNonUiCachedAdj : sFirstUiCachedAdj + mruIndex; } else { expectedAdj = CACHED_APP_MIN_ADJ + (mruIndex * 2 * CACHED_APP_IMPORTANCE_LEVELS); if (expectedAdj > CACHED_APP_MAX_ADJ) { Loading Loading @@ -1108,7 +1112,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading Loading @@ -1545,7 +1549,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading @@ -1563,7 +1567,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app, client); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading Loading @@ -1694,7 +1698,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-empty"); // Follow up should not have been called again. Loading Loading @@ -2741,7 +2745,7 @@ public class MockingOomAdjusterTests { final int userOther = 1; // cachedAdj1 and cachedAdj2 will be read if USE_TIERED_CACHED_ADJ is disabled. Otherwise, // sFirstUiCachedAdj and sFirstNonUiCachedAdj are used instead. // sFirstUiCachedAdj and mFirstNonUiCachedAdj are used instead. final int cachedAdj1 = CACHED_APP_MIN_ADJ + CACHED_APP_IMPORTANCE_LEVELS; final int cachedAdj2 = cachedAdj1 + CACHED_APP_IMPORTANCE_LEVELS * 2; doReturn(userOwner).when(mService.mUserController).getCurrentUserId(); Loading Loading @@ -2789,7 +2793,7 @@ public class MockingOomAdjusterTests { mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-ui-services", true); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj2, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj2, SCHED_GROUP_BACKGROUND, "cch-started-services", true); app.mState.setSetProcState(PROCESS_STATE_NONEXISTENT); Loading @@ -2809,7 +2813,7 @@ public class MockingOomAdjusterTests { updateOomAdj(); assertProcStates(app, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); mProcessStateController.stopService(app.mServices, s); Loading @@ -2831,7 +2835,7 @@ public class MockingOomAdjusterTests { assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); app.mState.setSetProcState(PROCESS_STATE_NONEXISTENT); Loading @@ -2845,7 +2849,7 @@ public class MockingOomAdjusterTests { assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); doReturn(userOther).when(mService.mUserController).getCurrentUserId(); Loading @@ -2853,7 +2857,7 @@ public class MockingOomAdjusterTests { updateOomAdj(); assertProcStates(app, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); assertProcStates(app2, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); Loading Loading @@ -3157,7 +3161,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_SERVICE, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-started-services"); // Follow up should not have been called again. Loading Loading @@ -3192,7 +3196,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app1, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-empty"); Loading Loading
core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7054,6 +7054,9 @@ RSS is being collected instead. --> <item name="config_am_pssToRssThresholdModifier" format="float" type="dimen">1.5</item> <!-- The size of the UI tier if cached app oom_adj_score tiers are enabled. --> <integer name="config_am_tieredCachedAdjUiTierSize">10</integer> <!-- Whether unlocking and waking a device are sequenced --> <bool name="config_orderUnlockAndWake">false</bool> Loading
core/res/res/values/symbols.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5499,6 +5499,9 @@ <java-symbol type="bool" name="config_am_disablePssProfiling" /> <java-symbol type="dimen" name="config_am_pssToRssThresholdModifier" /> <!-- For OomAdjuster cached app tiers configurability --> <java-symbol type="integer" name="config_am_tieredCachedAdjUiTierSize" /> <java-symbol type="raw" name="default_ringtone_vibration_effect" /> <!-- For activity embedding divider --> Loading
services/core/java/com/android/server/am/ActivityManagerConstants.java +20 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ final class ActivityManagerConstants extends ContentObserver { static final String KEY_USE_TIERED_CACHED_ADJ = "use_tiered_cached_adj"; static final String KEY_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time"; static final String KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE = "tiered_cached_adj_ui_tier_size"; /** * Whether or not to enable the new oom adjuster implementation. Loading Loading @@ -248,6 +249,8 @@ final class ActivityManagerConstants extends ContentObserver { private static final boolean DEFAULT_USE_TIERED_CACHED_ADJ = Flags.oomadjusterCachedAppTiers(); private static final long DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME = 60 * 1000; private static final int TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE = 50; private final int mDefaultTieredCachedAdjUiTierSize; /** * The default value to {@link #KEY_ENABLE_NEW_OOMADJ}. Loading Loading @@ -1154,6 +1157,9 @@ final class ActivityManagerConstants extends ContentObserver { /** @see #KEY_TIERED_CACHED_ADJ_DECAY_TIME */ public long TIERED_CACHED_ADJ_DECAY_TIME = DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME; /** @see #KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE */ public int TIERED_CACHED_ADJ_UI_TIER_SIZE; /** @see #KEY_ENABLE_NEW_OOMADJ */ public boolean ENABLE_NEW_OOMADJ = DEFAULT_ENABLE_NEW_OOM_ADJ; Loading Loading @@ -1363,6 +1369,7 @@ final class ActivityManagerConstants extends ContentObserver { break; case KEY_USE_TIERED_CACHED_ADJ: case KEY_TIERED_CACHED_ADJ_DECAY_TIME: case KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE: updateUseTieredCachedAdj(); break; case KEY_DISABLE_APP_PROFILER_PSS_PROFILING: Loading Loading @@ -1466,6 +1473,11 @@ final class ActivityManagerConstants extends ContentObserver { mDefaultPssToRssThresholdModifier = context.getResources().getFloat( com.android.internal.R.dimen.config_am_pssToRssThresholdModifier); PSS_TO_RSS_THRESHOLD_MODIFIER = mDefaultPssToRssThresholdModifier; mDefaultTieredCachedAdjUiTierSize = context.getResources().getInteger( com.android.internal.R.integer.config_am_tieredCachedAdjUiTierSize); TIERED_CACHED_ADJ_UI_TIER_SIZE = Math.min( mDefaultTieredCachedAdjUiTierSize, TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE); } public void start(ContentResolver resolver) { Loading Loading @@ -2255,6 +2267,12 @@ final class ActivityManagerConstants extends ContentObserver { DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_TIERED_CACHED_ADJ_DECAY_TIME, DEFAULT_TIERED_CACHED_ADJ_DECAY_TIME); TIERED_CACHED_ADJ_UI_TIER_SIZE = Math.min( DeviceConfig.getInt( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE, mDefaultTieredCachedAdjUiTierSize), TIERED_CACHED_ADJ_MAX_UI_TIER_SIZE); } private void updateEnableNewOomAdj() { Loading Loading @@ -2510,6 +2528,8 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(USE_TIERED_CACHED_ADJ); pw.print(" "); pw.print(KEY_TIERED_CACHED_ADJ_DECAY_TIME); pw.print("="); pw.println(TIERED_CACHED_ADJ_DECAY_TIME); pw.print(" "); pw.print(KEY_TIERED_CACHED_ADJ_UI_TIER_SIZE); pw.print("="); pw.println(TIERED_CACHED_ADJ_UI_TIER_SIZE); pw.print(" "); pw.print(KEY_ENABLE_NEW_OOMADJ); pw.print("="); pw.println(ENABLE_NEW_OOMADJ); Loading
services/core/java/com/android/server/am/OomAdjuster.java +8 −6 Original line number Diff line number Diff line Loading @@ -1149,6 +1149,8 @@ public class OomAdjuster { if (mConstants.USE_TIERED_CACHED_ADJ) { final long now = mInjector.getUptimeMillis(); int uiTargetAdj = 10; // mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE is 10 by default, but is configurable. final int uiTierMaxAdj = 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; for (int i = numLru - 1; i >= 0; i--) { ProcessRecord app = lruList.get(i); final ProcessStateRecord state = app.mState; Loading @@ -1162,17 +1164,17 @@ public class OomAdjuster { if (opt != null && opt.isFreezeExempt()) { // BIND_WAIVE_PRIORITY and the like get oom_adj 900 targetAdj += 0; } else if (state.hasShownUi() && uiTargetAdj < 20) { // The most recent 10 apps that have shown UI get 910-919 } else if (state.hasShownUi() && uiTargetAdj < uiTierMaxAdj) { // The most recent UI-showing apps get [910, 910 + ui tier size). targetAdj += uiTargetAdj++; } else if ((state.getSetAdj() >= CACHED_APP_MIN_ADJ) && (state.getLastStateTime() + mConstants.TIERED_CACHED_ADJ_DECAY_TIME) < now) { // Older cached apps get 950 targetAdj += 50; // Older cached apps get 940 + ui tier size (950 by default). targetAdj += 40 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; } else { // Newer cached apps get 920 targetAdj += 20; // Newer cached apps get 910 + ui tier size (920 by default). targetAdj += 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; } state.setCurRawAdj(targetAdj); state.setCurAdj(psr.modifyRawOomAdj(targetAdj)); Loading
services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +20 −16 Original line number Diff line number Diff line Loading @@ -167,8 +167,6 @@ public class MockingOomAdjusterTests { private static int sFirstCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + ProcessList.CACHED_APP_IMPORTANCE_LEVELS; private static int sFirstUiCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + 10; private static int sFirstNonUiCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + 20; private static int sUiTierSize = 10; private Context mContext; private ProcessStateController mProcessStateController; Loading @@ -177,6 +175,9 @@ public class MockingOomAdjusterTests { private ActivityManagerService mService; private OomAdjusterInjector mInjector = new OomAdjusterInjector(); private int mUiTierSize; private int mFirstNonUiCachedAdj; @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); Loading Loading @@ -247,6 +248,9 @@ public class MockingOomAdjusterTests { mService.mOomAdjuster.mAdjSeq = 10000; mService.mWakefulness = new AtomicInteger(PowerManagerInternal.WAKEFULNESS_AWAKE); mSetFlagsRule.enableFlags(Flags.FLAG_NEW_FGS_RESTRICTION_LOGIC); mUiTierSize = mService.mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE; mFirstNonUiCachedAdj = sFirstUiCachedAdj + mUiTierSize; } @SuppressWarnings("GuardedBy") Loading Loading @@ -927,8 +931,8 @@ public class MockingOomAdjusterTests { final int mruIndex = numberOfApps - i - 1; int expectedAdj; if (mService.mConstants.USE_TIERED_CACHED_ADJ) { expectedAdj = (i < numberOfApps - sUiTierSize) ? sFirstNonUiCachedAdj : sFirstUiCachedAdj + mruIndex; expectedAdj = (i < numberOfApps - mUiTierSize) ? mFirstNonUiCachedAdj : sFirstUiCachedAdj + mruIndex; } else { expectedAdj = CACHED_APP_MIN_ADJ + (mruIndex * 2 * CACHED_APP_IMPORTANCE_LEVELS); if (expectedAdj > CACHED_APP_MAX_ADJ) { Loading Loading @@ -1108,7 +1112,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading Loading @@ -1545,7 +1549,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading @@ -1563,7 +1567,7 @@ public class MockingOomAdjusterTests { updateOomAdj(app, client); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND); } Loading Loading @@ -1694,7 +1698,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-empty"); // Follow up should not have been called again. Loading Loading @@ -2741,7 +2745,7 @@ public class MockingOomAdjusterTests { final int userOther = 1; // cachedAdj1 and cachedAdj2 will be read if USE_TIERED_CACHED_ADJ is disabled. Otherwise, // sFirstUiCachedAdj and sFirstNonUiCachedAdj are used instead. // sFirstUiCachedAdj and mFirstNonUiCachedAdj are used instead. final int cachedAdj1 = CACHED_APP_MIN_ADJ + CACHED_APP_IMPORTANCE_LEVELS; final int cachedAdj2 = cachedAdj1 + CACHED_APP_IMPORTANCE_LEVELS * 2; doReturn(userOwner).when(mService.mUserController).getCurrentUserId(); Loading Loading @@ -2789,7 +2793,7 @@ public class MockingOomAdjusterTests { mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-ui-services", true); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj2, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj2, SCHED_GROUP_BACKGROUND, "cch-started-services", true); app.mState.setSetProcState(PROCESS_STATE_NONEXISTENT); Loading @@ -2809,7 +2813,7 @@ public class MockingOomAdjusterTests { updateOomAdj(); assertProcStates(app, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); mProcessStateController.stopService(app.mServices, s); Loading @@ -2831,7 +2835,7 @@ public class MockingOomAdjusterTests { assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); app.mState.setSetProcState(PROCESS_STATE_NONEXISTENT); Loading @@ -2845,7 +2849,7 @@ public class MockingOomAdjusterTests { assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); assertProcStates(app2, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); doReturn(userOther).when(mService.mUserController).getCurrentUserId(); Loading @@ -2853,7 +2857,7 @@ public class MockingOomAdjusterTests { updateOomAdj(); assertProcStates(app, PROCESS_STATE_SERVICE, mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : cachedAdj1, mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1, SCHED_GROUP_BACKGROUND, "cch-started-services", true); assertProcStates(app2, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND, "started-services", false); Loading Loading @@ -3157,7 +3161,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app, PROCESS_STATE_SERVICE, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-started-services"); // Follow up should not have been called again. Loading Loading @@ -3192,7 +3196,7 @@ public class MockingOomAdjusterTests { mProcessStateController.runFollowUpUpdate(); final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstNonUiCachedAdj : sFirstCachedAdj; ? mFirstNonUiCachedAdj : sFirstCachedAdj; assertProcStates(app1, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND, "cch-empty"); Loading