Loading services/core/java/com/android/server/wm/AppTransition.java +4 −2 Original line number Diff line number Diff line Loading @@ -691,8 +691,10 @@ public class AppTransition implements Dump { throw new RuntimeException("Invalid thumbnail transition state"); } return prepareThumbnailAnimationWithDuration(a, appWidth, appHeight, THUMBNAIL_APP_TRANSITION_DURATION, mThumbnailFastOutSlowInInterpolator); int duration = Math.max(THUMBNAIL_APP_TRANSITION_ALPHA_DURATION, THUMBNAIL_APP_TRANSITION_DURATION); return prepareThumbnailAnimationWithDuration(a, appWidth, appHeight, duration, mThumbnailFastOutSlowInInterpolator); } /** Loading services/core/java/com/android/server/wm/AppWindowAnimator.java +27 −27 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ public class AppWindowAnimator { // the state changes. boolean allDrawn; // Special surface for thumbnail animation. // Special surface for thumbnail animation. If deferThumbnailDestruction is enabled, then we // will make sure that the thumbnail is destroyed after the other surface is completed. This // requires that the duration of the two animations are the same. SurfaceControl thumbnail; int thumbnailTransactionSeq; int thumbnailX; Loading @@ -68,13 +70,12 @@ public class AppWindowAnimator { Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); // This flag indicates that the destruction of the thumbnail surface is synchronized with // another animation, so do not pre-emptively destroy the thumbnail surface when the animation // completes // another animation, so defer the destruction of this thumbnail surface for a single frame // after the secondary animation completes. boolean deferThumbnailDestruction; // This is the thumbnail surface that has been bestowed upon this animator, and when the // surface for this animator's animation is complete, we will destroy the thumbnail surface // as well. Do not animate or do anything with this surface. SurfaceControl deferredThumbnail; // This flag is set if the animator has deferThumbnailDestruction set and has reached the final // frame of animation. It will extend the animation by one frame and then clean up afterwards. boolean deferFinalFrameCleanup; /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */ ArrayList<WindowStateAnimator> mAllAppWinAnimators = new ArrayList<WindowStateAnimator>(); Loading Loading @@ -134,9 +135,7 @@ public class AppWindowAnimator { animation = null; animating = true; } if (!deferThumbnailDestruction) { clearThumbnail(); } if (mAppToken.deferClearAllDrawn) { mAppToken.allDrawn = false; mAppToken.deferClearAllDrawn = false; Loading @@ -148,13 +147,7 @@ public class AppWindowAnimator { thumbnail.destroy(); thumbnail = null; } } public void clearDeferredThumbnail() { if (deferredThumbnail != null) { deferredThumbnail.destroy(); deferredThumbnail = null; } deferThumbnailDestruction = false; } void updateLayers() { Loading Loading @@ -223,19 +216,26 @@ public class AppWindowAnimator { return false; } transformation.clear(); final boolean more = animation.getTransformation(currentTime, transformation); boolean hasMoreFrames = animation.getTransformation(currentTime, transformation); if (!hasMoreFrames) { if (deferThumbnailDestruction && !deferFinalFrameCleanup) { // We are deferring the thumbnail destruction, so extend the animation for one more // (dummy) frame before we clean up deferFinalFrameCleanup = true; hasMoreFrames = true; } else { if (false && WindowManagerService.DEBUG_ANIM) Slog.v( TAG, "Stepped animation in " + mAppToken + ": more=" + more + ", xform=" + transformation); if (!more) { TAG, "Stepped animation in " + mAppToken + ": more=" + hasMoreFrames + ", xform=" + transformation); deferFinalFrameCleanup = false; animation = null; if (!deferThumbnailDestruction) { clearThumbnail(); } if (WindowManagerService.DEBUG_ANIM) Slog.v( TAG, "Finished animation in " + mAppToken + " @ " + currentTime); } hasTransformation = more; return more; } hasTransformation = hasMoreFrames; return hasMoreFrames; } // This must be called while inside a transaction. Loading services/core/java/com/android/server/wm/WindowManagerService.java +0 −6 Original line number Diff line number Diff line Loading @@ -9244,12 +9244,6 @@ public class WindowManagerService extends IWindowManager.Stub topClosingLayer); openingAppAnimator.deferThumbnailDestruction = !mAppTransition.isNextThumbnailTransitionScaleUp(); if (openingAppAnimator.deferThumbnailDestruction) { if (closingAppAnimator != null && closingAppAnimator.animation != null) { closingAppAnimator.deferredThumbnail = surfaceControl; } } } else { anim = mAppTransition.createThumbnailScaleAnimationLocked( displayInfo.appWidth, displayInfo.appHeight, transit); Loading services/core/java/com/android/server/wm/WindowStateAnimator.java +0 −5 Original line number Diff line number Diff line Loading @@ -975,11 +975,6 @@ class WindowStateAnimator { mWin.mHasSurface = false; mDrawState = NO_SURFACE; } // Destroy any deferred thumbnail surfaces if (mAppAnimator != null) { mAppAnimator.clearDeferredThumbnail(); } } void destroyDeferredSurfaceLocked() { Loading Loading
services/core/java/com/android/server/wm/AppTransition.java +4 −2 Original line number Diff line number Diff line Loading @@ -691,8 +691,10 @@ public class AppTransition implements Dump { throw new RuntimeException("Invalid thumbnail transition state"); } return prepareThumbnailAnimationWithDuration(a, appWidth, appHeight, THUMBNAIL_APP_TRANSITION_DURATION, mThumbnailFastOutSlowInInterpolator); int duration = Math.max(THUMBNAIL_APP_TRANSITION_ALPHA_DURATION, THUMBNAIL_APP_TRANSITION_DURATION); return prepareThumbnailAnimationWithDuration(a, appWidth, appHeight, duration, mThumbnailFastOutSlowInInterpolator); } /** Loading
services/core/java/com/android/server/wm/AppWindowAnimator.java +27 −27 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ public class AppWindowAnimator { // the state changes. boolean allDrawn; // Special surface for thumbnail animation. // Special surface for thumbnail animation. If deferThumbnailDestruction is enabled, then we // will make sure that the thumbnail is destroyed after the other surface is completed. This // requires that the duration of the two animations are the same. SurfaceControl thumbnail; int thumbnailTransactionSeq; int thumbnailX; Loading @@ -68,13 +70,12 @@ public class AppWindowAnimator { Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); // This flag indicates that the destruction of the thumbnail surface is synchronized with // another animation, so do not pre-emptively destroy the thumbnail surface when the animation // completes // another animation, so defer the destruction of this thumbnail surface for a single frame // after the secondary animation completes. boolean deferThumbnailDestruction; // This is the thumbnail surface that has been bestowed upon this animator, and when the // surface for this animator's animation is complete, we will destroy the thumbnail surface // as well. Do not animate or do anything with this surface. SurfaceControl deferredThumbnail; // This flag is set if the animator has deferThumbnailDestruction set and has reached the final // frame of animation. It will extend the animation by one frame and then clean up afterwards. boolean deferFinalFrameCleanup; /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */ ArrayList<WindowStateAnimator> mAllAppWinAnimators = new ArrayList<WindowStateAnimator>(); Loading Loading @@ -134,9 +135,7 @@ public class AppWindowAnimator { animation = null; animating = true; } if (!deferThumbnailDestruction) { clearThumbnail(); } if (mAppToken.deferClearAllDrawn) { mAppToken.allDrawn = false; mAppToken.deferClearAllDrawn = false; Loading @@ -148,13 +147,7 @@ public class AppWindowAnimator { thumbnail.destroy(); thumbnail = null; } } public void clearDeferredThumbnail() { if (deferredThumbnail != null) { deferredThumbnail.destroy(); deferredThumbnail = null; } deferThumbnailDestruction = false; } void updateLayers() { Loading Loading @@ -223,19 +216,26 @@ public class AppWindowAnimator { return false; } transformation.clear(); final boolean more = animation.getTransformation(currentTime, transformation); boolean hasMoreFrames = animation.getTransformation(currentTime, transformation); if (!hasMoreFrames) { if (deferThumbnailDestruction && !deferFinalFrameCleanup) { // We are deferring the thumbnail destruction, so extend the animation for one more // (dummy) frame before we clean up deferFinalFrameCleanup = true; hasMoreFrames = true; } else { if (false && WindowManagerService.DEBUG_ANIM) Slog.v( TAG, "Stepped animation in " + mAppToken + ": more=" + more + ", xform=" + transformation); if (!more) { TAG, "Stepped animation in " + mAppToken + ": more=" + hasMoreFrames + ", xform=" + transformation); deferFinalFrameCleanup = false; animation = null; if (!deferThumbnailDestruction) { clearThumbnail(); } if (WindowManagerService.DEBUG_ANIM) Slog.v( TAG, "Finished animation in " + mAppToken + " @ " + currentTime); } hasTransformation = more; return more; } hasTransformation = hasMoreFrames; return hasMoreFrames; } // This must be called while inside a transaction. Loading
services/core/java/com/android/server/wm/WindowManagerService.java +0 −6 Original line number Diff line number Diff line Loading @@ -9244,12 +9244,6 @@ public class WindowManagerService extends IWindowManager.Stub topClosingLayer); openingAppAnimator.deferThumbnailDestruction = !mAppTransition.isNextThumbnailTransitionScaleUp(); if (openingAppAnimator.deferThumbnailDestruction) { if (closingAppAnimator != null && closingAppAnimator.animation != null) { closingAppAnimator.deferredThumbnail = surfaceControl; } } } else { anim = mAppTransition.createThumbnailScaleAnimationLocked( displayInfo.appWidth, displayInfo.appHeight, transit); Loading
services/core/java/com/android/server/wm/WindowStateAnimator.java +0 −5 Original line number Diff line number Diff line Loading @@ -975,11 +975,6 @@ class WindowStateAnimator { mWin.mHasSurface = false; mDrawState = NO_SURFACE; } // Destroy any deferred thumbnail surfaces if (mAppAnimator != null) { mAppAnimator.clearDeferredThumbnail(); } } void destroyDeferredSurfaceLocked() { Loading