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

Commit 582dc484 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Reduce acquiring WM lock when ANR happens

To avoid lock contention that delays to dump callstack if
window manager is also busy.

Bug: 287590545
Test: Trigger ANR
Change-Id: Ie1114775d2749993e478b1ab0f8b0c497d574d01
parent 2c270dd7
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -546,6 +546,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
     */
    private volatile long mLastStopAppSwitchesTime;

    @GuardedBy("itself")
    private final List<AnrController> mAnrController = new ArrayList<>();
    IActivityController mController = null;
    boolean mControllerIsAMonkey = false;
@@ -733,7 +734,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    private boolean mShowDialogs = true;

    /** Set if we are shutting down the system, similar to sleeping. */
    boolean mShuttingDown = false;
    volatile boolean mShuttingDown;

    /**
     * We want to hold a wake lock while running a voice interaction session, since
@@ -2298,14 +2299,14 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {

    /** Register an {@link AnrController} to control the ANR dialog behavior */
    public void registerAnrController(AnrController controller) {
        synchronized (mGlobalLock) {
        synchronized (mAnrController) {
            mAnrController.add(controller);
        }
    }

    /** Unregister an {@link AnrController} */
    public void unregisterAnrController(AnrController controller) {
        synchronized (mGlobalLock) {
        synchronized (mAnrController) {
            mAnrController.remove(controller);
        }
    }
@@ -2321,7 +2322,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }

        final ArrayList<AnrController> controllers;
        synchronized (mGlobalLock) {
        synchronized (mAnrController) {
            controllers = new ArrayList<>(mAnrController);
        }

@@ -6034,15 +6035,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {

        @Override
        public boolean isShuttingDown() {
            synchronized (mGlobalLock) {
            return mShuttingDown;
        }
        }

        @Override
        public boolean shuttingDown(boolean booted, int timeout) {
            synchronized (mGlobalLock) {
            mShuttingDown = true;
            synchronized (mGlobalLock) {
                mRootWindowContainer.prepareForShutdown();
                updateEventDispatchingLocked(booted);
                notifyTaskPersisterLocked(null, true);