summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/wm/WindowAnimator.java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2012-10-02 13:49:22 -0700
committerCraig Mautner <cmautner@google.com>2012-10-02 15:28:09 -0700
commitd5523dc7b7318f2774109dd30716ff7b74560e61 (patch)
tree20cc3e02d113ba19a1976d27692c23bbdccc930f /services/java/com/android/server/wm/WindowAnimator.java
parent09f090b377cbe2332340580daf4adf4d2502d004 (diff)
downloadframeworks_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.java37
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) {