diff options
| author | 2016-05-06 13:39:08 -0700 | |
|---|---|---|
| committer | 2016-05-06 15:11:27 -0700 | |
| commit | 3131bdec7049f54b58a808328286b759cd9bb43c (patch) | |
| tree | 910b3c14fd14b5bf089639f9670cda841ea185ee | |
| parent | 08ca2e3a7593ced4967c56709a1fe675408d42dc (diff) | |
Reset transparent region when saving a surface
Fixes: 28432088
Ensure a transparent region on a saved surface is reset for future use,
since the surface should be like-new if used again.
This prevents an issue where the region - used to signal a portion of
content doesn't need to be composited - is persisted when a saved
surface is reused. The client assumes it's new and in default
state (composite everything), but the window is clipped when composited.
Change-Id: Icf2ec94c735679d715aded58de7eab12e9c43367
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index dd88bea0597b..4050a37dc1b7 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1986,12 +1986,17 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mAppToken.shouldSaveSurface(); } + static final Region sEmptyRegion = new Region(); + void destroyOrSaveSurface() { mSurfaceSaved = shouldSaveSurface(); if (mSurfaceSaved) { if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) { Slog.v(TAG, "Saving surface: " + this); } + // Previous user of the surface may have set a transparent region signaling a portion + // doesn't need to be composited, so reset to default empty state. + mSession.setTransparentRegion(mClient, sEmptyRegion); mWinAnimator.hide("saved surface"); mWinAnimator.mDrawState = WindowStateAnimator.NO_SURFACE; |