• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.launcher3.logging
2 
3 import androidx.core.util.isEmpty
4 import androidx.test.annotation.UiThreadTest
5 import androidx.test.ext.junit.runners.AndroidJUnit4
6 import androidx.test.filters.SmallTest
7 import com.google.common.truth.Truth.assertThat
8 import org.junit.Before
9 import org.junit.Test
10 import org.junit.runner.RunWith
11 
12 /** Unit test for [StartupLatencyLogger]. */
13 @SmallTest
14 @RunWith(AndroidJUnit4::class)
15 class StartupLatencyLoggerTest {
16 
17     private val underTest: StartupLatencyLogger =
18         StartupLatencyLogger(StatsLogManager.StatsLatencyLogger.LatencyType.COLD)
19 
20     @Before
setupnull21     fun setup() {
22         underTest.setIsInTest()
23     }
24 
25     @Test
26     @UiThreadTest
logTotalDurationStartnull27     fun logTotalDurationStart() {
28         underTest.logStart(
29             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
30             100
31         )
32 
33         val startTime =
34             underTest.startTimeByEvent.get(
35                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
36             )
37         assertThat(startTime).isEqualTo(100)
38         assertThat(underTest.endTimeByEvent.isEmpty()).isTrue()
39     }
40 
41     @Test
42     @UiThreadTest
logTotalDurationEndnull43     fun logTotalDurationEnd() {
44         underTest.logStart(
45             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
46             100
47         )
48 
49         underTest.logEnd(
50             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
51             100
52         )
53 
54         val endTime =
55             underTest.endTimeByEvent.get(
56                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
57             )
58         assertThat(endTime).isEqualTo(100)
59     }
60 
61     @Test
62     @UiThreadTest
logStartOfOtherEvents_withoutLogStartOfTotalDuration_noOpnull63     fun logStartOfOtherEvents_withoutLogStartOfTotalDuration_noOp() {
64         underTest
65             .logStart(
66                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
67                 100
68             )
69             .logStart(
70                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
71                 101
72             )
73             .logStart(
74                 StatsLogManager.LauncherLatencyEvent
75                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
76                 102
77             )
78 
79         assertThat(underTest.startTimeByEvent.isEmpty()).isTrue()
80     }
81 
82     @Test
83     @UiThreadTest
logStartOfOtherEvents_afterLogStartOfTotalDuration_loggednull84     fun logStartOfOtherEvents_afterLogStartOfTotalDuration_logged() {
85         underTest.logStart(
86             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
87             100
88         )
89 
90         underTest
91             .logStart(
92                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
93                 100
94             )
95             .logStart(
96                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
97                 101
98             )
99             .logStart(
100                 StatsLogManager.LauncherLatencyEvent
101                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
102                 102
103             )
104 
105         assertThat(underTest.startTimeByEvent.size()).isEqualTo(4)
106     }
107 
108     @Test
109     @UiThreadTest
logDuplicatedStartEvent_2ndEvent_notLoggednull110     fun logDuplicatedStartEvent_2ndEvent_notLogged() {
111         underTest.logStart(
112             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
113             100
114         )
115 
116         underTest.logStart(
117             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
118             101
119         )
120 
121         assertThat(underTest.startTimeByEvent.size()).isEqualTo(1)
122         assertThat(
123                 underTest.startTimeByEvent.get(
124                     StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
125                 )
126             )
127             .isEqualTo(100)
128     }
129 
130     @Test
131     @UiThreadTest
loadStartOfWorkspace_thenEndWithAsync_logAsyncStartnull132     fun loadStartOfWorkspace_thenEndWithAsync_logAsyncStart() {
133         underTest
134             .logStart(
135                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
136                 100
137             )
138             .logWorkspaceLoadStartTime(111)
139 
140         underTest.logEnd(
141             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
142             120
143         )
144 
145         assertThat(underTest.startTimeByEvent.size()).isEqualTo(2)
146         assertThat(
147                 underTest.startTimeByEvent.get(
148                     StatsLogManager.LauncherLatencyEvent
149                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
150                         .id
151                 )
152             )
153             .isEqualTo(111)
154     }
155 
156     @Test
157     @UiThreadTest
loadStartOfWorkspace_thenEndWithSync_logSyncStartnull158     fun loadStartOfWorkspace_thenEndWithSync_logSyncStart() {
159         underTest
160             .logStart(
161                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
162                 100
163             )
164             .logWorkspaceLoadStartTime(111)
165 
166         underTest.logEnd(
167             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC,
168             120
169         )
170 
171         assertThat(underTest.startTimeByEvent.size()).isEqualTo(2)
172         assertThat(
173                 underTest.startTimeByEvent.get(
174                     StatsLogManager.LauncherLatencyEvent
175                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC
176                         .id
177                 )
178             )
179             .isEqualTo(111)
180     }
181 
182     @Test
183     @UiThreadTest
loadStartOfWorkspaceLoadSync_thenAsync_asyncNotLoggednull184     fun loadStartOfWorkspaceLoadSync_thenAsync_asyncNotLogged() {
185         underTest
186             .logStart(
187                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
188                 100
189             )
190             .logStart(
191                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC,
192                 110
193             )
194 
195         underTest.logStart(
196             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
197             111
198         )
199 
200         assertThat(underTest.startTimeByEvent.size()).isEqualTo(2)
201         assertThat(
202                 underTest.startTimeByEvent.get(
203                     StatsLogManager.LauncherLatencyEvent
204                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC
205                         .id
206                 )
207             )
208             .isEqualTo(110)
209         assertThat(
210                 underTest.startTimeByEvent.get(
211                     StatsLogManager.LauncherLatencyEvent
212                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
213                         .id
214                 )
215             )
216             .isEqualTo(0)
217     }
218 
219     @Test
220     @UiThreadTest
loadStartOfWorkspaceLoadAsync_thenSync_syncNotLoggednull221     fun loadStartOfWorkspaceLoadAsync_thenSync_syncNotLogged() {
222         underTest.logStart(
223             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
224             100
225         )
226         underTest.logStart(
227             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
228             111
229         )
230 
231         underTest.logStart(
232             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC,
233             112
234         )
235 
236         assertThat(underTest.startTimeByEvent.size()).isEqualTo(2)
237         assertThat(
238                 underTest.startTimeByEvent.get(
239                     StatsLogManager.LauncherLatencyEvent
240                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
241                         .id
242                 )
243             )
244             .isEqualTo(111)
245         assertThat(
246                 underTest.startTimeByEvent.get(
247                     StatsLogManager.LauncherLatencyEvent
248                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC
249                         .id
250                 )
251             )
252             .isEqualTo(0)
253     }
254 
255     @Test
256     @UiThreadTest
logEndOfEvent_withoutStartEvent_notLoggednull257     fun logEndOfEvent_withoutStartEvent_notLogged() {
258         underTest.logStart(
259             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
260             100
261         )
262 
263         underTest.logEnd(
264             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC,
265             120
266         )
267 
268         assertThat(underTest.endTimeByEvent.size()).isEqualTo(0)
269         assertThat(
270                 underTest.endTimeByEvent.get(
271                     StatsLogManager.LauncherLatencyEvent
272                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC
273                         .id
274                 )
275             )
276             .isEqualTo(0)
277     }
278 
279     @Test
280     @UiThreadTest
logEndOfEvent_afterEndOfTotalDuration_notLoggednull281     fun logEndOfEvent_afterEndOfTotalDuration_notLogged() {
282         underTest
283             .logStart(
284                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
285                 100
286             )
287             .logEnd(
288                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
289                 120
290             )
291 
292         underTest.logEnd(
293             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC,
294             121
295         )
296 
297         assertThat(underTest.endTimeByEvent.size()).isEqualTo(1)
298         assertThat(
299                 underTest.endTimeByEvent.get(
300                     StatsLogManager.LauncherLatencyEvent
301                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC
302                         .id
303                 )
304             )
305             .isEqualTo(0)
306     }
307 
308     @Test
309     @UiThreadTest
logCardinality_setCardinalitynull310     fun logCardinality_setCardinality() {
311         underTest.logCardinality(-1)
312         underTest.logStart(
313             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
314             100
315         )
316 
317         underTest.logCardinality(235)
318 
319         assertThat(underTest.cardinality).isEqualTo(235)
320     }
321 
322     @Test
323     @UiThreadTest
reset_clearStatenull324     fun reset_clearState() {
325         underTest
326             .logStart(
327                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
328                 100
329             )
330             .logStart(
331                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
332                 100
333             )
334             .logStart(
335                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
336                 110
337             )
338             .logEnd(
339                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
340                 115
341             )
342             .logWorkspaceLoadStartTime(120)
343             .logCardinality(235)
344             .logEnd(
345                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
346                 100
347             )
348             .logEnd(
349                 StatsLogManager.LauncherLatencyEvent
350                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
351                 140
352             )
353             .logEnd(
354                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
355                 160
356             )
357         assertThat(underTest.startTimeByEvent.size()).isEqualTo(4)
358         assertThat(underTest.endTimeByEvent.size()).isEqualTo(4)
359         assertThat(underTest.cardinality).isEqualTo(235)
360 
361         underTest.reset()
362 
363         assertThat(underTest.startTimeByEvent.isEmpty()).isTrue()
364         assertThat(underTest.endTimeByEvent.isEmpty()).isTrue()
365         assertThat(underTest.cardinality).isEqualTo(StartupLatencyLogger.UNSET_INT)
366         assertThat(underTest.workspaceLoadStartTime).isEqualTo(StartupLatencyLogger.UNSET_LONG)
367     }
368 }
369