Merge "Only set SYNC flag if >1 track" into udc-qpr-dev

This commit is contained in:
Treehugger Robot
2023-08-18 15:57:07 +00:00
committed by Android (Google) Code Review
2 changed files with 37 additions and 4 deletions

View File

@@ -1124,14 +1124,15 @@ class TransitionController {
+ "track #%d", transition.getSyncId(), track);
}
}
if (sync) {
transition.mAnimationTrack = track;
info.setTrack(track);
mTrackCount = Math.max(mTrackCount, track + 1);
if (sync && mTrackCount > 1) {
// If there are >1 tracks, mark as sync so that all tracks finish.
info.setFlags(info.getFlags() | TransitionInfo.FLAG_SYNC);
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Marking #%d animation as SYNC.",
transition.getSyncId());
}
transition.mAnimationTrack = track;
info.setTrack(track);
mTrackCount = Math.max(mTrackCount, track + 1);
}
void updateAnimatingState(SurfaceControl.Transaction t) {

View File

@@ -39,6 +39,7 @@ import static android.window.TransitionInfo.FLAG_IS_BEHIND_STARTING_WINDOW;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
import static android.window.TransitionInfo.FLAG_MOVED_TO_TOP;
import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER;
import static android.window.TransitionInfo.FLAG_SYNC;
import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static android.window.TransitionInfo.isIndependent;
@@ -2384,6 +2385,37 @@ public class TransitionTests extends WindowTestsBase {
assertFalse(controller.isCollecting());
}
@Test
public void testNoSyncFlagIfOneTrack() {
final TransitionController controller = mAtm.getTransitionController();
final TestTransitionPlayer player = registerTestTransitionPlayer();
mSyncEngine = createTestBLASTSyncEngine();
controller.setSyncEngine(mSyncEngine);
final Transition transitA = createTestTransition(TRANSIT_OPEN, controller);
final Transition transitB = createTestTransition(TRANSIT_OPEN, controller);
final Transition transitC = createTestTransition(TRANSIT_OPEN, controller);
controller.startCollectOrQueue(transitA, (deferred) -> {});
controller.startCollectOrQueue(transitB, (deferred) -> {});
controller.startCollectOrQueue(transitC, (deferred) -> {});
// Verify that, as-long as there is <= 1 track, we won't get a SYNC flag
transitA.start();
transitA.setAllReady();
mSyncEngine.tryFinishForTest(transitA.getSyncId());
assertTrue((player.mLastReady.getFlags() & FLAG_SYNC) == 0);
transitB.start();
transitB.setAllReady();
mSyncEngine.tryFinishForTest(transitB.getSyncId());
assertTrue((player.mLastReady.getFlags() & FLAG_SYNC) == 0);
transitC.start();
transitC.setAllReady();
mSyncEngine.tryFinishForTest(transitC.getSyncId());
assertTrue((player.mLastReady.getFlags() & FLAG_SYNC) == 0);
}
private static void makeTaskOrganized(Task... tasks) {
final ITaskOrganizer organizer = mock(ITaskOrganizer.class);
for (Task t : tasks) {