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

Commit e217229d authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Removed references to IActivityController from AMS (31/n)

IActivityController should only be accessed from the ATMS side since
it relates to activties. This CL makes it so.

Bug: 80414790
Test: Existing tests pass
Change-Id: Ifcbab0499d3f00d83e8a76503e5a6f703792f274
parent 7fa407f7
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -16544,8 +16544,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    if (curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP) {
                        // do nothing if we already switched to RT
                        if (oldSchedGroup != ProcessList.SCHED_GROUP_TOP_APP) {
                            mActivityTaskManager.onTopProcChangedLocked(
                                    app.getWindowProcessController());
                            app.getWindowProcessController().onTopProcChanged();
                            if (mUseFifoUiScheduling) {
                                // Switch UI pipeline for app to SCHED_FIFO
                                app.savedPriority = Process.getThreadPriority(app.pid);
@@ -16577,8 +16576,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                        }
                    } else if (oldSchedGroup == ProcessList.SCHED_GROUP_TOP_APP &&
                            curSchedGroup != ProcessList.SCHED_GROUP_TOP_APP) {
                        mActivityTaskManager.onTopProcChangedLocked(
                                app.getWindowProcessController());
                        app.getWindowProcessController().onTopProcChanged();
                        if (mUseFifoUiScheduling) {
                            try {
                                // Reset UI pipeline to SCHED_OTHER
+24 −5
Original line number Diff line number Diff line
@@ -397,7 +397,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    // VoiceInteractionManagerService
    ComponentName mActiveVoiceInteractionServiceComponent;

    private VrController mVrController;
    VrController mVrController;
    KeyguardController mKeyguardController;
    private final ClientLifecycleManager mLifecycleManager;
    private TaskChangeNotificationController mTaskChangeNotificationController;
@@ -4355,10 +4355,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        mRecentTasks.notifyTaskPersisterLocked(task, flush);
    }

    void onTopProcChangedLocked(WindowProcessController proc) {
        mVrController.onTopProcChangedLocked(proc);
    }

    boolean isKeyguardLocked() {
        return mKeyguardController.isKeyguardLocked();
    }
@@ -6689,5 +6685,28 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                mPendingTempWhitelist.remove(uid);
            }
        }

        @Override
        public boolean handleAppCrashInActivityController(String processName, int pid,
                String shortMsg, String longMsg, long timeMillis, String stackTrace,
                Runnable killCrashingAppCallback) {
            synchronized (mGlobalLock) {
                if (mController == null) {
                    return false;
                }

                try {
                    if (!mController.appCrashed(processName, pid, shortMsg, longMsg, timeMillis,
                            stackTrace)) {
                        killCrashingAppCallback.run();
                        return true;
                    }
                } catch (RemoteException e) {
                    mController = null;
                    Watchdog.getInstance().setActivityController(null);
                }
                return false;
            }
        }
    }
}
+20 −32
Original line number Diff line number Diff line
@@ -526,26 +526,20 @@ class AppErrors {
                                                       String shortMsg, String longMsg,
                                                       String stackTrace, long timeMillis,
                                                       int callingPid, int callingUid) {
        if (mService.mActivityTaskManager.mController == null) {
            return false;
        }

        try {
        String name = r != null ? r.processName : null;
        int pid = r != null ? r.pid : callingPid;
        int uid = r != null ? r.info.uid : callingUid;
            if (!mService.mActivityTaskManager.mController.appCrashed(name, pid,
                    shortMsg, longMsg, timeMillis, crashInfo.stackTrace)) {

        return mService.mAtmInternal.handleAppCrashInActivityController(
                name, pid, shortMsg, longMsg, timeMillis, crashInfo.stackTrace, () -> {
            if ("1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"))
                    && "Native crash".equals(crashInfo.exceptionClassName)) {
                Slog.w(TAG, "Skip killing native crashed app " + name
                        + "(" + pid + ") during testing");
            } else {
                    Slog.w(TAG, "Force-killing crashed app " + name
                            + " at watcher's request");
                Slog.w(TAG, "Force-killing crashed app " + name + " at watcher's request");
                if (r != null) {
                        if (!makeAppCrashingLocked(r, shortMsg, longMsg, stackTrace, null))
                        {
                    if (!makeAppCrashingLocked(r, shortMsg, longMsg, stackTrace, null)) {
                        r.kill("crash", true);
                    }
                } else {
@@ -554,13 +548,7 @@ class AppErrors {
                    ProcessList.killProcessGroup(uid, pid);
                }
            }
                return true;
            }
        } catch (RemoteException e) {
            mService.mActivityTaskManager.mController = null;
            Watchdog.getInstance().setActivityController(null);
        }
        return false;
        });
    }

    private boolean makeAppCrashingLocked(ProcessRecord app,
+7 −31
Original line number Diff line number Diff line
@@ -1244,19 +1244,7 @@ final class ProcessRecord implements WindowProcessListener {
        ArrayList<Integer> firstPids = new ArrayList<>(5);
        SparseArray<Boolean> lastPids = new SparseArray<>(20);

        if (mService.mActivityTaskManager.mController != null) {
            try {
                // 0 == continue, -1 = kill process immediately
                int res = mService.mActivityTaskManager.mController.appEarlyNotResponding(
                        processName, pid, annotation);
                if (res < 0 && pid != MY_PID) {
                    kill("anr", true);
                }
            } catch (RemoteException e) {
                mService.mActivityTaskManager.mController = null;
                Watchdog.getInstance().setActivityController(null);
            }
        }
        mWindowProcessController.appEarlyNotResponding(annotation, () -> kill("anr", true));

        long anrTime = SystemClock.uptimeMillis();
        if (ActivityManagerService.MONITOR_CPU_USAGE) {
@@ -1412,26 +1400,14 @@ final class ProcessRecord implements WindowProcessListener {
        mService.addErrorToDropBox("anr", this, processName, activityShortComponentName,
                parentShortComponentName, parentPr, annotation, cpuInfo, tracesFile, null);

        if (mService.mActivityTaskManager.mController != null) {
            try {
                // 0 == show dialog, 1 = keep waiting, -1 = kill process immediately
                int res = mService.mActivityTaskManager.mController.appNotResponding(
                        processName, pid, info.toString());
                if (res != 0) {
                    if (res < 0 && pid != MY_PID) {
                        kill("anr", true);
                    } else {
        if (mWindowProcessController.appNotResponding(info.toString(), () -> kill("anr", true),
                () -> {
                    synchronized (mService) {
                        mService.mServices.scheduleServiceTimeoutLocked(this);
                    }
                    }
                })) {
            return;
        }
            } catch (RemoteException e) {
                mService.mActivityTaskManager.mController = null;
                Watchdog.getInstance().setActivityController(null);
            }
        }

        synchronized (mService) {
            mService.mBatteryStatsService.noteProcessAnr(processName, uid);
+53 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.am;
import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.view.Display.INVALID_DISPLAY;

import static com.android.server.am.ActivityManagerService.MY_PID;
import static com.android.server.am.ActivityStack.ActivityState.DESTROYED;
import static com.android.server.am.ActivityStack.ActivityState.DESTROYING;
import static com.android.server.am.ActivityStack.ActivityState.PAUSED;
@@ -53,6 +54,7 @@ import android.util.proto.ProtoOutputStream;

import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.Watchdog;
import com.android.server.wm.ConfigurationContainer;
import com.android.server.wm.ConfigurationContainerListener;

@@ -807,6 +809,57 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
        }
    }

    public void appEarlyNotResponding(String annotation, Runnable killAppCallback) {
        synchronized (mAtm.mGlobalLock) {
            if (mAtm.mController == null) {
                return;
            }

            try {
                // 0 == continue, -1 = kill process immediately
                int res = mAtm.mController.appEarlyNotResponding(mName, mPid, annotation);
                if (res < 0 && mPid != MY_PID) {
                    killAppCallback.run();
                }
            } catch (RemoteException e) {
                mAtm.mController = null;
                Watchdog.getInstance().setActivityController(null);
            }
        }
    }

    public boolean appNotResponding(String info, Runnable killAppCallback,
            Runnable serviceTimeoutCallback) {
        synchronized (mAtm.mGlobalLock) {
            if (mAtm.mController == null) {
                return false;
            }

            try {
                // 0 == show dialog, 1 = keep waiting, -1 = kill process immediately
                int res = mAtm.mController.appNotResponding(mName, mPid, info);
                if (res != 0) {
                    if (res < 0 && mPid != MY_PID) {
                        killAppCallback.run();
                    } else {
                        serviceTimeoutCallback.run();
                    }
                    return true;
                }
            } catch (RemoteException e) {
                mAtm.mController = null;
                Watchdog.getInstance().setActivityController(null);
            }
            return false;
        }
    }

    public void onTopProcChanged() {
        synchronized (mAtm.mGlobalLock) {
            mAtm.mVrController.onTopProcChangedLocked(this);
        }
    }

    public void dump(PrintWriter pw, String prefix) {
        synchronized (mAtm.mGlobalLock) {
            if (mActivities.size() > 0) {
Loading