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

Commit 9d77aaec authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix for incorrect cycle evaluation in computeOomAdj DO NOT MERGE" into pi-dev

parents b4f7c414 d2aa4e19
Loading
Loading
Loading
Loading
+25 −11
Original line number Diff line number Diff line
@@ -23042,6 +23042,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                // The process is being computed, so there is a cycle. We cannot
                // rely on this process's state.
                app.containsCycle = true;
                return false;
            }
        }
@@ -23066,6 +23067,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        final int logUid = mCurOomAdjUid;
        int prevAppAdj = app.curAdj;
        int prevProcState = app.curProcState;
        if (app.maxAdj <= ProcessList.FOREGROUND_APP_ADJ) {
            // The max adjustment doesn't allow this app to be anything
@@ -23544,12 +23546,17 @@ public class ActivityManagerService extends IActivityManager.Stub
                        ProcessRecord client = cr.binding.client;
                        computeOomAdjLocked(client, cachedAdj, TOP_APP, doingAll, now);
                        if (client.containsCycle) {
                            // We've detected a cycle. We should ignore this connection and allow
                            // this process to retry computeOomAdjLocked later in case a later-checked
                            // connection from a client  would raise its priority legitimately.
                            // We've detected a cycle. We should retry computeOomAdjLocked later in
                            // case a later-checked connection from a client  would raise its
                            // priority legitimately.
                            app.containsCycle = true;
                            // If the client has not been completely evaluated, skip using its
                            // priority. Else use the conservative value for now and look for a
                            // better state in the next iteration.
                            if (client.completedAdjSeq < mAdjSeq) {
                                continue;
                            }
                        }
                        int clientAdj = client.curRawAdj;
                        int clientProcState = client.curProcState;
                        if (clientProcState >= ActivityManager.PROCESS_STATE_CACHED_ACTIVITY) {
@@ -23771,12 +23778,17 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
                computeOomAdjLocked(client, cachedAdj, TOP_APP, doingAll, now);
                if (client.containsCycle) {
                    // We've detected a cycle. We should ignore this connection and allow
                    // this process to retry computeOomAdjLocked later in case a later-checked
                    // connection from a client  would raise its priority legitimately.
                    // We've detected a cycle. We should retry computeOomAdjLocked later in
                    // case a later-checked connection from a client  would raise its
                    // priority legitimately.
                    app.containsCycle = true;
                    // If the client has not been completely evaluated, skip using its
                    // priority. Else use the conservative value for now and look for a
                    // better state in the next iteration.
                    if (client.completedAdjSeq < mAdjSeq) {
                        continue;
                    }
                }
                int clientAdj = client.curRawAdj;
                int clientProcState = client.curProcState;
                if (clientProcState >= ActivityManager.PROCESS_STATE_CACHED_ACTIVITY) {
@@ -24007,8 +24019,8 @@ public class ActivityManagerService extends IActivityManager.Stub
        app.foregroundActivities = foregroundActivities;
        app.completedAdjSeq = mAdjSeq;
        // if curAdj is less than prevAppAdj, then this process was promoted
        return app.curAdj < prevAppAdj;
        // if curAdj or curProcState improved, then this process was promoted
        return app.curAdj < prevAppAdj || app.curProcState < prevProcState;
    }
    /**
@@ -25061,7 +25073,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        // - Continue retrying until no process was promoted.
        // - Iterate from least important to most important.
        int cycleCount = 0;
        while (retryCycles) {
        while (retryCycles && cycleCount < 10) {
            cycleCount++;
            retryCycles = false;
@@ -25076,12 +25088,14 @@ public class ActivityManagerService extends IActivityManager.Stub
            for (int i=0; i<N; i++) {
                ProcessRecord app = mLruProcesses.get(i);
                if (!app.killedByAm && app.thread != null && app.containsCycle == true) {
                    if (computeOomAdjLocked(app, ProcessList.UNKNOWN_ADJ, TOP_APP, true, now)) {
                        retryCycles = true;
                    }
                }
            }
        }
        for (int i=N-1; i>=0; i--) {
            ProcessRecord app = mLruProcesses.get(i);
            if (!app.killedByAm && app.thread != null) {