Loading services/core/java/com/android/server/wm/TransitionController.java +5 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading
services/core/java/com/android/server/wm/TransitionController.java +5 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +32 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading