Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47eb323c authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Simplify CachedAppOptimizer.freezeAppSync variants.

Treat delayMillis=0 as indication that caller wants to
freeze a process immediately.

Bug: 327496592
Test: atest services/tests/mockingservicestests/src/com/android/server/am/ServiceBindingOomAdjPolicyTest.java
Change-Id: I615716baabd955f15129d01b79118a9eb59a250e
parent a7a47f65
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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;
+13 −7
Original line number Diff line number Diff line
@@ -1413,9 +1413,14 @@ public final class CachedAppOptimizer {
        freezeAppAsyncLSP(app, updateEarliestFreezableTime(app, mFreezerDebounceTimeout));
    }

    @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));
+3 −4
Original line number Diff line number Diff line
@@ -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);
        }