From 3131bdec7049f54b58a808328286b759cd9bb43c Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Fri, 6 May 2016 13:39:08 -0700 Subject: [PATCH] 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 --- services/core/java/com/android/server/wm/WindowState.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index dd88bea0597bb..4050a37dc1b70 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;