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

Commit a7795f35 authored by Misha Wagner's avatar Misha Wagner Committed by Android (Google) Code Review
Browse files

Merge changes I49d02362,I8cdf96ed

* changes:
  Change CacheOomRanker's "uses" feature.
  Fix race condition when using mPreserveTopNApps.
parents 5775a0f8 480cc312
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -771,6 +771,11 @@ public class ActivityManager {
        return procState >= PROCESS_STATE_TRANSIENT_BACKGROUND;
    }

    /** @hide Should this process state be considered in the cache? */
    public static final boolean isProcStateCached(int procState) {
        return procState >= PROCESS_STATE_CACHED_ACTIVITY;
    }

    /** @hide Is this a foreground service type? */
    public static boolean isForegroundService(int procState) {
        return procState == PROCESS_STATE_FOREGROUND_SERVICE;
+7 −5
Original line number Diff line number Diff line
@@ -243,6 +243,7 @@ public class CacheOomRanker {
        float lruWeight;
        float usesWeight;
        float rssWeight;
        int preserveTopNApps;
        int[] lruPositions;
        RankedProcessRecord[] scoredProcessRecords;

@@ -250,6 +251,7 @@ public class CacheOomRanker {
            lruWeight = mLruWeight;
            usesWeight = mUsesWeight;
            rssWeight = mRssWeight;
            preserveTopNApps = mPreserveTopNApps;
            lruPositions = mLruPositions;
            scoredProcessRecords = mScoredProcessRecords;
        }
@@ -276,19 +278,19 @@ public class CacheOomRanker {
            ++numProcessesEvaluated;
        }

        // Count how many apps we're not re-ranking (up to mPreserveTopNApps).
        // Count how many apps we're not re-ranking (up to preserveTopNApps).
        int numProcessesNotReRanked = 0;
        while (numProcessesEvaluated < lruProcessServiceStart
                && numProcessesNotReRanked < mPreserveTopNApps) {
                && numProcessesNotReRanked < preserveTopNApps) {
            ProcessRecord process = lruList.get(numProcessesEvaluated);
            if (appCanBeReRanked(process)) {
                numProcessesNotReRanked++;
            }
            numProcessesEvaluated++;
        }
        // Exclude the top `mPreserveTopNApps` apps from re-ranking.
        if (numProcessesNotReRanked < mPreserveTopNApps) {
            numProcessesReRanked -= mPreserveTopNApps - numProcessesNotReRanked;
        // Exclude the top `preserveTopNApps` apps from re-ranking.
        if (numProcessesNotReRanked < preserveTopNApps) {
            numProcessesReRanked -= preserveTopNApps - numProcessesNotReRanked;
            if (numProcessesReRanked < 0) {
                numProcessesReRanked = 0;
            }
+5 −6
Original line number Diff line number Diff line
@@ -622,6 +622,10 @@ final class ProcessStateRecord {

    @GuardedBy({"mService", "mProcLock"})
    void setSetProcState(int setProcState) {
        if (ActivityManager.isProcStateCached(mSetProcState)
                && !ActivityManager.isProcStateCached(setProcState)) {
            mCacheOomRankerUseCount++;
        }
        mSetProcState = setProcState;
    }

@@ -885,12 +889,7 @@ final class ProcessStateRecord {

    @GuardedBy("mService")
    void setCached(boolean cached) {
        if (mCached != cached) {
        mCached = cached;
            if (cached) {
                ++mCacheOomRankerUseCount;
            }
        }
    }

    @GuardedBy("mService")
+5 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;

import android.app.ActivityManager;
import android.app.IApplicationThread;
import android.content.ComponentName;
import android.content.Context;
@@ -581,7 +582,7 @@ public class CacheOomRankerTest {
    }

    private ProcessRecord nextProcessRecord(int setAdj, long lastActivityTime, long lastRss,
            int returnedToCacheCount) {
            int wentToForegroundCount) {
        ApplicationInfo ai = new ApplicationInfo();
        ai.packageName = "a.package.name" + mNextPackageName++;
        ProcessRecord app = new ProcessRecord(mAms, ai, ai.packageName + ":process", mNextUid++);
@@ -593,9 +594,9 @@ public class CacheOomRankerTest {
        app.setLastActivityTime(lastActivityTime);
        app.mProfile.setLastRss(lastRss);
        app.mState.setCached(false);
        for (int i = 0; i < returnedToCacheCount; ++i) {
            app.mState.setCached(false);
            app.mState.setCached(true);
        for (int i = 0; i < wentToForegroundCount; ++i) {
            app.mState.setSetProcState(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
            app.mState.setSetProcState(ActivityManager.PROCESS_STATE_CACHED_RECENT);
        }
        // Sets the thread returned by ProcessRecord#getThread, which we use to check whether the
        // app is currently launching.