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

Commit ce2f97ac authored by Daichi Hirono's avatar Daichi Hirono
Browse files

Move task positioning tasks from WindowManagerService.mH

The CL moves task positioning tasks from WindowManagerService.mH to
TaskPositioningController.mHandler.

Bug: 64149458
Test: atest com.android.server.wm.TaskPositioningControllerTests
Change-Id: I2a8ce22a1698e008b2abd2e8f1b06886cec697b4
parent 3952e256
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -203,7 +203,7 @@ class TaskPositioner {

                    // Post back to WM to handle clean-ups. We still need the input
                    // event handler for the last finishInputEvent()!
                    mService.mH.sendEmptyMessage(H.FINISH_TASK_POSITIONING);
                    mService.mTaskPositioningController.finishTaskPositioning();
                }
                handled = true;
            } catch (Exception e) {
+34 −25
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.annotation.Nullable;
import android.app.IActivityManager;
import android.os.RemoteException;
import android.os.Handler;
import android.os.Looper;
import android.util.Slog;
import android.view.Display;
import android.view.IWindow;
@@ -37,6 +39,7 @@ class TaskPositioningController {
    private final InputManagerService mInputManager;
    private final InputMonitor mInputMonitor;
    private final IActivityManager mActivityManager;
    private final Handler mHandler;

    @GuardedBy("WindowManagerSerivce.mWindowMap")
    private @Nullable TaskPositioner mTaskPositioner;
@@ -50,11 +53,12 @@ class TaskPositioningController {
    }

    TaskPositioningController(WindowManagerService service, InputManagerService inputManager,
            InputMonitor inputMonitor, IActivityManager activityManager) {
            InputMonitor inputMonitor, IActivityManager activityManager, Looper looper) {
        mService = service;
        mInputMonitor = inputMonitor;
        mInputManager = inputManager;
        mActivityManager = activityManager;
        mHandler = new Handler(looper);
    }

    boolean startMovingTask(IWindow window, float startX, float startY) {
@@ -75,6 +79,7 @@ class TaskPositioningController {
    }

    void handleTapOutsideTask(DisplayContent displayContent, int x, int y) {
        mHandler.post(() -> {
            int taskId = -1;
            synchronized (mService.mWindowMap) {
                final Task task = displayContent.findTaskForResizePoint(x, y);
@@ -91,8 +96,10 @@ class TaskPositioningController {
            if (taskId >= 0) {
                try {
                    mActivityManager.setFocusedTask(taskId);
            } catch(RemoteException e) {}
                } catch (RemoteException e) {
                }
            }
        });
    }

    private boolean startPositioningLocked(WindowState win, boolean resize,
@@ -145,7 +152,8 @@ class TaskPositioningController {
        return true;
    }

    void finishPositioning() {
    void finishTaskPositioning() {
        mHandler.post(() -> {
            if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "finishPositioning");

            synchronized (mService.mWindowMap) {
@@ -155,5 +163,6 @@ class TaskPositioningController {
                    mInputMonitor.updateInputWindowsLw(true /*force*/);
                }
            }
        });
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -62,8 +62,8 @@ public class TaskTapPointerEventListener implements PointerEventListener {

                synchronized (this) {
                    if (!mTouchExcludeRegion.contains(x, y)) {
                        mService.mH.obtainMessage(H.TAP_OUTSIDE_TASK,
                                x, y, mDisplayContent).sendToTarget();
                        mService.mTaskPositioningController.handleTapOutsideTask(
                                mDisplayContent, x, y);
                    }
                }
            }
+2 −16
Original line number Diff line number Diff line
@@ -1088,8 +1088,8 @@ public class WindowManagerService extends IWindowManager.Stub
        mAllowTheaterModeWakeFromLayout = context.getResources().getBoolean(
                com.android.internal.R.bool.config_allowTheaterModeWakeFromWindowLayout);

        mTaskPositioningController =
                new TaskPositioningController(this, mInputManager, mInputMonitor, mActivityManager);
        mTaskPositioningController = new TaskPositioningController(
                this, mInputManager, mInputMonitor, mActivityManager, mH.getLooper());
        mDragDropController = new DragDropController(this, mH.getLooper());

        LocalServices.addService(WindowManagerInternal.class, new LocalService());
@@ -4613,7 +4613,6 @@ public class WindowManagerService extends IWindowManager.Stub
        public static final int DO_ANIMATION_CALLBACK = 26;

        public static final int CLIENT_FREEZE_TIMEOUT = 30;
        public static final int TAP_OUTSIDE_TASK = 31;
        public static final int NOTIFY_ACTIVITY_DRAWN = 32;

        public static final int ALL_WINDOWS_DRAWN = 33;
@@ -4627,8 +4626,6 @@ public class WindowManagerService extends IWindowManager.Stub
        public static final int RESET_ANR_MESSAGE = 38;
        public static final int WALLPAPER_DRAW_PENDING_TIMEOUT = 39;

        public static final int FINISH_TASK_POSITIONING = 40;

        public static final int UPDATE_DOCKED_STACK_DIVIDER = 41;

        public static final int WINDOW_REPLACEMENT_TIMEOUT = 46;
@@ -4905,17 +4902,6 @@ public class WindowManagerService extends IWindowManager.Stub
                    break;
                }

                case TAP_OUTSIDE_TASK: {
                    mTaskPositioningController.handleTapOutsideTask(
                            (DisplayContent)msg.obj, msg.arg1, msg.arg2);
                }
                break;

                case FINISH_TASK_POSITIONING: {
                    mTaskPositioningController.finishPositioning();
                }
                break;

                case NOTIFY_ACTIVITY_DRAWN:
                    try {
                        mActivityManager.notifyActivityDrawn((IBinder) msg.obj);
+9 −6
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.view.InputChannel;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * Tests for the {@link TaskPositioningController} class.
 *
@@ -78,9 +79,9 @@ public class TaskPositioningControllerTests extends WindowTestsBase {
            assertNotNull(mTarget.getDragWindowHandleLocked());
        }

        assertTrue(sWm.mH.runWithScissors(() -> {
            mTarget.finishPositioning();
        }, TIMEOUT_MS));
        mTarget.finishTaskPositioning();
        // Wait until the looper processes finishTaskPositioning.
        assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS));

        assertFalse(mTarget.isPositioningLocked());
        assertNull(mTarget.getDragWindowHandleLocked());
@@ -99,15 +100,17 @@ public class TaskPositioningControllerTests extends WindowTestsBase {
        assertNotNull(mWindow.getTask().getTopVisibleAppMainWindow());

        mTarget.handleTapOutsideTask(content, 0, 0);
        // Wait until the looper processes finishTaskPositioning.
        assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS));

        synchronized (sWm.mWindowMap) {
            assertTrue(mTarget.isPositioningLocked());
            assertNotNull(mTarget.getDragWindowHandleLocked());
        }

        assertTrue(sWm.mH.runWithScissors(() -> {
            mTarget.finishPositioning();
        }, TIMEOUT_MS));
        mTarget.finishTaskPositioning();
        // Wait until the looper processes finishTaskPositioning.
        assertTrue(sWm.mH.runWithScissors(() -> {}, TIMEOUT_MS));

        assertFalse(mTarget.isPositioningLocked());
        assertNull(mTarget.getDragWindowHandleLocked());