WindowState: Fix transaction usage in preserve surface

Currently we are using the global transaction without
opening it. Switch to the pending transaction.

Bug: 161937501
Test: Existing tests pass
Change-Id: Icf1215c278ce088d91bd7fb15f932f9ae6378d33
This commit is contained in:
Robert Carr
2020-08-14 15:01:03 -07:00
parent 494ad7de16
commit 5a964a3f02
2 changed files with 6 additions and 4 deletions

View File

@@ -5009,9 +5009,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
// on the new one. This prevents blinking when we change elevation of freeform and
// pinned windows.
if (!mWinAnimator.tryChangeFormatInPlaceLocked()) {
mWinAnimator.preserveSurfaceLocked();
mWinAnimator.preserveSurfaceLocked(getPendingTransaction());
result |= RELAYOUT_RES_SURFACE_CHANGED
| RELAYOUT_RES_FIRST_TIME;
scheduleAnimation();
}
}
@@ -5027,9 +5028,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
// to preserve and destroy windows which are attached to another, they
// will keep their surface and its size may change over time.
if (mHasSurface && !isChildWindow()) {
mWinAnimator.preserveSurfaceLocked();
mWinAnimator.preserveSurfaceLocked(getPendingTransaction());
result |= RELAYOUT_RES_SURFACE_CHANGED |
RELAYOUT_RES_FIRST_TIME;
scheduleAnimation();
}
}
final boolean freeformResizing = isDragResizing()

View File

@@ -349,7 +349,7 @@ class WindowStateAnimator {
return result;
}
void preserveSurfaceLocked() {
void preserveSurfaceLocked(SurfaceControl.Transaction t) {
if (mDestroyPreservedSurfaceUponRedraw) {
// This could happen when switching the surface mode very fast. For example,
// we preserved a surface when dragResizing changed to true. Then before the
@@ -376,7 +376,7 @@ class WindowStateAnimator {
// Our SurfaceControl is always at layer 0 within the parent Surface managed by
// window-state. We want this old Surface to stay on top of the new one
// until we do the swap, so we place it at a positive layer.
mSurfaceController.mSurfaceControl.setLayer(PRESERVED_SURFACE_LAYER);
t.setLayer(mSurfaceController.getClientViewRootSurface(), PRESERVED_SURFACE_LAYER);
}
mDestroyPreservedSurfaceUponRedraw = true;
mSurfaceDestroyDeferred = true;