Merge "Do not postpone draw transaction" into tm-qpr-dev am: 061bca8af9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20848711 Change-Id: If459dd5b1ed1e12a763422780ae2dc3c998405cc Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -395,14 +395,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
/** The last syncId associated with a BLAST prepareSync or 0 when no BLAST sync is active. */
|
||||
int mPrepareSyncSeqId = 0;
|
||||
|
||||
/**
|
||||
* {@code true} when the client was still drawing for sync when the sync-set was finished or
|
||||
* cancelled. This can happen if the window goes away during a sync. In this situation we need
|
||||
* to make sure to still apply the postDrawTransaction when it finishes to prevent the client
|
||||
* from getting stuck in a bad state.
|
||||
*/
|
||||
boolean mClientWasDrawingForSync = false;
|
||||
|
||||
/**
|
||||
* Special mode that is intended only for the rounded corner overlay: during rotation
|
||||
* transition, we un-rotate the window token such that the window appears as it did before the
|
||||
@@ -6024,9 +6016,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
|
||||
@Override
|
||||
void finishSync(Transaction outMergedTransaction, boolean cancel) {
|
||||
if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mRedrawForSyncReported) {
|
||||
mClientWasDrawingForSync = true;
|
||||
}
|
||||
mPrepareSyncSeqId = 0;
|
||||
if (cancel) {
|
||||
// This is leaving sync so any buffers left in the sync have a chance of
|
||||
@@ -6094,9 +6083,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
layoutNeeded = onSyncFinishedDrawing();
|
||||
}
|
||||
|
||||
layoutNeeded |=
|
||||
mWinAnimator.finishDrawingLocked(postDrawTransaction, mClientWasDrawingForSync);
|
||||
mClientWasDrawingForSync = false;
|
||||
layoutNeeded |= mWinAnimator.finishDrawingLocked(postDrawTransaction);
|
||||
// We always want to force a traversal after a finish draw for blast sync.
|
||||
return !skipLayout && (hasSyncHandlers || layoutNeeded);
|
||||
}
|
||||
|
||||
@@ -151,17 +151,6 @@ class WindowStateAnimator {
|
||||
|
||||
int mAttrType;
|
||||
|
||||
/**
|
||||
* Handles surface changes synchronized to after the client has drawn the surface. This
|
||||
* transaction is currently used to reparent the old surface children to the new surface once
|
||||
* the client has completed drawing to the new surface.
|
||||
* This transaction is also used to merge transactions parceled in by the client. The client
|
||||
* uses the transaction to update the relative z of its children from the old parent surface
|
||||
* to the new parent surface once window manager reparents its children.
|
||||
*/
|
||||
private final SurfaceControl.Transaction mPostDrawTransaction =
|
||||
new SurfaceControl.Transaction();
|
||||
|
||||
WindowStateAnimator(final WindowState win) {
|
||||
final WindowManagerService service = win.mWmService;
|
||||
|
||||
@@ -217,8 +206,7 @@ class WindowStateAnimator {
|
||||
}
|
||||
}
|
||||
|
||||
boolean finishDrawingLocked(SurfaceControl.Transaction postDrawTransaction,
|
||||
boolean forceApplyNow) {
|
||||
boolean finishDrawingLocked(SurfaceControl.Transaction postDrawTransaction) {
|
||||
final boolean startingWindow =
|
||||
mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
||||
if (startingWindow) {
|
||||
@@ -240,14 +228,7 @@ class WindowStateAnimator {
|
||||
}
|
||||
|
||||
if (postDrawTransaction != null) {
|
||||
// If there is no surface, the last draw was for the previous surface. We don't want to
|
||||
// wait until the new surface is shown and instead just apply the transaction right
|
||||
// away.
|
||||
if (mLastHidden && mDrawState != NO_SURFACE && !forceApplyNow) {
|
||||
mPostDrawTransaction.merge(postDrawTransaction);
|
||||
} else {
|
||||
mWin.getSyncTransaction().merge(postDrawTransaction);
|
||||
}
|
||||
mWin.getSyncTransaction().merge(postDrawTransaction);
|
||||
layoutNeeded = true;
|
||||
}
|
||||
|
||||
@@ -547,7 +528,6 @@ class WindowStateAnimator {
|
||||
if (!shown)
|
||||
return false;
|
||||
|
||||
t.merge(mPostDrawTransaction);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -714,10 +694,6 @@ class WindowStateAnimator {
|
||||
}
|
||||
|
||||
void destroySurface(SurfaceControl.Transaction t) {
|
||||
// Since the SurfaceControl is getting torn down, it's safe to just clean up any
|
||||
// pending transactions that were in mPostDrawTransaction, as well.
|
||||
t.merge(mPostDrawTransaction);
|
||||
|
||||
try {
|
||||
if (mSurfaceController != null) {
|
||||
mSurfaceController.destroy(t);
|
||||
|
||||
@@ -545,7 +545,12 @@ public class WindowStateTests extends WindowTestsBase {
|
||||
win.applyWithNextDraw(t -> handledT[0] = t);
|
||||
assertTrue(win.useBLASTSync());
|
||||
final SurfaceControl.Transaction drawT = new StubTransaction();
|
||||
final SurfaceControl.Transaction currT = win.getSyncTransaction();
|
||||
clearInvocations(currT);
|
||||
win.mWinAnimator.mLastHidden = true;
|
||||
assertTrue(win.finishDrawing(drawT, Integer.MAX_VALUE));
|
||||
// The draw transaction should be merged to current transaction even if the state is hidden.
|
||||
verify(currT).merge(eq(drawT));
|
||||
assertEquals(drawT, handledT[0]);
|
||||
assertFalse(win.useBLASTSync());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user