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

Commit 53ed7078 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Clean up unnecessary lock of WmTests" into rvc-dev

parents da95e26c 87e68ee7
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -230,6 +230,7 @@ class ActivityTestsBase extends SystemServiceTestsBase {
        }

        ActivityRecord build() {
            SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock);
            try {
                mService.deferWindowLayout();
                return buildInner();
@@ -394,6 +395,8 @@ class ActivityTestsBase extends SystemServiceTestsBase {
        }

        Task build() {
            SystemServicesTestRule.checkHoldsLock(mSupervisor.mService.mGlobalLock);

            if (mStack == null && mCreateStack) {
                TaskDisplayArea displayArea = mTaskDisplayArea != null ? mTaskDisplayArea
                        : mSupervisor.mRootWindowContainer.getDefaultTaskDisplayArea();
@@ -501,6 +504,8 @@ class ActivityTestsBase extends SystemServiceTestsBase {
        }

        ActivityStack build() {
            SystemServicesTestRule.checkHoldsLock(mRootWindowContainer.mWmService.mGlobalLock);

            final int stackId = mStackId >= 0 ? mStackId : mTaskDisplayArea.getNextStackId();
            final ActivityStack stack = mTaskDisplayArea.createStackUnchecked(
                    mWindowingMode, mActivityType, stackId, mOnTop, mInfo, mIntent,
+13 −14
Original line number Diff line number Diff line
@@ -100,7 +100,6 @@ public class SystemServicesTestRule implements TestRule {
    static int sNextDisplayId = DEFAULT_DISPLAY + 100;
    static int sNextTaskId = 100;

    private final AtomicBoolean mCurrentMessagesProcessed = new AtomicBoolean(false);
    private static final int[] TEST_USER_PROFILE_IDS = {};

    private Context mContext;
@@ -419,20 +418,20 @@ public class SystemServicesTestRule implements TestRule {
        if (wm == null) {
            return;
        }
        synchronized (mCurrentMessagesProcessed) {
            // Add a message to the handler queue and make sure it is fully processed before we move
            // on. This makes sure all previous messages in the handler are fully processed vs. just
            // popping them from the message queue.
            mCurrentMessagesProcessed.set(false);
        // Add a message to the handler queue and make sure it is fully processed before we move on.
        // This makes sure all previous messages in the handler are fully processed vs. just popping
        // them from the message queue.
        final AtomicBoolean currentMessagesProcessed = new AtomicBoolean(false);
        wm.mAnimator.getChoreographer().postFrameCallback(time -> {
                synchronized (mCurrentMessagesProcessed) {
                    mCurrentMessagesProcessed.set(true);
                    mCurrentMessagesProcessed.notifyAll();
            synchronized (currentMessagesProcessed) {
                currentMessagesProcessed.set(true);
                currentMessagesProcessed.notifyAll();
            }
        });
            while (!mCurrentMessagesProcessed.get()) {
        while (!currentMessagesProcessed.get()) {
            synchronized (currentMessagesProcessed) {
                try {
                    mCurrentMessagesProcessed.wait();
                    currentMessagesProcessed.wait();
                } catch (InterruptedException e) {
                }
            }
+17 −25
Original line number Diff line number Diff line
@@ -34,15 +34,12 @@ class WindowTestUtils {

    /** Creates a {@link Task} and adds it to the specified {@link ActivityStack}. */
    static Task createTaskInStack(WindowManagerService service, ActivityStack stack, int userId) {
        synchronized (service.mGlobalLock) {
            final Task task = new ActivityTestsBase.TaskBuilder(
                    stack.mStackSupervisor)
        final Task task = new ActivityTestsBase.TaskBuilder(stack.mStackSupervisor)
                .setUserId(userId)
                .setStack(stack)
                .build();
        return task;
    }
    }

    /** Creates an {@link ActivityRecord} and adds it to the specified {@link Task}. */
    static ActivityRecord createActivityRecordInTask(DisplayContent dc, Task task) {
@@ -52,24 +49,19 @@ class WindowTestUtils {
    }

    static ActivityRecord createTestActivityRecord(ActivityStack stack) {
        synchronized (stack.mAtmService.mGlobalLock) {
            final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(
                    stack.mAtmService)
        final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(stack.mAtmService)
                .setStack(stack)
                .setCreateTask(true)
                .build();
        postCreateActivitySetup(activity, stack.getDisplayContent());
        return activity;
    }
    }

    static ActivityRecord createTestActivityRecord(DisplayContent dc) {
        synchronized (dc.mWmService.mGlobalLock) {
        final ActivityRecord activity = new ActivityBuilder(dc.mWmService.mAtmService).build();
        postCreateActivitySetup(activity, dc);
        return activity;
    }
    }

    private static void postCreateActivitySetup(ActivityRecord activity, DisplayContent dc) {
        activity.onDisplayChanged(dc);
@@ -84,10 +76,10 @@ class WindowTestUtils {

    static TestWindowToken createTestWindowToken(int type, DisplayContent dc,
            boolean persistOnEmpty) {
        synchronized (dc.mWmService.mGlobalLock) {
        SystemServicesTestRule.checkHoldsLock(dc.mWmService.mGlobalLock);

        return new TestWindowToken(type, dc, persistOnEmpty);
    }
    }

    /* Used so we can gain access to some protected members of the {@link WindowToken} class */
    static class TestWindowToken extends WindowToken {
+92 −127
Original line number Diff line number Diff line
@@ -55,11 +55,7 @@ import com.android.server.AttributeCache;
import org.junit.Before;
import org.junit.BeforeClass;

/**
 * Common base class for window manager unit test classes.
 *
 * Make sure any requests to WM hold the WM lock if needed b/73966377
 */
/** Common base class for window manager unit test classes. */
class WindowTestsBase extends SystemServiceTestsBase {
    private static final String TAG = WindowTestsBase.class.getSimpleName();

@@ -94,23 +90,21 @@ class WindowTestsBase extends SystemServiceTestsBase {

    @Before
    public void setUpBase() {
        mWm = mSystemServicesTestRule.getWindowManagerService();
        SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock);

        mTransaction = mSystemServicesTestRule.mTransaction;
        mMockSession = mock(Session.class);
        final Context context = getInstrumentation().getTargetContext();
        // If @Before throws an exception, the error isn't logged. This will make sure any failures
        // in the set up are clear. This can be removed when b/37850063 is fixed.
        try {
            mMockSession = mock(Session.class);

            final Context context = getInstrumentation().getTargetContext();

            mWm = mSystemServicesTestRule.getWindowManagerService();
            mTransaction = mSystemServicesTestRule.mTransaction;

            beforeCreateDisplay();

            context.getDisplay().getDisplayInfo(mDisplayInfo);
            mDisplayContent = createNewDisplay(true /* supportIme */);

            // Set-up some common windows.
            synchronized (mWm.mGlobalLock) {
            mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
            mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow");
            mDisplayContent.mInputMethodWindow = mImeWindow;
@@ -130,7 +124,6 @@ class WindowTestsBase extends SystemServiceTestsBase {
                    TYPE_APPLICATION_MEDIA_OVERLAY,
                    "mChildAppWindowBelow");
            mDisplayContent.getDisplayPolicy().setForceShowSystemBars(false);
            }

            // Adding a display will cause freezing the display. Make sure to wait until it's
            // unfrozen to not run into race conditions with the tests.
@@ -146,24 +139,20 @@ class WindowTestsBase extends SystemServiceTestsBase {
    }

    private WindowState createCommonWindow(WindowState parent, int type, String name) {
        synchronized (mWm.mGlobalLock) {
        final WindowState win = createWindow(parent, type, name);
            // Prevent common windows from been IMe targets
        // Prevent common windows from been IME targets.
        win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
        return win;
    }
    }

    private WindowToken createWindowToken(
            DisplayContent dc, int windowingMode, int activityType, int type) {
        synchronized (mWm.mGlobalLock) {
        if (type < FIRST_APPLICATION_WINDOW || type > LAST_APPLICATION_WINDOW) {
            return WindowTestUtils.createTestWindowToken(type, dc);
        }

        return createActivityRecord(dc, windowingMode, activityType);
    }
    }

    ActivityRecord createActivityRecord(DisplayContent dc, int windowingMode, int activityType) {
        return createTestActivityRecord(dc, windowingMode, activityType);
@@ -176,79 +165,61 @@ class WindowTestsBase extends SystemServiceTestsBase {
    }

    WindowState createWindow(WindowState parent, int type, String name) {
        synchronized (mWm.mGlobalLock) {
        return (parent == null)
                ? createWindow(parent, type, mDisplayContent, name)
                : createWindow(parent, type, parent.mToken, name);
    }
    }

    WindowState createWindow(WindowState parent, int type, String name, int ownerId) {
        synchronized (mWm.mGlobalLock) {
        return (parent == null)
                ? createWindow(parent, type, mDisplayContent, name, ownerId)
                : createWindow(parent, type, parent.mToken, name, ownerId);
    }
    }

    WindowState createWindowOnStack(WindowState parent, int windowingMode, int activityType,
            int type, DisplayContent dc, String name) {
        synchronized (mWm.mGlobalLock) {
        final WindowToken token = createWindowToken(dc, windowingMode, activityType, type);
        return createWindow(parent, type, token, name);
    }
    }

    WindowState createAppWindow(Task task, int type, String name) {
        synchronized (mWm.mGlobalLock) {
        final ActivityRecord activity =
                WindowTestUtils.createTestActivityRecord(task.getDisplayContent());
        task.addChild(activity, 0);
        return createWindow(null, type, activity, name);
    }
    }

    WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name) {
        synchronized (mWm.mGlobalLock) {
        final WindowToken token = createWindowToken(
                dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
        return createWindow(parent, type, token, name, 0 /* ownerId */);
    }
    }

    WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
            int ownerId) {
        synchronized (mWm.mGlobalLock) {
        final WindowToken token = createWindowToken(
                dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
        return createWindow(parent, type, token, name, ownerId);
    }
    }

    WindowState createWindow(WindowState parent, int type, DisplayContent dc, String name,
            boolean ownerCanAddInternalSystemWindow) {
        synchronized (mWm.mGlobalLock) {
        final WindowToken token = createWindowToken(
                dc, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, type);
        return createWindow(parent, type, token, name, 0 /* ownerId */,
                ownerCanAddInternalSystemWindow);
    }
    }

    WindowState createWindow(WindowState parent, int type, WindowToken token, String name) {
        synchronized (mWm.mGlobalLock) {
        return createWindow(parent, type, token, name, 0 /* ownerId */,
                false /* ownerCanAddInternalSystemWindow */);
    }
    }

    WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
            int ownerId) {
        synchronized (mWm.mGlobalLock) {
        return createWindow(parent, type, token, name, ownerId,
                false /* ownerCanAddInternalSystemWindow */);
    }
    }

    WindowState createWindow(WindowState parent, int type, WindowToken token, String name,
            int ownerId, boolean ownerCanAddInternalSystemWindow) {
@@ -261,7 +232,8 @@ class WindowTestsBase extends SystemServiceTestsBase {
            String name, int ownerId, int userId, boolean ownerCanAddInternalSystemWindow,
            WindowManagerService service, Session session, IWindow iWindow,
            WindowState.PowerManagerWrapper powerManagerWrapper) {
        synchronized (service.mGlobalLock) {
        SystemServicesTestRule.checkHoldsLock(service.mGlobalLock);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(type);
        attrs.setTitle(name);

@@ -274,7 +246,6 @@ class WindowTestsBase extends SystemServiceTestsBase {
        token.addWindow(w);
        return w;
    }
    }

    static void makeWindowVisible(WindowState... windows) {
        for (WindowState win : windows) {
@@ -292,9 +263,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
    }

    ActivityStack createTaskStackOnDisplay(int windowingMode, int activityType, DisplayContent dc) {
        synchronized (mWm.mGlobalLock) {
            return new ActivityTestsBase.StackBuilder(
                    dc.mWmService.mAtmService.mRootWindowContainer)
        return new ActivityTestsBase.StackBuilder(dc.mWmService.mRoot)
                .setDisplay(dc)
                .setWindowingMode(windowingMode)
                .setActivityType(activityType)
@@ -302,13 +271,10 @@ class WindowTestsBase extends SystemServiceTestsBase {
                .setIntent(new Intent())
                .build();
    }
    }

    ActivityStack createTaskStackOnTaskDisplayArea(
            int windowingMode, int activityType, TaskDisplayArea tda) {
        synchronized (mWm.mGlobalLock) {
            return new ActivityTestsBase.StackBuilder(
                    tda.mDisplayContent.mWmService.mAtmService.mRootWindowContainer)
    ActivityStack createTaskStackOnTaskDisplayArea(int windowingMode, int activityType,
            TaskDisplayArea tda) {
        return new ActivityTestsBase.StackBuilder(tda.mWmService.mRoot)
                .setTaskDisplayArea(tda)
                .setWindowingMode(windowingMode)
                .setActivityType(activityType)
@@ -316,7 +282,6 @@ class WindowTestsBase extends SystemServiceTestsBase {
                .setIntent(new Intent())
                .build();
    }
    }

    /** Creates a {@link Task} and adds it to the specified {@link ActivityStack}. */
    Task createTaskInStack(ActivityStack stack, int userId) {
@@ -365,10 +330,10 @@ class WindowTestsBase extends SystemServiceTestsBase {
    /** Creates a {@link com.android.server.wm.WindowTestUtils.TestWindowState} */
    WindowTestUtils.TestWindowState createWindowState(WindowManager.LayoutParams attrs,
            WindowToken token) {
        synchronized (mWm.mGlobalLock) {
        SystemServicesTestRule.checkHoldsLock(mWm.mGlobalLock);

        return new WindowTestUtils.TestWindowState(mWm, mMockSession, mIWindow, attrs, token);
    }
    }

    /** Creates a {@link DisplayContent} as parts of simulate display info for test. */
    DisplayContent createMockSimulatedDisplay() {