Loading libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +6 −0 Original line number Diff line number Diff line Loading @@ -799,6 +799,12 @@ public class Transitions implements RemoteCallable<Transitions> { ++mergeIdx; continue; } if (mergeCandidate.mInfo == null) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Transition merge candidate" + " %s is not ready yet", mergeCandidate.mToken); // The later transition should not be merged if the prior one is not ready. return; } if (mergeCandidate.mMerged) { throw new IllegalStateException("Can't merge a transition after not-merging" + " a preceding one."); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java +42 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,33 @@ public class ShellTransitionTests extends ShellTestCase { assertEquals(0, mDefaultHandler.activeCount()); } @Test public void testTransitionMergingOnFinish() { final Transitions transitions = createTestTransitions(); transitions.replaceDefaultHandlerForTest(mDefaultHandler); // The current transition. final IBinder transitToken1 = new Binder(); requestStartTransition(transitions, transitToken1); onTransitionReady(transitions, transitToken1); // The next ready transition. final IBinder transitToken2 = new Binder(); requestStartTransition(transitions, transitToken2); onTransitionReady(transitions, transitToken2); // The non-ready merge candidate. final IBinder transitTokenNotReady = new Binder(); requestStartTransition(transitions, transitTokenNotReady); mDefaultHandler.setSimulateMerge(true); mDefaultHandler.mFinishes.get(0).onTransitionFinished(null /* wct */, null /* wctCB */); // Make sure that the non-ready transition is not merged. assertEquals(0, mDefaultHandler.mergeCount()); } @Test public void testTransitionOrderMatchesCore() { Transitions transitions = createTestTransitions(); Loading Loading @@ -1036,6 +1063,21 @@ public class ShellTransitionTests extends ShellTestCase { } } private static void requestStartTransition(Transitions transitions, IBinder token) { transitions.requestStartTransition(token, new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */, null /* remote */)); } private static void onTransitionReady(Transitions transitions, IBinder token) { transitions.onTransitionReady(token, createTransitionInfo(), mock(SurfaceControl.Transaction.class), mock(SurfaceControl.Transaction.class)); } private static TransitionInfo createTransitionInfo() { return new TransitionInfoBuilder(TRANSIT_OPEN) .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build(); } private static SurfaceControl createMockSurface(boolean valid) { SurfaceControl sc = mock(SurfaceControl.class); doReturn(valid).when(sc).isValid(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +6 −0 Original line number Diff line number Diff line Loading @@ -799,6 +799,12 @@ public class Transitions implements RemoteCallable<Transitions> { ++mergeIdx; continue; } if (mergeCandidate.mInfo == null) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Transition merge candidate" + " %s is not ready yet", mergeCandidate.mToken); // The later transition should not be merged if the prior one is not ready. return; } if (mergeCandidate.mMerged) { throw new IllegalStateException("Can't merge a transition after not-merging" + " a preceding one."); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java +42 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,33 @@ public class ShellTransitionTests extends ShellTestCase { assertEquals(0, mDefaultHandler.activeCount()); } @Test public void testTransitionMergingOnFinish() { final Transitions transitions = createTestTransitions(); transitions.replaceDefaultHandlerForTest(mDefaultHandler); // The current transition. final IBinder transitToken1 = new Binder(); requestStartTransition(transitions, transitToken1); onTransitionReady(transitions, transitToken1); // The next ready transition. final IBinder transitToken2 = new Binder(); requestStartTransition(transitions, transitToken2); onTransitionReady(transitions, transitToken2); // The non-ready merge candidate. final IBinder transitTokenNotReady = new Binder(); requestStartTransition(transitions, transitTokenNotReady); mDefaultHandler.setSimulateMerge(true); mDefaultHandler.mFinishes.get(0).onTransitionFinished(null /* wct */, null /* wctCB */); // Make sure that the non-ready transition is not merged. assertEquals(0, mDefaultHandler.mergeCount()); } @Test public void testTransitionOrderMatchesCore() { Transitions transitions = createTestTransitions(); Loading Loading @@ -1036,6 +1063,21 @@ public class ShellTransitionTests extends ShellTestCase { } } private static void requestStartTransition(Transitions transitions, IBinder token) { transitions.requestStartTransition(token, new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */, null /* remote */)); } private static void onTransitionReady(Transitions transitions, IBinder token) { transitions.onTransitionReady(token, createTransitionInfo(), mock(SurfaceControl.Transaction.class), mock(SurfaceControl.Transaction.class)); } private static TransitionInfo createTransitionInfo() { return new TransitionInfoBuilder(TRANSIT_OPEN) .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build(); } private static SurfaceControl createMockSurface(boolean valid) { SurfaceControl sc = mock(SurfaceControl.class); doReturn(valid).when(sc).isValid(); Loading