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
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index dd88bea..4050a37 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 @@
         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;