Do not use sync on divider visibility changed.

When we set divider visibility, we only use sync transcation on
hidden case because we need do fade-in animation for show case.
This might lead divider hidden on some race if  we set hidden at
first and show later case because the first hidden is waiting sync
and apply later actually.

Fix: 269049102
Test: manual
Test: pass existing tests
Change-Id: Ibdb91cc5c8e1d3a1f9c3726df7d467c7255998f0
This commit is contained in:
Tony Huang
2023-02-18 08:50:34 +00:00
parent 5b5420b921
commit b026147261

View File

@@ -1695,9 +1695,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
mSyncQueue.queue(wct);
mSyncQueue.runInSync(t -> {
setDividerVisibility(mainStageVisible, t);
});
setDividerVisibility(mainStageVisible, null);
}
private void setDividerVisibility(boolean visible, @Nullable SurfaceControl.Transaction t) {
@@ -1779,6 +1777,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
@Override
public void onAnimationEnd(Animator animation) {
if (dividerLeash != null && dividerLeash.isValid()) {
transaction.setAlpha(dividerLeash, 1);
transaction.apply();
}
mTransactionPool.release(transaction);
mDividerFadeInAnimator = null;
}