diff options
| author | Dianne Hackborn <hackbod@google.com> | 2012-02-10 14:50:32 -0800 |
|---|---|---|
| committer | Dianne Hackborn <hackbod@google.com> | 2012-02-13 10:37:08 -0800 |
| commit | 4dcece8e509027cd28e20b1f9f14d2c0446d84c0 (patch) | |
| tree | 37d96e76f1b08dfdf308765e0bdcc7981ec92717 | |
| parent | 5dd4754f58e5e99f893749ab3bb3eda1de4cfbe7 (diff) | |
| download | frameworks_base-4dcece8e509027cd28e20b1f9f14d2c0446d84c0.zip frameworks_base-4dcece8e509027cd28e20b1f9f14d2c0446d84c0.tar.gz frameworks_base-4dcece8e509027cd28e20b1f9f14d2c0446d84c0.tar.bz2 | |
Fix issue where screen rotations would stop animating.
If we went through the update loop multiple times, and had finished
animating the first time, we would blow away that information the
second time and never kill the animation.
Also moved killing the animation back up to the animation step --
this involves destroying surfaces and such, and so really should
be done as part of the surface transaction. We can also consider
the screen rotation animation object to be owned by the animation,
so it can destroy it when done.
Change-Id: If24356c509c66d046f2ddfd9ad5bfe12504d7716
| -rw-r--r-- | services/java/com/android/server/wm/ScreenRotationAnimation.java | 42 | ||||
| -rw-r--r-- | services/java/com/android/server/wm/WindowManagerService.java | 23 |
2 files changed, 54 insertions, 11 deletions
diff --git a/services/java/com/android/server/wm/ScreenRotationAnimation.java b/services/java/com/android/server/wm/ScreenRotationAnimation.java index 55fb038..04a039f 100644 --- a/services/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/java/com/android/server/wm/ScreenRotationAnimation.java @@ -16,6 +16,8 @@ package com.android.server.wm; +import java.io.PrintWriter; + import android.content.Context; import android.graphics.Matrix; import android.graphics.PixelFormat; @@ -96,6 +98,46 @@ class ScreenRotationAnimation { final Matrix mTmpMatrix = new Matrix(); final float[] mTmpFloats = new float[9]; + public void printTo(String prefix, PrintWriter pw) { + pw.print(prefix); pw.print("mSurface="); pw.print(mSurface); + pw.print(" mWidth="); pw.print(mWidth); + pw.print(" mHeight="); pw.println(mHeight); + pw.print(prefix); pw.print("mBlackFrame="); pw.println(mBlackFrame); + pw.print(prefix); pw.print("mSnapshotRotation="); pw.print(mSnapshotRotation); + pw.print(" mSnapshotDeltaRotation="); pw.print(mSnapshotDeltaRotation); + pw.print(" mCurRotation="); pw.println(mCurRotation); + pw.print(prefix); pw.print("mOriginalRotation="); pw.print(mOriginalRotation); + pw.print(" mOriginalWidth="); pw.print(mOriginalWidth); + pw.print(" mOriginalHeight="); pw.println(mOriginalHeight); + pw.print(prefix); pw.print("mStarted="); pw.print(mStarted); + pw.print(" mAnimRunning="); pw.print(mAnimRunning); + pw.print(" mFinishAnimReady="); pw.print(mFinishAnimReady); + pw.print(" mFinishAnimStartTime="); pw.println(mFinishAnimStartTime); + pw.print(prefix); pw.print("mStartExitAnimation="); pw.print(mStartExitAnimation); + pw.print(" "); mStartExitTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mStartEnterAnimation="); pw.print(mStartEnterAnimation); + pw.print(" "); mStartEnterTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mFinishExitAnimation="); pw.print(mFinishExitAnimation); + pw.print(" "); mFinishExitTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mFinishEnterAnimation="); pw.print(mFinishEnterAnimation); + pw.print(" "); mFinishEnterTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mRotateExitAnimation="); pw.print(mRotateExitAnimation); + pw.print(" "); mRotateExitTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mRotateEnterAnimation="); pw.print(mRotateEnterAnimation); + pw.print(" "); mRotateEnterTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mLastRotateExitAnimation="); + pw.print(mLastRotateExitAnimation); + pw.print(" "); mLastRotateExitTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mExitTransformation="); + mExitTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mEnterTransformation="); + mEnterTransformation.printShortString(pw); pw.println(); + pw.print(prefix); pw.print("mSnapshotInitialMatrix="); + mSnapshotInitialMatrix.printShortString(pw); + pw.print(" mSnapshotFinalMatrix="); mSnapshotFinalMatrix.printShortString(pw); + pw.println(); + } + public ScreenRotationAnimation(Context context, SurfaceSession session, boolean inTransaction, int originalWidth, int originalHeight, int originalRotation) { mContext = context; diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3b5ec03..bdbaab4 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -7636,6 +7636,8 @@ public class WindowManagerService extends IWindowManager.Stub mInnerFields.mAnimating = true; } else { updateRotation = true; + mScreenRotationAnimation.kill(); + mScreenRotationAnimation = null; } } } @@ -8708,7 +8710,7 @@ public class WindowManagerService extends IWindowManager.Stub mInnerFields.mAnimating = false; // SECOND LOOP: Execute animations and update visibility of windows. - updateRotation = + updateRotation |= updateAppsAndRotationAnimationsLocked(currentTime, innerDw, innerDh); if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** ANIM STEP: seq=" @@ -9012,11 +9014,6 @@ public class WindowManagerService extends IWindowManager.Stub mTurnOnScreen = false; } - if (updateRotation && mScreenRotationAnimation != null) { - mScreenRotationAnimation.kill(); - mScreenRotationAnimation = null; - } - if (updateRotation) { if (DEBUG_ORIENTATION) Slog.d(TAG, "Performing post-rotate rotation"); if (updateRotationUncheckedLocked(false)) { @@ -9387,7 +9384,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (CUSTOM_SCREEN_ROTATION) { - if (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating()) { + if (mScreenRotationAnimation != null) { mScreenRotationAnimation.kill(); mScreenRotationAnimation = null; } @@ -9918,11 +9915,15 @@ public class WindowManagerService extends IWindowManager.Stub pw.print(" mLastWindowForcedOrientation"); pw.print(mLastWindowForcedOrientation); pw.print(" mForcedAppOrientation="); pw.println(mForcedAppOrientation); pw.print(" mDeferredRotationPauseCount="); pw.println(mDeferredRotationPauseCount); - pw.print(" mTraversalScheduled="); pw.print(mTraversalScheduled); - pw.print(" mWindowAnimationScale="); pw.print(mWindowAnimationScale); - pw.print(" mTransitionWindowAnimationScale="); pw.println(mTransitionAnimationScale); + if (mScreenRotationAnimation != null) { + pw.println(" mScreenRotationAnimation:"); + mScreenRotationAnimation.printTo(" ", pw); + } + pw.print(" mWindowAnimationScale="); pw.print(mWindowAnimationScale); + pw.print(" mTransitionWindowAnimationScale="); pw.print(mTransitionAnimationScale); pw.print(" mAnimatorDurationScale="); pw.println(mAnimatorDurationScale); - pw.print(" mNextAppTransition=0x"); + pw.print(" mTraversalScheduled="); pw.print(mTraversalScheduled); + pw.print(" mNextAppTransition=0x"); pw.print(Integer.toHexString(mNextAppTransition)); pw.print(" mAppTransitionReady="); pw.println(mAppTransitionReady); pw.print(" mAppTransitionRunning="); pw.print(mAppTransitionRunning); |
