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

Commit 43c495e7 authored by Suprabh Shukla's avatar Suprabh Shukla
Browse files

Add more reasons to process kill trace events

Added many missing reasons for trace events for phantom process kill and
process group kills.

Flag: EXEMPT logs only change.

Test: Manually in a trace.

Bug: 438294109
Change-Id: I8820a1bb39b36fed484ce484cf64b403d9aa0401
parent dbee0b29
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3467,7 +3467,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                mProcessList.noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
                        ApplicationExitInfo.SUBREASON_UNKNOWN, reason);
            }
            app.killProcessGroupIfNecessaryLocked(true);
            app.killProcessGroupIfNecessaryLocked(true, reason);
            synchronized (mProcLock) {
                app.setKilled(true);
            }
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.am;

import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.ApplicationExitInfo.reasonCodeToString;
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;

import static com.android.server.am.ActivityManagerConstants.PROCESS_CRASH_COUNT_LIMIT;
@@ -772,7 +773,8 @@ class AppErrors {
                    } else {
                        // Huh.
                        Process.killProcess(pid);
                        ProcessList.killProcessGroup(uid, pid);
                        ProcessList.killProcessGroup(uid, pid,
                                reasonCodeToString(ApplicationExitInfo.REASON_CRASH));
                        mService.mProcessList.noteAppKill(pid, uid,
                                ApplicationExitInfo.REASON_CRASH,
                                ApplicationExitInfo.SUBREASON_UNKNOWN,
+1 −1
Original line number Diff line number Diff line
@@ -488,7 +488,7 @@ public final class PhantomProcessList {
                    if (r == proc) {
                        r.killLocked(msg, true);
                    } else {
                        r.killLocked("Caused by siling process: " + msg, false);
                        r.killLocked("Caused by sibling process: " + msg, false);
                    }
                }
            }
+5 −2
Original line number Diff line number Diff line
@@ -113,7 +113,10 @@ public final class PhantomProcessRecord {
    @GuardedBy("mLock")
    void killLocked(String reason, boolean noisy) {
        if (!mKilled) {
            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "kill");
            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                        "killPhantom/" + mProcessName + "/" + reason);
            }
            if (noisy || mUid == mService.mCurOomAdjUid) {
                mService.reportUidInfoMessageLocked(TAG,
                        "Killing " + toString() + ": " + reason, mUid);
@@ -130,7 +133,7 @@ public final class PhantomProcessRecord {
                            mService.mConstants.mProcessKillTimeoutMs);
                }
                Process.killProcessQuiet(mPid);
                ProcessList.killProcessGroup(mUid, mPid);
                ProcessList.killProcessGroup(mUid, mPid, reason);
            }
            mKilled = true;
            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+16 −7
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_PROCESS_END;
import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_RESTRICTION_CHANGE;
import static android.app.ActivityThread.PROC_START_SEQ_IDENT;
import static android.app.ApplicationExitInfo.subreasonToString;
import static android.content.pm.Flags.appCompatOption16kb;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AUTO;
import static android.net.NetworkPolicyManager.isProcStateAllowedWhileIdleOrPowerSaveMode;
@@ -853,8 +854,14 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case KILL_PROCESS_GROUP_MSG:
                    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "killProcessGroup");
                    Process.killProcessGroup(msg.arg1 /* uid */, msg.arg2 /* pid */);
                    final int uid = msg.arg1;
                    final int pid = msg.arg2;
                    final String reason = (String) msg.obj;
                    if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
                        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                                "killProcessGroup/" + uid + "/" + pid + "/" + reason);
                    }
                    Process.killProcessGroup(uid, pid);
                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                    break;
                case LMKD_RECONNECT_MSG:
@@ -1723,11 +1730,12 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
        return sLmkdConnection.exchange(buf, repl);
    }

    static void killProcessGroup(int uid, int pid) {
    static void killProcessGroup(int uid, int pid, String reason) {
        /* static; one-time init here */
        if (sKillHandler != null) {
            sKillHandler.sendMessage(
                    sKillHandler.obtainMessage(KillHandler.KILL_PROCESS_GROUP_MSG, uid, pid));
                    sKillHandler.obtainMessage(KillHandler.KILL_PROCESS_GROUP_MSG, uid, pid,
                            reason));
        } else {
            Slog.w(TAG, "Asked to kill process group before system bringup!");
            Process.killProcessGroup(uid, pid);
@@ -2737,7 +2745,7 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
            // clean it up now.
            if (DEBUG_PROCESSES) Slog.v(TAG_PROCESSES, "App died: " + app);
            checkSlow(startTime, "startProcess: bad proc running, killing");
            ProcessList.killProcessGroup(app.uid, app.getPid());
            ProcessList.killProcessGroup(app.uid, app.getPid(), "old process attached");
            checkSlow(startTime, "startProcess: done killing old proc");

            if (!app.isKilled()) {
@@ -2969,7 +2977,8 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
                        Slog.wtfStack(TAG, "Removing process that hasn't been killed: " + app);
                        if (app.getPid() > 0) {
                            killProcessQuiet(app.getPid());
                            ProcessList.killProcessGroup(app.uid, app.getPid());
                            ProcessList.killProcessGroup(app.uid, app.getPid(),
                                    subreasonToString(ApplicationExitInfo.SUBREASON_REMOVE_LRU));
                            noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
                                    ApplicationExitInfo.SUBREASON_REMOVE_LRU, "hasn't been killed");
                        } else {
@@ -5703,7 +5712,7 @@ public final class ProcessList implements ProcessStateController.ProcessLruUpdat
        if (DEBUG_PROCESSES) {
            Slog.i(TAG, "note: " + app + " is being killed, reason: "
                    + ApplicationExitInfo.reasonCodeToString(reason) + ", sub-reason: "
                    + ApplicationExitInfo.subreasonToString(subReason) + ", message: " + msg);
                    + subreasonToString(subReason) + ", message: " + msg);
        }
        if (app.getPid() > 0 && !app.isolated && app.getDeathRecipient() != null) {
            // We are killing it, put it into the dying process list.
Loading