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

Commit 8726b3b8 authored by Christopher Morin's avatar Christopher Morin Committed by Android (Google) Code Review
Browse files

Merge "Reland "OOM score management""

parents 71ffe730 0260f3d7
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -3080,16 +3080,32 @@ public class ActivityManager {
         */
        public int processState;

        /**
         * Whether the app is focused in multi-window environment.
         * @hide
         */
        public boolean isFocused;

        /**
         * Copy of {@link com.android.server.am.ProcessRecord#lastActivityTime} of the process.
         * @hide
         */
        public long lastActivityTime;

        public RunningAppProcessInfo() {
            importance = IMPORTANCE_FOREGROUND;
            importanceReasonCode = REASON_UNKNOWN;
            processState = PROCESS_STATE_IMPORTANT_FOREGROUND;
            isFocused = false;
            lastActivityTime = 0;
        }

        public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) {
            processName = pProcessName;
            pid = pPid;
            pkgList = pArr;
            isFocused = false;
            lastActivityTime = 0;
        }

        public int describeContents() {
@@ -3110,6 +3126,8 @@ public class ActivityManager {
            ComponentName.writeToParcel(importanceReasonComponent, dest);
            dest.writeInt(importanceReasonImportance);
            dest.writeInt(processState);
            dest.writeInt(isFocused ? 1 : 0);
            dest.writeLong(lastActivityTime);
        }

        public void readFromParcel(Parcel source) {
@@ -3126,6 +3144,8 @@ public class ActivityManager {
            importanceReasonComponent = ComponentName.readFromParcel(source);
            importanceReasonImportance = source.readInt();
            processState = source.readInt();
            isFocused = source.readInt() != 0;
            lastActivityTime = source.readLong();
        }

        public static final Creator<RunningAppProcessInfo> CREATOR =
+16 −12
Original line number Diff line number Diff line
@@ -12122,7 +12122,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        return imp;
    }
    private void fillInProcMemInfo(ProcessRecord app,
    private void fillInProcMemInfoLocked(ProcessRecord app,
            ActivityManager.RunningAppProcessInfo outInfo,
            int clientTargetSdk) {
        outInfo.pid = app.pid;
@@ -12142,6 +12142,8 @@ public class ActivityManagerService extends IActivityManager.Stub
        outInfo.importance = procStateToImportance(procState, adj, outInfo, clientTargetSdk);
        outInfo.importanceReasonCode = app.adjTypeCode;
        outInfo.processState = app.curProcState;
        outInfo.isFocused = (app == getTopAppLocked());
        outInfo.lastActivityTime = app.lastActivityTime;
    }
    @Override
@@ -12172,7 +12174,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    ActivityManager.RunningAppProcessInfo currApp =
                        new ActivityManager.RunningAppProcessInfo(app.processName,
                                app.pid, app.getPackageList());
                    fillInProcMemInfo(app, currApp, clientTargetSdk);
                    fillInProcMemInfoLocked(app, currApp, clientTargetSdk);
                    if (app.adjSource instanceof ProcessRecord) {
                        currApp.importanceReasonPid = ((ProcessRecord)app.adjSource).pid;
                        currApp.importanceReasonImportance =
@@ -12241,7 +12243,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                proc = mPidsSelfLocked.get(Binder.getCallingPid());
            }
            if (proc != null) {
                fillInProcMemInfo(proc, outState, clientTargetSdk);
                fillInProcMemInfoLocked(proc, outState, clientTargetSdk);
            }
        }
    }
@@ -20696,23 +20698,25 @@ public class ActivityManagerService extends IActivityManager.Stub
        return success;
    }
    @GuardedBy("this")
    ProcessRecord getTopAppLocked() {
        final ActivityRecord TOP_ACT = resumedAppLocked();
        if (TOP_ACT != null && TOP_ACT.hasProcess()) {
            return (ProcessRecord) TOP_ACT.app.mOwner;
        } else {
            return null;
        }
    }
    @GuardedBy("this")
    final void updateOomAdjLocked() {
        mOomAdjProfiler.oomAdjStarted();
        final ActivityRecord TOP_ACT = resumedAppLocked();
        final ProcessRecord TOP_APP = TOP_ACT != null && TOP_ACT.hasProcess()
                ? (ProcessRecord) TOP_ACT.app.mOwner : null;
        final ProcessRecord TOP_APP = getTopAppLocked();
        final long now = SystemClock.uptimeMillis();
        final long nowElapsed = SystemClock.elapsedRealtime();
        final long oldTime = now - ProcessList.MAX_EMPTY_TIME;
        final int N = mLruProcesses.size();
        if (false) {
            RuntimeException e = new RuntimeException();
            e.fillInStackTrace();
            Slog.i(TAG, "updateOomAdj: top=" + TOP_ACT, e);
        }
        // Reset state in all uid records.
        for (int i=mActiveUids.size()-1; i>=0; i--) {
            final UidRecord uidRec = mActiveUids.valueAt(i);