summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2016-05-06 13:39:08 -0700
committer Chris Craik <ccraik@google.com> 2016-05-06 15:11:27 -0700
commit3131bdec7049f54b58a808328286b759cd9bb43c (patch)
tree910b3c14fd14b5bf089639f9670cda841ea185ee
parent08ca2e3a7593ced4967c56709a1fe675408d42dc (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.java5
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;