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

Commit 32c2bb90 authored by Christopher Tate's avatar Christopher Tate Committed by android-build-merger
Browse files

Merge "Offload killProcessGroup to a worker thread" into nyc-dev am: d845a8b1

am: 9e07071c

* commit '9e07071c':
  Offload killProcessGroup to a worker thread

Change-Id: Ifb9222c45e4098fccc12fd5ec4c01cd8f0bce1cd
parents 26b6e590 9e07071c
Loading
Loading
Loading
Loading
+42 −3
Original line number Diff line number Diff line
@@ -1468,6 +1468,9 @@ public final class ActivityManagerService extends ActivityManagerNative
    static final int FIRST_COMPAT_MODE_MSG = 300;
    static final int FIRST_SUPERVISOR_STACK_MSG = 100;
    static ServiceThread sKillThread = null;
    static KillHandler sKillHandler = null;
    CompatModeDialog mCompatModeDialog;
    long mLastMemUsageReportTime = 0;
@@ -1491,6 +1494,30 @@ public final class ActivityManagerService extends ActivityManagerNative
    PackageManagerInternal mPackageManagerInt;
    final class KillHandler extends Handler {
        static final int KILL_PROCESS_GROUP_MSG = 4000;
        public KillHandler(Looper looper) {
            super(looper, null, true);
        }
        @Override
        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 */);
                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                }
                break;
                default:
                    super.handleMessage(msg);
            }
        }
    }
    final class UiHandler extends Handler {
        public UiHandler() {
            super(com.android.server.UiThread.get().getLooper(), null, true);
@@ -2459,6 +2486,14 @@ public final class ActivityManagerService extends ActivityManagerNative
        mHandler = new MainHandler(mHandlerThread.getLooper());
        mUiHandler = new UiHandler();
        /* static; one-time init here */
        if (sKillHandler == null) {
            sKillThread = new ServiceThread(TAG + ":kill",
                    android.os.Process.THREAD_PRIORITY_BACKGROUND, true /* allowIo */);
            sKillThread.start();
            sKillHandler = new KillHandler(sKillThread.getLooper());
        }
        mFgBroadcastQueue = new BroadcastQueue(this, mHandler,
                "foreground", BROADCAST_FG_TIMEOUT, false);
        mBgBroadcastQueue = new BroadcastQueue(this, mHandler,
@@ -3007,9 +3042,13 @@ public final class ActivityManagerService extends ActivityManagerNative
    }
    static void killProcessGroup(int uid, int pid) {
        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "killProcessGroup");
        if (sKillHandler != null) {
            sKillHandler.sendMessage(
                    sKillHandler.obtainMessage(KillHandler.KILL_PROCESS_GROUP_MSG, uid, pid));
        } else {
            Slog.w(TAG, "Asked to kill process group before system bringup!");
            Process.killProcessGroup(uid, pid);
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
        }
    }
    final void removeLruProcessLocked(ProcessRecord app) {
+1 −1
Original line number Diff line number Diff line
@@ -560,7 +560,7 @@ final class ProcessRecord {
            }
            EventLog.writeEvent(EventLogTags.AM_KILL, userId, pid, processName, setAdj, reason);
            Process.killProcessQuiet(pid);
            Process.killProcessGroup(uid, pid);
            ActivityManagerService.killProcessGroup(uid, pid);
            if (!persistent) {
                killed = true;
                killedByAm = true;