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

Commit 98e97003 authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Skip scheduling cached app compaction if there's already a pending one" into sc-dev

parents 416b199d 16afc22c
Loading
Loading
Loading
Loading
+27 −14
Original line number Diff line number Diff line
@@ -382,11 +382,14 @@ public final class CachedAppOptimizer {
    @GuardedBy("mProcLock")
    void compactAppSome(ProcessRecord app) {
        app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_SOME);
        if (!app.mOptRecord.hasPendingCompact()) {
            app.mOptRecord.setHasPendingCompact(true);
            mPendingCompactionProcesses.add(app);
            mCompactionHandler.sendMessage(
                    mCompactionHandler.obtainMessage(
                    COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
        }
    }

    @GuardedBy("mProcLock")
    void compactAppFull(ProcessRecord app) {
@@ -396,10 +399,13 @@ public final class CachedAppOptimizer {
                && app.mState.getCurAdj() >= mCompactThrottleMinOomAdj
                && app.mState.getCurAdj() <= mCompactThrottleMaxOomAdj) {
            app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_FULL);
            if (!app.mOptRecord.hasPendingCompact()) {
                app.mOptRecord.setHasPendingCompact(true);
                mPendingCompactionProcesses.add(app);
                mCompactionHandler.sendMessage(
                        mCompactionHandler.obtainMessage(
                        COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
            }
        } else {
            if (DEBUG_COMPACTION) {
                Slog.d(TAG_AM, "Skipping full compaction for " + app.processName
@@ -412,11 +418,14 @@ public final class CachedAppOptimizer {
    @GuardedBy("mProcLock")
    void compactAppPersistent(ProcessRecord app) {
        app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_PERSISTENT);
        if (!app.mOptRecord.hasPendingCompact()) {
            app.mOptRecord.setHasPendingCompact(true);
            mPendingCompactionProcesses.add(app);
            mCompactionHandler.sendMessage(
                    mCompactionHandler.obtainMessage(
                    COMPACT_PROCESS_MSG, app.mState.getCurAdj(), app.mState.getSetProcState()));
        }
    }

    @GuardedBy("mProcLock")
    boolean shouldCompactPersistent(ProcessRecord app, long now) {
@@ -427,11 +436,14 @@ public final class CachedAppOptimizer {
    @GuardedBy("mProcLock")
    void compactAppBfgs(ProcessRecord app) {
        app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_BFGS);
        if (!app.mOptRecord.hasPendingCompact()) {
            app.mOptRecord.setHasPendingCompact(true);
            mPendingCompactionProcesses.add(app);
            mCompactionHandler.sendMessage(
                    mCompactionHandler.obtainMessage(
                    COMPACT_PROCESS_MSG, app.mState.getCurAdj(), app.mState.getSetProcState()));
        }
    }

    @GuardedBy("mProcLock")
    boolean shouldCompactBFGS(ProcessRecord app, long now) {
@@ -954,6 +966,7 @@ public final class CachedAppOptimizer {
                        pendingAction = opt.getReqCompactAction();
                        pid = proc.getPid();
                        name = proc.processName;
                        opt.setHasPendingCompact(false);

                        // don't compact if the process has returned to perceptible
                        // and this is only a cached/home/prev compaction
+16 −0
Original line number Diff line number Diff line
@@ -46,6 +46,12 @@ final class ProcessCachedOptimizerRecord {
    @GuardedBy("mProcLock")
    private int mLastCompactAction;

    /**
     * This process has been scheduled for a memory compaction.
     */
    @GuardedBy("mProcLock")
    private boolean mPendingCompact;

    /**
     * True when the process is frozen.
     */
@@ -100,6 +106,16 @@ final class ProcessCachedOptimizerRecord {
        mLastCompactAction = lastCompactAction;
    }

    @GuardedBy("mProcLock")
    boolean hasPendingCompact() {
        return mPendingCompact;
    }

    @GuardedBy("mProcLock")
    void setHasPendingCompact(boolean pendingCompact) {
        mPendingCompact = pendingCompact;
    }

    @GuardedBy("mProcLock")
    boolean isFrozen() {
        return mFrozen;