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

Commit 79687438 authored by Ming-Shin Lu's avatar Ming-Shin Lu
Browse files

Wait starting window finished in syncInputTransactions

This CL is attempt to fix the test flakiness happens when invoking
tapOnDisplayCenter on the test activity but the starting window
is still exists.

Use ActivityRecord#hasStartingWindow to check all running activities
to ensure input window transations will wait until the starting
window has finished animating.

Bug: 191996095
Test: atest MultiDisplaySystemDecorationTests#\
      testDisplayPolicyImeHideImeNoSystemDecorations --iterations 100
Change-Id: Ie9ca44a7b4c972fc1393d9ce55a5982a2b62dac7
(cherry picked from commit 5e1b80b1)
parent d1436f18
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -8117,9 +8117,15 @@ public class WindowManagerService extends IWindowManager.Stub
            // This could prevent if there is no container animation, we still have to apply the
            // pending transaction and exit waiting.
            mAnimator.mNotifyWhenNoAnimation = true;
            boolean animateStarting = false;
            while (timeoutRemaining > 0) {
                // Waiting until all starting windows has finished animating.
                animateStarting = mRoot.forAllActivities(a -> {
                    return a.hasStartingWindow();
                });
                boolean isAnimating = mAnimator.isAnimationScheduled()
                        || mRoot.isAnimating(TRANSITION | CHILDREN, ANIMATION_TYPE_ALL);
                        || mRoot.isAnimating(TRANSITION | CHILDREN, ANIMATION_TYPE_ALL)
                        || animateStarting;
                if (!isAnimating) {
                    // isAnimating is a legacy transition query and will be removed, so also add
                    // a check for whether this is in a shell-transition when not using legacy.
@@ -8139,13 +8145,14 @@ public class WindowManagerService extends IWindowManager.Stub
            WindowContainer animatingContainer;
            animatingContainer = mRoot.getAnimatingContainer(TRANSITION | CHILDREN,
                    ANIMATION_TYPE_ALL);
            if (mAnimator.isAnimationScheduled() || animatingContainer != null) {
            if (mAnimator.isAnimationScheduled() || animatingContainer != null || animateStarting) {
                Slog.w(TAG, "Timed out waiting for animations to complete,"
                        + " animatingContainer=" + animatingContainer
                        + " animationType=" + SurfaceAnimator.animationTypeToString(
                        animatingContainer != null
                                ? animatingContainer.mSurfaceAnimator.getAnimationType()
                                : SurfaceAnimator.ANIMATION_TYPE_NONE));
                                : SurfaceAnimator.ANIMATION_TYPE_NONE)
                        + " animateStarting=" + animateStarting);
            }
        }
    }