From 8a197a4e0887000241dfd183d1e83e6e0f9b2268 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Tue, 24 Apr 2012 16:59:36 -0700 Subject: [PATCH] Fix dark flash when transition ends. The DimSurface layer was momentarily being placed above the entering app animtion. This lets the layering be set after the animations have been evaluated. Plus debug enhancements. Change-Id: Icc034bc5264ae9bc6c57c593534683b56588b59a --- .../com/android/server/wm/AppWindowAnimator.java | 12 ++++++------ services/java/com/android/server/wm/DimSurface.java | 9 ++++++++- .../java/com/android/server/wm/WindowAnimator.java | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index 696413727a700..d635e8cd8c80c 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -54,7 +54,7 @@ public class AppWindowAnimator { public void setAnimation(Animation anim, boolean initialized) { if (WindowManagerService.localLOGV) Slog.v( - TAG, "Setting animation in " + this + ": " + anim); + TAG, "Setting animation in " + mAppToken + ": " + anim); animation = anim; animating = false; animInitialized = initialized; @@ -81,7 +81,7 @@ public class AppWindowAnimator { public void setDummyAnimation() { if (animation == null) { if (WindowManagerService.localLOGV) Slog.v( - TAG, "Setting dummy animation in " + this); + TAG, "Setting dummy animation in " + mAppToken); animation = sDummyAnimation; animInitialized = false; } @@ -165,12 +165,12 @@ public class AppWindowAnimator { transformation.clear(); final boolean more = animation.getTransformation(currentTime, transformation); if (WindowManagerService.DEBUG_ANIM) Slog.v( - TAG, "Stepped animation in " + this + ": more=" + more + ", xform=" + transformation); + TAG, "Stepped animation in " + mAppToken + ": more=" + more + ", xform=" + transformation); if (!more) { animation = null; clearThumbnail(); if (WindowManagerService.DEBUG_ANIM) Slog.v( - TAG, "Finished animation in " + this + " @ " + currentTime); + TAG, "Finished animation in " + mAppToken + " @ " + currentTime); } hasTransformation = more; return more; @@ -195,7 +195,7 @@ public class AppWindowAnimator { && animation != null) { if (!animating) { if (WindowManagerService.DEBUG_ANIM) Slog.v( - TAG, "Starting animation in " + this + + TAG, "Starting animation in " + mAppToken + " @ " + currentTime + ": dw=" + dw + " dh=" + dh + " scale=" + mService.mTransitionAnimationScale + " allDrawn=" + mAppToken.allDrawn + " animating=" + animating); @@ -248,7 +248,7 @@ public class AppWindowAnimator { } if (WindowManagerService.DEBUG_ANIM) Slog.v( - TAG, "Animation done in " + this + TAG, "Animation done in " + mAppToken + ": reportedVisible=" + mAppToken.reportedVisible); transformation.clear(); diff --git a/services/java/com/android/server/wm/DimSurface.java b/services/java/com/android/server/wm/DimSurface.java index c1dbb36a2eb1e..9fca418360672 100644 --- a/services/java/com/android/server/wm/DimSurface.java +++ b/services/java/com/android/server/wm/DimSurface.java @@ -33,10 +33,17 @@ class DimSurface { DimSurface(SurfaceSession session) { if (mDimSurface == null) { try { - mDimSurface = new Surface(session, 0, + if (WindowManagerService.DEBUG_SURFACE_TRACE) { + mDimSurface = new WindowStateAnimator.SurfaceTrace(session, 0, "DimSurface", -1, 16, 16, PixelFormat.OPAQUE, Surface.FX_SURFACE_DIM); + } else { + mDimSurface = new Surface(session, 0, + "DimSurface", + -1, 16, 16, PixelFormat.OPAQUE, + Surface.FX_SURFACE_DIM); + } if (WindowManagerService.SHOW_TRANSACTIONS || WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": CREATE"); diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index f1ad53915623a..e5b1f2c27fc1a 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -451,9 +451,9 @@ public class WindowAnimator { Surface.openTransaction(); try { - testWallpaperAndBackgroundLocked(); updateWindowsAppsAndRotationAnimationsLocked(); performAnimationsLocked(); + testWallpaperAndBackgroundLocked(); // THIRD LOOP: Update the surfaces of all windows.