Clear seamless rotation transform for transaction commit timeout
For example:
The rotation transition is ready while the cutout is not yet drawn
for new rotation, then the start transaction of transition will contain
the unrotate-transform to keep the same appearance. But if the
transition player is somehow slow, BLASTSyncEngine will apply the
start transaction after 5s timeout. Then AsyncRotationController will
receive the transaction commit callback to clear the rotation transform
because the display projection transaction was applied.
But the transition player may be still alive, then it still applies
the start transaction again after a few seconds, which causes the
cutout to unrotate while display is already rotated.
So when the timeout case happens, put the recovery transform in the
cleanup transaction which will be applied when the transition is
finished. That avoids keeping a stale transform.
Note that the recovery transform should not be always set in cleanup
transaction, because the seamless windows need to sync until it
reports drawn. Otherwise it will cause flickering.
Bug: 300677147
Test: Set break point at the beginning of
com.android.wm.shell.transitionon.Transitions#TransitionReady
Rotate device and wait until log "WM sent Transaction
to organized, but never received commit callback.
Application ANR likely to follow." appears.
Resume the break point and check the cutout shows correctly.
Change-Id: Ibbfcb4a16f08147edf909ace8a8029c4bcf24b14
3 files changed