diff options
| author | 2015-12-09 20:53:05 +0000 | |
|---|---|---|
| committer | 2015-12-09 20:53:05 +0000 | |
| commit | e37925187889c0bf0d79f6adffbcb953ed02fc0c (patch) | |
| tree | 83ec857cf6efb7cd26b431aac58347298298f5f2 | |
| parent | 5e7033702a14e5e58fbfe9ff95c38551f0f23d40 (diff) | |
| parent | 0df9b0f4ec369b6fb373e0b7cbebed153af66ea7 (diff) | |
Merge "Prevent crash when manipulating hidden SurfaceView."
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index dbbbb58f452d..0c606fefacb7 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2534,26 +2534,32 @@ public class WindowManagerService extends IWindowManager.Stub win.mAttrs.height = bottom - top; win.setWindowScale(win.mRequestedWidth, win.mRequestedHeight); - if (SHOW_TRANSACTIONS) { - Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild"); - } + if (win.mHasSurface) { + if (SHOW_TRANSACTIONS) { + Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild"); + } - SurfaceControl.openTransaction(); + SurfaceControl.openTransaction(); - win.applyGravityAndUpdateFrame(); - win.mWinAnimator.computeShownFrameLocked(); + try { - win.mWinAnimator.setSurfaceBoundariesLocked(false); + win.applyGravityAndUpdateFrame(); + win.mWinAnimator.computeShownFrameLocked(); - if (deferTransactionUntilFrame > 0) { - win.mWinAnimator.mSurfaceController.deferTransactionUntil( - win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(), - deferTransactionUntilFrame); - } + win.mWinAnimator.setSurfaceBoundariesLocked(false); - SurfaceControl.closeTransaction(); - if (SHOW_TRANSACTIONS) { - Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild"); + if (deferTransactionUntilFrame > 0) { + win.mWinAnimator.mSurfaceController.deferTransactionUntil( + win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(), + deferTransactionUntilFrame); + } + + } finally { + SurfaceControl.closeTransaction(); + if (SHOW_TRANSACTIONS) { + Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild"); + } + } } outFrame = win.mCompatFrame; |