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

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

Merge "Fix incomplete consolidation of kill-all-background"

parents 0879ad0b 4405d8af
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -3969,11 +3969,12 @@ public class ActivityManagerService extends IActivityManager.Stub
        final long callingId = Binder.clearCallingIdentity();
        try {
            synchronized (this) {
                mProcessList.killAllBackgroundProcessesLocked();
                // Allow memory level to go down (the flag needs to be set before updating oom adj)
                // because this method is also used to simulate low memory.
                mAllowLowerMemLevel = true;
                mProcessList.killPackageProcessesLocked(null /* packageName */, -1 /* appId */,
                        UserHandle.USER_ALL, ProcessList.CACHED_APP_MIN_ADJ, "kill all background");
                updateOomAdjLocked();
                doLowMemReportIfNeededLocked(null);
            }
        } finally {
+5 −19
Original line number Diff line number Diff line
@@ -2085,25 +2085,6 @@ public final class ProcessList {
        }
    }

    void killAllBackgroundProcessesLocked() {
        final ArrayList<ProcessRecord> procs = new ArrayList<>();
        final int NP = mProcessNames.getMap().size();
        for (int ip = 0; ip < NP; ip++) {
            final SparseArray<ProcessRecord> apps = mProcessNames.getMap().valueAt(ip);
            final int NA = apps.size();
            for (int ia = 0; ia < NA; ia++) {
                final ProcessRecord app = apps.valueAt(ia);
                if (app.isPersistent()) {
                    // We don't kill persistent processes.
                    continue;
                }
                if (app.removed || app.setAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
                    procs.add(app);
                }
            }
        }
    }

    @GuardedBy("mService")
    boolean killPackageProcessesLocked(String packageName, int appId, int userId, int minOomAdj,
            String reason) {
@@ -2140,6 +2121,11 @@ public final class ProcessList {

                // Skip process if it doesn't meet our oom adj requirement.
                if (app.setAdj < minOomAdj) {
                    // Note it is still possible to have a process with oom adj 0 in the killed
                    // processes, but it does not mean misjudgment. E.g. a bound service process
                    // and its client activity process are both in the background, so they are
                    // collected to be killed. If the client activity is killed first, the service
                    // may be scheduled to unbind and become an executing service (oom adj 0).
                    continue;
                }