diff options
author | Craig Mautner <cmautner@google.com> | 2012-10-02 13:49:22 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2012-10-02 15:28:09 -0700 |
commit | d5523dc7b7318f2774109dd30716ff7b74560e61 (patch) | |
tree | 20cc3e02d113ba19a1976d27692c23bbdccc930f /services/java/com/android/server/wm/WindowAnimator.java | |
parent | 09f090b377cbe2332340580daf4adf4d2502d004 (diff) | |
download | frameworks_base-d5523dc7b7318f2774109dd30716ff7b74560e61.zip frameworks_base-d5523dc7b7318f2774109dd30716ff7b74560e61.tar.gz frameworks_base-d5523dc7b7318f2774109dd30716ff7b74560e61.tar.bz2 |
Call Surface.destroy when Display is removed.
Prevents leaked Surfaces.
Bug: 7272421.
Change-Id: I6c87eb11bb0bedcf8de451b04477c70c248f905d
Diffstat (limited to 'services/java/com/android/server/wm/WindowAnimator.java')
-rw-r--r-- | services/java/com/android/server/wm/WindowAnimator.java | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 377e89c..b67fb51 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -147,6 +147,22 @@ public class WindowAnimator { } void removeDisplayLocked(final int displayId) { + final DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId); + if (displayAnimator != null) { + if (displayAnimator.mWindowAnimationBackgroundSurface != null) { + displayAnimator.mWindowAnimationBackgroundSurface.kill(); + displayAnimator.mWindowAnimationBackgroundSurface = null; + } + if (displayAnimator.mScreenRotationAnimation != null) { + displayAnimator.mScreenRotationAnimation.kill(); + displayAnimator.mScreenRotationAnimation = null; + } + if (displayAnimator.mDimAnimator != null) { + displayAnimator.mDimAnimator.kill(); + displayAnimator.mDimAnimator = null; + } + } + mDisplayContentsAnimators.delete(displayId); } @@ -527,11 +543,15 @@ public class WindowAnimator { } } - windowAnimationBackgroundSurface.show(mDw, mDh, - animLayer - WindowManagerService.LAYER_OFFSET_DIM, - windowAnimationBackgroundColor); + if (windowAnimationBackgroundSurface != null) { + windowAnimationBackgroundSurface.show(mDw, mDh, + animLayer - WindowManagerService.LAYER_OFFSET_DIM, + windowAnimationBackgroundColor); + } } else { - windowAnimationBackgroundSurface.hide(); + if (windowAnimationBackgroundSurface != null) { + windowAnimationBackgroundSurface.hide(); + } } } @@ -643,9 +663,8 @@ public class WindowAnimator { final DimAnimator.Parameters dimParams = displayAnimator.mDimParams; final DimAnimator dimAnimator = displayAnimator.mDimAnimator; - if (dimParams != null) { - dimAnimator.updateParameters( - mContext.getResources(), dimParams, mCurrentTime); + if (dimAnimator != null && dimParams != null) { + dimAnimator.updateParameters(mContext.getResources(), dimParams, mCurrentTime); } if (dimAnimator != null && dimAnimator.mDimShown) { mAnimating |= dimAnimator.updateSurface(isDimmingLocked(displayId), @@ -801,9 +820,9 @@ public class WindowAnimator { private class DisplayContentsAnimator { WinAnimatorList mWinAnimators = new WinAnimatorList(); - final DimAnimator mDimAnimator; + DimAnimator mDimAnimator = null; DimAnimator.Parameters mDimParams = null; - final DimSurface mWindowAnimationBackgroundSurface; + DimSurface mWindowAnimationBackgroundSurface = null; ScreenRotationAnimation mScreenRotationAnimation = null; public DisplayContentsAnimator(int displayId) { |