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

Commit 763f2073 authored by Amith Yamasani's avatar Amith Yamasani Committed by android-build-merger
Browse files

Merge "Include oom_adjust reason in trace" into qt-dev am: 0ba84f8f

am: 1cace9a1

Change-Id: Ibd20deba405412eeac05876adc4c30b5b163ca26
parents bae97c2f 1cace9a1
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -1806,7 +1806,7 @@ public final class ActiveServices {
                                || (callerApp.getCurProcState() <= ActivityManager.PROCESS_STATE_TOP
                                        && (flags & Context.BIND_TREAT_LIKE_ACTIVITY) != 0),
                        b.client);
                mAm.updateOomAdjLocked();
                mAm.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_BIND_SERVICE);
            }

            if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Bind " + s + " with " + b
@@ -1957,11 +1957,12 @@ public final class ActiveServices {
                                r.binding.service.app.hasClientActivities()
                                || r.binding.service.app.treatLikeActivity, null);
                    }
                    mAm.updateOomAdjLocked(r.binding.service.app, false);
                    mAm.updateOomAdjLocked(r.binding.service.app, false,
                            OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
                }
            }

            mAm.updateOomAdjLocked();
            mAm.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);

        } finally {
            Binder.restoreCallingIdentity(origId);
@@ -2676,7 +2677,7 @@ public final class ActiveServices {
        bumpServiceExecutingLocked(r, execInFg, "create");
        mAm.updateLruProcessLocked(app, false, null);
        updateServiceForegroundLocked(r.app, /* oomAdj= */ false);
        mAm.updateOomAdjLocked();
        mAm.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_START_SERVICE);

        boolean created = false;
        try {
@@ -2797,7 +2798,7 @@ public final class ActiveServices {
            bumpServiceExecutingLocked(r, execInFg, "start");
            if (!oomAdjusted) {
                oomAdjusted = true;
                mAm.updateOomAdjLocked(r.app, true);
                mAm.updateOomAdjLocked(r.app, true, OomAdjuster.OOM_ADJ_REASON_START_SERVICE);
            }
            if (r.fgRequired && !r.fgWaiting) {
                if (!r.isForeground) {
@@ -2923,7 +2924,8 @@ public final class ActiveServices {
                if (ibr.hasBound) {
                    try {
                        bumpServiceExecutingLocked(r, false, "bring down unbind");
                        mAm.updateOomAdjLocked(r.app, true);
                        mAm.updateOomAdjLocked(r.app, true,
                                OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
                        ibr.hasBound = false;
                        ibr.requested = false;
                        r.app.thread.scheduleUnbindService(r,
@@ -3038,7 +3040,8 @@ public final class ActiveServices {
                    bumpServiceExecutingLocked(r, false, "destroy");
                    mDestroyingServices.add(r);
                    r.destroying = true;
                    mAm.updateOomAdjLocked(r.app, true);
                    mAm.updateOomAdjLocked(r.app, true,
                            OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
                    r.app.thread.scheduleStopService(r);
                } catch (Exception e) {
                    Slog.w(TAG, "Exception when destroying service "
@@ -3143,7 +3146,8 @@ public final class ActiveServices {
                        // it to go down there and we want it to start out near the top.
                        mAm.updateLruProcessLocked(s.app, false, null);
                    }
                    mAm.updateOomAdjLocked(s.app, true);
                    mAm.updateOomAdjLocked(s.app, true,
                            OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
                    b.intent.hasBound = false;
                    // Assume the client doesn't want to know about a rebind;
                    // we will deal with that later if it asks for one.
@@ -3296,7 +3300,7 @@ public final class ActiveServices {
                    mDestroyingServices.remove(r);
                    r.bindings.clear();
                }
                mAm.updateOomAdjLocked(r.app, true);
                mAm.updateOomAdjLocked(r.app, true, OomAdjuster.OOM_ADJ_REASON_UNBIND_SERVICE);
            }
            r.executeFg = false;
            if (r.tracker != null) {
+34 −31
Original line number Diff line number Diff line
@@ -1972,7 +1972,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                app.makeActive(mSystemThread.getApplicationThread(), mProcessStats);
                mPidsSelfLocked.put(app.pid, app);
                mProcessList.updateLruProcessLocked(app, false, null);
                updateOomAdjLocked();
                updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE);
            }
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException(
@@ -2456,7 +2456,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        // bind background threads to little cores
        // this is expected to fail inside of framework tests because apps can't touch cpusets directly
        // make sure we've already adjusted system_server's internal view of itself first
        updateOomAdjLocked();
        updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE);
        try {
            Process.setThreadGroupAndCpuset(BackgroundThread.get().getThreadId(),
                    Process.THREAD_GROUP_SYSTEM);
@@ -3634,7 +3634,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            handleAppDiedLocked(app, false, true);
            if (doOomAdj) {
                updateOomAdjLocked();
                updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_PROCESS_END);
            }
            if (doLowMem) {
                doLowMemReportIfNeededLocked(app);
@@ -5002,7 +5002,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        if (!didSomething) {
            updateOomAdjLocked();
            updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN);
            checkTime(startTime, "attachApplicationLocked: after updateOomAdjLocked");
        }
@@ -5485,7 +5485,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        synchronized (this) {
            mConstants.setOverrideMaxCachedProcesses(max);
        }
        trimApplications();
        trimApplications(OomAdjuster.OOM_ADJ_REASON_PROCESS_END);
    }
    @Override
@@ -5511,7 +5511,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                pr.forcingToImportant = null;
                updateProcessForegroundLocked(pr, false, 0, false);
            }
            updateOomAdjLocked();
            updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
        }
    }
@@ -5557,7 +5557,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            }
            if (changed) {
                updateOomAdjLocked();
                updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
            }
        }
    }
@@ -6714,7 +6714,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                checkTime(startTime, "getContentProviderImpl: before updateOomAdj");
                final int verifiedAdj = cpr.proc.verifiedAdj;
                boolean success = updateOomAdjLocked(cpr.proc, true);
                boolean success = updateOomAdjLocked(cpr.proc, true,
                        OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER);
                // XXX things have changed so updateOomAdjLocked doesn't actually tell us
                // if the process has been successfully adjusted.  So to reduce races with
                // it, we will check whether the process still exists.  Note that this doesn't
@@ -7147,7 +7148,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    throw new NullPointerException("connection is null");
                }
                if (decProviderCountLocked(conn, null, null, stable)) {
                    updateOomAdjLocked();
                    updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER);
                }
            }
        } finally {
@@ -7188,7 +7189,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            ContentProviderRecord localCpr = mProviderMap.getProviderByClass(comp, userId);
            if (localCpr.hasExternalProcessHandles()) {
                if (localCpr.removeExternalProcessHandleLocked(token)) {
                    updateOomAdjLocked();
                    updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_REMOVE_PROVIDER);
                } else {
                    Slog.e(TAG, "Attmpt to remove content provider " + localCpr
                            + " with no external reference for token: "
@@ -7255,7 +7256,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                        dst.setProcess(r);
                        dst.notifyAll();
                    }
                    updateOomAdjLocked(r, true);
                    updateOomAdjLocked(r, true, OomAdjuster.OOM_ADJ_REASON_GET_PROVIDER);
                    maybeUpdateProviderUsageStatsLocked(r, src.info.packageName,
                            src.info.authority);
                }
@@ -7645,7 +7646,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    new HostingRecord("added application",
                            customProcess != null ? customProcess : info.processName));
            mProcessList.updateLruProcessLocked(app, false, null);
            updateOomAdjLocked();
            updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_PROCESS_BEGIN);
        }
        // This package really, really can not be stopped.
@@ -7740,7 +7741,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                mActivityTaskManager.onScreenAwakeChanged(isAwake);
                mOomAdjProfiler.onWakefulnessChanged(wakefulness);
            }
            updateOomAdjLocked();
            updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
        }
    }
@@ -8320,7 +8321,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    }
                }
                if (changed) {
                    updateOomAdjLocked(pr, true);
                    updateOomAdjLocked(pr, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
                }
            }
        } finally {
@@ -8350,7 +8351,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                Slog.i(TAG, "Setting runningRemoteAnimation=" + pr.runningRemoteAnimation
                        + " for pid=" + pid);
            }
            updateOomAdjLocked(pr, true);
            updateOomAdjLocked(pr, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
        }
    }
@@ -13984,7 +13985,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            mBackupTargets.put(targetUserId, r);
            // Try not to kill the process during backup
            updateOomAdjLocked(proc, true);
            updateOomAdjLocked(proc, true, OomAdjuster.OOM_ADJ_REASON_NONE);
            // If the process is already attached, schedule the creation of the backup agent now.
            // If it is not yet live, this will be done when it attaches to the framework.
@@ -14099,7 +14100,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                // Not backing this app up any more; reset its OOM adjustment
                final ProcessRecord proc = backupTarget.app;
                updateOomAdjLocked(proc, true);
                updateOomAdjLocked(proc, true, OomAdjuster.OOM_ADJ_REASON_NONE);
                proc.inFullBackup = false;
                oldBackupUid = backupTarget != null ? backupTarget.appInfo.uid : -1;
@@ -14388,7 +14389,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            // If we actually concluded any broadcasts, we might now be able
            // to trim the recipients' apps from our working set
            if (doTrim) {
                trimApplications();
                trimApplications(OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER);
                return;
            }
@@ -15463,7 +15464,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    r.queue.processNextBroadcastLocked(/*fromMsg=*/ false, /*skipOomAdj=*/ true);
                }
                // updateOomAdjLocked() will be done here
                trimApplicationsLocked();
                trimApplicationsLocked(OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER);
            }
        } finally {
@@ -16448,7 +16449,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            item.foregroundServiceTypes = fgServiceTypes;
            if (oomAdj) {
                updateOomAdjLocked();
                updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
            }
        }
    }
@@ -16496,11 +16497,13 @@ public class ActivityManagerService extends IActivityManager.Stub
     * @param app The process to update
     * @param oomAdjAll If it's ok to call updateOomAdjLocked() for all running apps
     *                  if necessary, or skip.
     * @param oomAdjReason
     * @return whether updateOomAdjLocked(app) was successful.
     */
    @GuardedBy("this")
    final boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll) {
        return mOomAdjuster.updateOomAdjLocked(app, oomAdjAll);
    final boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll,
            String oomAdjReason) {
        return mOomAdjuster.updateOomAdjLocked(app, oomAdjAll, oomAdjReason);
    }
    static final class ProcStatsRunnable implements Runnable {
@@ -16693,8 +16696,8 @@ public class ActivityManagerService extends IActivityManager.Stub
    }
    @GuardedBy("this")
    final void updateOomAdjLocked() {
        mOomAdjuster.updateOomAdjLocked();
    final void updateOomAdjLocked(String oomAdjReason) {
        mOomAdjuster.updateOomAdjLocked(oomAdjReason);
    }
    @Override
@@ -16979,14 +16982,14 @@ public class ActivityManagerService extends IActivityManager.Stub
        mOomAdjuster.setUidTempWhitelistStateLocked(uid, onWhitelist);
    }
    final void trimApplications() {
    final void trimApplications(String oomAdjReason) {
        synchronized (this) {
            trimApplicationsLocked();
            trimApplicationsLocked(oomAdjReason);
        }
    }
    @GuardedBy("this")
    final void trimApplicationsLocked() {
    final void trimApplicationsLocked(String oomAdjReason) {
        // First remove any unused application processes whose package
        // has been removed.
        for (int i = mProcessList.mRemovedProcesses.size() - 1; i >= 0; i--) {
@@ -17018,7 +17021,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        // Now update the oom adj for all processes. Don't skip this, since other callers
        // might be depending on it.
        updateOomAdjLocked();
        updateOomAdjLocked(oomAdjReason);
    }
    /** This method sends the specified signal to each of the persistent apps */
@@ -17627,7 +17630,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
                pr.setHasOverlayUi(hasOverlayUi);
                //Slog.i(TAG, "Setting hasOverlayUi=" + pr.hasOverlayUi + " for pid=" + pid);
                updateOomAdjLocked(pr, true);
                updateOomAdjLocked(pr, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY);
            }
        }
@@ -17784,7 +17787,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        public void trimApplications() {
            ActivityManagerService.this.trimApplications();
            ActivityManagerService.this.trimApplications(OomAdjuster.OOM_ADJ_REASON_ACTIVITY);
        }
        public void killProcessesForRemovedTask(ArrayList<Object> procsToKill) {
@@ -17836,7 +17839,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        public void updateOomAdj() {
            synchronized (ActivityManagerService.this) {
                ActivityManagerService.this.updateOomAdjLocked();
                ActivityManagerService.this.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE);
            }
        }
+4 −3
Original line number Diff line number Diff line
@@ -309,7 +309,7 @@ public final class BroadcastQueue {
        app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_RECEIVER);
        mService.mProcessList.updateLruProcessLocked(app, false, null);
        if (!skipOomAdj) {
            mService.updateOomAdjLocked();
            mService.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_NONE);
        }

        // Tell the application to launch this receiver.
@@ -791,7 +791,8 @@ public final class BroadcastQueue {
                // are already core system stuff so don't matter for this.
                r.curApp = filter.receiverList.app;
                filter.receiverList.app.curReceivers.add(r);
                mService.updateOomAdjLocked(r.curApp, true);
                mService.updateOomAdjLocked(r.curApp, true,
                        OomAdjuster.OOM_ADJ_REASON_START_RECEIVER);
            }
        }
        try {
@@ -1028,7 +1029,7 @@ public final class BroadcastQueue {
                    // If we had finished the last ordered broadcast, then
                    // make sure all processes have correct oom and sched
                    // adjustments.
                    mService.updateOomAdjLocked();
                    mService.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_START_RECEIVER);
                }

                // when we have no more ordered broadcast on this queue, stop logging
+23 −6
Original line number Diff line number Diff line
@@ -90,6 +90,21 @@ import java.util.Arrays;
public final class OomAdjuster {
    private static final String TAG = "OomAdjuster";

    static final String OOM_ADJ_REASON_METHOD = "updateOomAdj";
    static final String OOM_ADJ_REASON_NONE = OOM_ADJ_REASON_METHOD + "_meh";
    static final String OOM_ADJ_REASON_ACTIVITY = OOM_ADJ_REASON_METHOD + "_activityChange";
    static final String OOM_ADJ_REASON_FINISH_RECEIVER = OOM_ADJ_REASON_METHOD + "_finishReceiver";
    static final String OOM_ADJ_REASON_START_RECEIVER = OOM_ADJ_REASON_METHOD + "_startReceiver";
    static final String OOM_ADJ_REASON_BIND_SERVICE = OOM_ADJ_REASON_METHOD + "_bindService";
    static final String OOM_ADJ_REASON_UNBIND_SERVICE = OOM_ADJ_REASON_METHOD + "_unbindService";
    static final String OOM_ADJ_REASON_START_SERVICE = OOM_ADJ_REASON_METHOD + "_startService";
    static final String OOM_ADJ_REASON_GET_PROVIDER = OOM_ADJ_REASON_METHOD + "_getProvider";
    static final String OOM_ADJ_REASON_REMOVE_PROVIDER = OOM_ADJ_REASON_METHOD + "_removeProvider";
    static final String OOM_ADJ_REASON_UI_VISIBILITY = OOM_ADJ_REASON_METHOD + "_uiVisibility";
    static final String OOM_ADJ_REASON_WHITELIST = OOM_ADJ_REASON_METHOD + "_whitelistChange";
    static final String OOM_ADJ_REASON_PROCESS_BEGIN = OOM_ADJ_REASON_METHOD + "_processBegin";
    static final String OOM_ADJ_REASON_PROCESS_END = OOM_ADJ_REASON_METHOD + "_processEnd";

    /**
     * For some direct access we need to power manager.
     */
@@ -156,10 +171,12 @@ public final class OomAdjuster {
     * @param app The process to update
     * @param oomAdjAll If it's ok to call updateOomAdjLocked() for all running apps
     *                  if necessary, or skip.
     * @param oomAdjReason
     * @return whether updateOomAdjLocked(app) was successful.
     */
    @GuardedBy("mService")
    final boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll) {
    boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll,
            String oomAdjReason) {
        final ProcessRecord TOP_APP = mService.getTopAppLocked();
        final boolean wasCached = app.cached;

@@ -177,7 +194,7 @@ public final class OomAdjuster {
                && (wasCached != app.cached || app.getCurRawAdj() == ProcessList.UNKNOWN_ADJ)) {
            // Changed to/from cached state, so apps after it in the LRU
            // list may also be changed.
            updateOomAdjLocked();
            updateOomAdjLocked(oomAdjReason);
        }
        return success;
    }
@@ -195,8 +212,8 @@ public final class OomAdjuster {
    }

    @GuardedBy("mService")
    final void updateOomAdjLocked() {
        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "updateOomAdj");
    void updateOomAdjLocked(String oomAdjReason) {
        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReason);
        mService.mOomAdjProfiler.oomAdjStarted();
        final ProcessRecord TOP_APP = mService.getTopAppLocked();
        final long now = SystemClock.uptimeMillis();
@@ -2009,7 +2026,7 @@ public final class OomAdjuster {
            }
        }
        if (changed) {
            updateOomAdjLocked();
            updateOomAdjLocked(OOM_ADJ_REASON_WHITELIST);
        }
    }

@@ -2019,7 +2036,7 @@ public final class OomAdjuster {
        final UidRecord uidRec = mActiveUids.get(uid);
        if (uidRec != null && uidRec.curWhitelist != onWhitelist) {
            uidRec.curWhitelist = onWhitelist;
            updateOomAdjLocked();
            updateOomAdjLocked(OOM_ADJ_REASON_WHITELIST);
        }
    }

+2 −1
Original line number Diff line number Diff line
@@ -2227,9 +2227,10 @@ public final class ProcessList {
        for (AppZygote appZygote : zygotesToKill) {
            killAppZygoteIfNeededLocked(appZygote);
        }
        mService.updateOomAdjLocked();
        mService.updateOomAdjLocked(OomAdjuster.OOM_ADJ_REASON_PROCESS_END);
        return N > 0;
    }

    @GuardedBy("mService")
    boolean removeProcessLocked(ProcessRecord app,
            boolean callerWillRestart, boolean allowRestart, String reason) {
Loading