Loading services/core/java/com/android/server/wm/TransitionController.java +20 −8 Original line number Original line Diff line number Diff line Loading @@ -1571,13 +1571,14 @@ class TransitionController { proto.end(token); proto.end(token); } } /** Returns {@code true} if it started collecting, {@code false} if it was queued. */ private void queueTransition(Transition transit, OnStartCollect onStartCollect, private void queueTransition(Transition transit, OnStartCollect onStartCollect) { boolean noopIfDuringDisplayChange) { final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect); final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect); // If we queue a non-display transition while a collecting transition is still not // If we queue a non-display transition while a collecting transition // formally started, then check if collecting transition is changing a display // is still not formally started, then check if collecting transition is changing a display. if ((transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0 if (noopIfDuringDisplayChange && (transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0 && mCollectingTransition != null && !mCollectingTransition.hasStarted()) { && mCollectingTransition != null && !mCollectingTransition.hasStarted()) { for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) { for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) { if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) { if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) { Loading @@ -1592,11 +1593,22 @@ class TransitionController { "Queueing transition: %s", transit); "Queueing transition: %s", transit); } } /** Returns {@code true} if it started collecting, {@code false} if it was queued. */ /** @see #startCollectOrQueue(Transition, OnStartCollect, boolean) */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) { boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) { return startCollectOrQueue(transit, onStartCollect, false /* isDirectFromShell */); } /** * Returns {@code true} if it started collecting, {@code false} if it was queued. * * @param noopIfDuringDisplayChange true we should no-op this transition when a display * changing transition is collecting but not formally started. */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect, boolean noopIfDuringDisplayChange) { if (!mQueuedTransitions.isEmpty()) { if (!mQueuedTransitions.isEmpty()) { // Just add to queue since we already have a queue. // Just add to queue since we already have a queue. queueTransition(transit, onStartCollect); queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); return false; return false; } } if (mSyncEngine.hasActiveSync()) { if (mSyncEngine.hasActiveSync()) { Loading @@ -1615,7 +1627,7 @@ class TransitionController { } else { } else { Slog.w(TAG, "Ongoing Sync outside of transition."); Slog.w(TAG, "Ongoing Sync outside of transition."); } } queueTransition(transit, onStartCollect); queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); return false; return false; } } moveToCollecting(transit); moveToCollecting(transit); Loading services/core/java/com/android/server/wm/WindowOrganizerController.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -380,7 +380,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub setAllReadyIfNeeded(nextTransition, wct); setAllReadyIfNeeded(nextTransition, wct); } } mService.mChainTracker.end(); mService.mChainTracker.end(); }); }, true /* noopIfDuringDisplayChange */); return nextTransition.getToken(); return nextTransition.getToken(); } } // The transition already started collecting before sending a request to shell, // The transition already started collecting before sending a request to shell, Loading services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -3109,7 +3109,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true); // Finish display transition // Finish display transition controller.requestStartTransition(displayTransition, /* startTask= */ null, controller.requestStartTransition(displayTransition, /* startTask= */ null, Loading Loading @@ -3141,7 +3141,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true); // Finish the display transition // Finish the display transition player.finish(); player.finish(); Loading Loading @@ -3215,7 +3215,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class); final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback); controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback, true); // Finish the first transition // Finish the first transition controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null, controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null, Loading Loading
services/core/java/com/android/server/wm/TransitionController.java +20 −8 Original line number Original line Diff line number Diff line Loading @@ -1571,13 +1571,14 @@ class TransitionController { proto.end(token); proto.end(token); } } /** Returns {@code true} if it started collecting, {@code false} if it was queued. */ private void queueTransition(Transition transit, OnStartCollect onStartCollect, private void queueTransition(Transition transit, OnStartCollect onStartCollect) { boolean noopIfDuringDisplayChange) { final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect); final QueuedTransition queuedTransition = new QueuedTransition(transit, onStartCollect); // If we queue a non-display transition while a collecting transition is still not // If we queue a non-display transition while a collecting transition // formally started, then check if collecting transition is changing a display // is still not formally started, then check if collecting transition is changing a display. if ((transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0 if (noopIfDuringDisplayChange && (transit.getFlags() & TRANSIT_FLAG_DISPLAY_LEVEL_TRANSITION) == 0 && mCollectingTransition != null && !mCollectingTransition.hasStarted()) { && mCollectingTransition != null && !mCollectingTransition.hasStarted()) { for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) { for (int i = 0; i < mCollectingTransition.mParticipants.size(); i++) { if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) { if (mCollectingTransition.mParticipants.valueAt(i).asDisplayContent() != null) { Loading @@ -1592,11 +1593,22 @@ class TransitionController { "Queueing transition: %s", transit); "Queueing transition: %s", transit); } } /** Returns {@code true} if it started collecting, {@code false} if it was queued. */ /** @see #startCollectOrQueue(Transition, OnStartCollect, boolean) */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) { boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect) { return startCollectOrQueue(transit, onStartCollect, false /* isDirectFromShell */); } /** * Returns {@code true} if it started collecting, {@code false} if it was queued. * * @param noopIfDuringDisplayChange true we should no-op this transition when a display * changing transition is collecting but not formally started. */ boolean startCollectOrQueue(Transition transit, OnStartCollect onStartCollect, boolean noopIfDuringDisplayChange) { if (!mQueuedTransitions.isEmpty()) { if (!mQueuedTransitions.isEmpty()) { // Just add to queue since we already have a queue. // Just add to queue since we already have a queue. queueTransition(transit, onStartCollect); queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); return false; return false; } } if (mSyncEngine.hasActiveSync()) { if (mSyncEngine.hasActiveSync()) { Loading @@ -1615,7 +1627,7 @@ class TransitionController { } else { } else { Slog.w(TAG, "Ongoing Sync outside of transition."); Slog.w(TAG, "Ongoing Sync outside of transition."); } } queueTransition(transit, onStartCollect); queueTransition(transit, onStartCollect, noopIfDuringDisplayChange); return false; return false; } } moveToCollecting(transit); moveToCollecting(transit); Loading
services/core/java/com/android/server/wm/WindowOrganizerController.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -380,7 +380,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub setAllReadyIfNeeded(nextTransition, wct); setAllReadyIfNeeded(nextTransition, wct); } } mService.mChainTracker.end(); mService.mChainTracker.end(); }); }, true /* noopIfDuringDisplayChange */); return nextTransition.getToken(); return nextTransition.getToken(); } } // The transition already started collecting before sending a request to shell, // The transition already started collecting before sending a request to shell, Loading
services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -3109,7 +3109,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true); // Finish display transition // Finish display transition controller.requestStartTransition(displayTransition, /* startTask= */ null, controller.requestStartTransition(displayTransition, /* startTask= */ null, Loading Loading @@ -3141,7 +3141,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final OnStartCollect openAppCollectStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback); controller.startCollectOrQueue(queuedTransition, openAppCollectStartedCallback, true); // Finish the display transition // Finish the display transition player.finish(); player.finish(); Loading Loading @@ -3215,7 +3215,7 @@ public class TransitionTests extends WindowTestsBase { final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class); final OnStartCollect queuedTransitionStartedCallback = mock(OnStartCollect.class); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); final Transition queuedTransition = createTestTransition(TRANSIT_OPEN, controller); controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback); controller.startCollectOrQueue(queuedTransition, queuedTransitionStartedCallback, true); // Finish the first transition // Finish the first transition controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null, controller.requestStartTransition(nonDisplayTransition, /* startTask= */ null, Loading