diff options
3 files changed, 17 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 4ebabdc4cc66..5a97e87f53f7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -1164,8 +1164,7 @@ final class ActivityManagerShellCommand extends ShellCommand { synchronized (mInternal) { synchronized (mInternal.mProcLock) { app.mOptRecord.setFreezeSticky(isSticky); - mInternal.mOomAdjuster.mCachedAppOptimizer.freezeAppAsyncInternalLSP( - app, 0 /* delayMillis */, true /* force */, false /* immediate */); + mInternal.mOomAdjuster.mCachedAppOptimizer.forceFreezeAppAsyncLSP(app); } } return 0; diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 0cf557588958..6e20f6cc877d 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1414,8 +1414,13 @@ public final class CachedAppOptimizer { } @GuardedBy({"mAm", "mProcLock"}) + void forceFreezeAppAsyncLSP(ProcessRecord app) { + freezeAppAsyncInternalLSP(app, 0 /* delayMillis */, true /* force */); + } + + @GuardedBy({"mAm", "mProcLock"}) private void freezeAppAsyncLSP(ProcessRecord app, @UptimeMillisLong long delayMillis) { - freezeAppAsyncInternalLSP(app, delayMillis, false, false); + freezeAppAsyncInternalLSP(app, delayMillis, false /* force */); } @GuardedBy({"mAm", "mProcLock"}) @@ -1427,17 +1432,18 @@ public final class CachedAppOptimizer { // and remove this method. @GuardedBy({"mAm", "mProcLock"}) void freezeAppAsyncImmediateLSP(ProcessRecord app) { - freezeAppAsyncInternalLSP(app, 0, false, true); + freezeAppAsyncInternalLSP(app, 0 /* delayMillis */, false /* force */); } - // TODO: Update this method to be private and have the existing clients call different methods. - // This "internal" method should not be directly triggered by clients outside this class. @GuardedBy({"mAm", "mProcLock"}) - void freezeAppAsyncInternalLSP(ProcessRecord app, @UptimeMillisLong long delayMillis, - boolean force, boolean immediate) { + private void freezeAppAsyncInternalLSP(ProcessRecord app, @UptimeMillisLong long delayMillis, + boolean force) { final ProcessCachedOptimizerRecord opt = app.mOptRecord; if (opt.isPendingFreeze()) { - if (immediate) { + if (delayMillis == 0) { + // Caller is requesting to freeze the process without delay, so remove + // any already posted messages which would have been handled with a delay and + // post a new message without a delay. mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app); mFreezeHandler.sendMessage(mFreezeHandler.obtainMessage( SET_FROZEN_PROCESS_MSG, DO_FREEZE, 0, app)); diff --git a/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java b/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java index 97b7af8e43ad..680ab1634cb2 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java @@ -36,7 +36,6 @@ import static com.android.server.am.ProcessList.SERVICE_ADJ; import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; @@ -185,8 +184,8 @@ public final class ServiceBindingOomAdjPolicyTest { doReturn(false).when(mAms.mAtmInternal).hasSystemAlertWindowPermission(anyInt(), anyInt(), any()); doReturn(true).when(mAms.mOomAdjuster.mCachedAppOptimizer).useFreezer(); - doNothing().when(mAms.mOomAdjuster.mCachedAppOptimizer).freezeAppAsyncInternalLSP( - any(), anyLong(), anyBoolean(), anyBoolean()); + doNothing().when(mAms.mOomAdjuster.mCachedAppOptimizer).freezeAppAsyncAtEarliestLSP( + any()); doReturn(false).when(mAms.mAppProfiler).updateLowMemStateLSP(anyInt(), anyInt(), anyInt(), anyLong()); @@ -503,7 +502,7 @@ public final class ServiceBindingOomAdjPolicyTest { if (clientApp.isFreezable()) { verify(mAms.mOomAdjuster.mCachedAppOptimizer, times(Flags.serviceBindingOomAdjPolicy() ? 1 : 0)) - .freezeAppAsyncInternalLSP(eq(clientApp), eq(0L), anyBoolean(), anyBoolean()); + .freezeAppAsyncAtEarliestLSP(eq(clientApp)); clearInvocations(mAms.mOomAdjuster.mCachedAppOptimizer); } |