53 {
54 FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
55 DisplayManager mockDisplayManager = mock(DisplayManager.class);
56 Display mockDisplay = mock(Display.class);
57 ArgumentCaptor<VsyncWaiter.DisplayListener> displayListenerCaptor =
58 ArgumentCaptor.forClass(VsyncWaiter.DisplayListener.class);
59 when(mockDisplayManager.getDisplay(Display.DEFAULT_DISPLAY)).thenReturn(mockDisplay);
60
61 VsyncWaiter waiter = VsyncWaiter.getInstance(mockDisplayManager, mockFlutterJNI);
62 verify(mockDisplayManager,
times(1))
63 .registerDisplayListener(displayListenerCaptor.capture(), isNull());
64
65 when(mockDisplay.getRefreshRate()).thenReturn(90.0
f);
66 displayListenerCaptor.getValue().onDisplayChanged(Display.DEFAULT_DISPLAY);
67 verify(mockFlutterJNI,
times(1)).setRefreshRateFPS(90.0
f);
68
69 waiter.init();
70
71 ArgumentCaptor<FlutterJNI.AsyncWaitForVsyncDelegate> delegateCaptor =
72 ArgumentCaptor.forClass(FlutterJNI.AsyncWaitForVsyncDelegate.class);
73 verify(mockFlutterJNI,
times(1)).setAsyncWaitForVsyncDelegate(delegateCaptor.capture());
74 delegateCaptor.getValue().asyncWaitForVsync(1);
75 shadowOf(Looper.getMainLooper()).idle();
76 verify(mockFlutterJNI,
times(1)).onVsync(anyLong(),
eq(1000000000l / 90l),
eq(1l));
77
78 when(mockDisplay.getRefreshRate()).thenReturn(60.0
f);
79 displayListenerCaptor.getValue().onDisplayChanged(Display.DEFAULT_DISPLAY);
80 verify(mockFlutterJNI,
times(1)).setRefreshRateFPS(60.0
f);
81
82 delegateCaptor.getValue().asyncWaitForVsync(1);
83 shadowOf(Looper.getMainLooper()).idle();
84 verify(mockFlutterJNI,
times(1)).onVsync(anyLong(),
eq(1000000000l / 60l),
eq(1l));
85 }