Merge "Add more logs in WindowManagerService#waitForAnimationsToComplete" into sc-dev
diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java
index ba18893..3c6c23b 100644
--- a/services/core/java/com/android/server/wm/SurfaceAnimator.java
+++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java
@@ -520,7 +520,7 @@
/**
* Converts {@link AnimationType} to String.
*/
- private static String animationTypeToString(@AnimationType int type) {
+ static String animationTypeToString(@AnimationType int type) {
switch (type) {
case ANIMATION_TYPE_NONE: return "none";
case ANIMATION_TYPE_APP_TRANSITION: return "app_transition";
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 55224cc..8bee862 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -106,6 +106,7 @@
import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL;
import static com.android.server.wm.DisplayContent.IME_TARGET_INPUT;
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
+import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
@@ -8090,8 +8091,13 @@
// This could prevent if there is no container animation, we still have to apply the
// pending transaction and exit waiting.
mAnimator.mNotifyWhenNoAnimation = true;
- while ((mAnimator.isAnimationScheduled()
- || mRoot.isAnimating(TRANSITION | CHILDREN)) && timeoutRemaining > 0) {
+ WindowContainer animatingContainer = null;
+ while (mAnimator.isAnimationScheduled() || timeoutRemaining > 0) {
+ animatingContainer = mRoot.getAnimatingContainer(TRANSITION | CHILDREN,
+ ANIMATION_TYPE_ALL);
+ if (animatingContainer == null) {
+ break;
+ }
long startTime = System.currentTimeMillis();
try {
mGlobalLock.wait(timeoutRemaining);
@@ -8101,9 +8107,13 @@
}
mAnimator.mNotifyWhenNoAnimation = false;
- if (mAnimator.isAnimationScheduled()
- || mRoot.isAnimating(TRANSITION | CHILDREN)) {
- Slog.w(TAG, "Timed out waiting for animations to complete.");
+ if (mAnimator.isAnimationScheduled() || animatingContainer != null) {
+ Slog.w(TAG, "Timed out waiting for animations to complete,"
+ + " animatingContainer=" + animatingContainer
+ + " animationType=" + SurfaceAnimator.animationTypeToString(
+ animatingContainer != null
+ ? animatingContainer.mSurfaceAnimator.getAnimationType()
+ : SurfaceAnimator.ANIMATION_TYPE_NONE));
}
}
}