• 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.filters.SmallTest
6 import com.android.launcher3.util.LauncherMultivalentJUnit
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 [ColdRebootStartupLatencyLogger]. */
13 @SmallTest
14 @RunWith(LauncherMultivalentJUnit::class)
15 class StartupLatencyLoggerTest {
16 
17     private val underTest = ColdRebootStartupLatencyLogger()
18 
19     @Before
setupnull20     fun setup() {
21         underTest.setIsInTest()
22     }
23 
24     @Test
25     @UiThreadTest
logTotalDurationStartnull26     fun logTotalDurationStart() {
27         underTest.logStart(
28             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
29             100
30         )
31 
32         val startTime =
33             underTest.startTimeByEvent.get(
34                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
35             )
36         assertThat(startTime).isEqualTo(100)
37         assertThat(underTest.endTimeByEvent.isEmpty()).isTrue()
38     }
39 
40     @Test
41     @UiThreadTest
logTotalDurationEndnull42     fun logTotalDurationEnd() {
43         underTest.logStart(
44             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
45             100
46         )
47 
48         underTest.logEnd(
49             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
50             100
51         )
52 
53         val endTime =
54             underTest.endTimeByEvent.get(
55                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
56             )
57         assertThat(endTime).isEqualTo(100)
58     }
59 
60     @Test
61     @UiThreadTest
logStartOfOtherEvents_withoutLogStartOfTotalDuration_noOpnull62     fun logStartOfOtherEvents_withoutLogStartOfTotalDuration_noOp() {
63         underTest
64             .logStart(
65                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
66                 100
67             )
68             .logStart(
69                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
70                 101
71             )
72             .logStart(
73                 StatsLogManager.LauncherLatencyEvent
74                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
75                 102
76             )
77 
78         assertThat(underTest.startTimeByEvent.isEmpty()).isTrue()
79     }
80 
81     @Test
82     @UiThreadTest
logStartOfOtherEvents_afterLogStartOfTotalDuration_loggednull83     fun logStartOfOtherEvents_afterLogStartOfTotalDuration_logged() {
84         underTest.logStart(
85             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
86             100
87         )
88 
89         underTest
90             .logStart(
91                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
92                 100
93             )
94             .logStart(
95                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
96                 101
97             )
98             .logStart(
99                 StatsLogManager.LauncherLatencyEvent
100                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
101                 102
102             )
103 
104         assertThat(underTest.startTimeByEvent.size()).isEqualTo(4)
105     }
106 
107     @Test
108     @UiThreadTest
logDuplicatedStartEvent_2ndEvent_notLoggednull109     fun logDuplicatedStartEvent_2ndEvent_notLogged() {
110         underTest.logStart(
111             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
112             100
113         )
114 
115         underTest.logStart(
116             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
117             101
118         )
119 
120         assertThat(underTest.startTimeByEvent.size()).isEqualTo(1)
121         assertThat(
122                 underTest.startTimeByEvent.get(
123                     StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION.id
124                 )
125             )
126             .isEqualTo(100)
127     }
128 
129     @Test
130     @UiThreadTest
loadStartOfWorkspace_thenEndWithAsync_logAsyncStartnull131     fun loadStartOfWorkspace_thenEndWithAsync_logAsyncStart() {
132         underTest
133             .logStart(
134                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
135                 100
136             )
137             .logWorkspaceLoadStartTime(111)
138 
139         underTest.logEnd(
140             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
141             120
142         )
143 
144         assertThat(underTest.startTimeByEvent.size()).isEqualTo(2)
145         assertThat(
146                 underTest.startTimeByEvent.get(
147                     StatsLogManager.LauncherLatencyEvent
148                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
149                         .id
150                 )
151             )
152             .isEqualTo(111)
153     }
154 
155     @Test
156     @UiThreadTest
logEndOfEvent_withoutStartEvent_notLoggednull157     fun logEndOfEvent_withoutStartEvent_notLogged() {
158         underTest.logStart(
159             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
160             100
161         )
162 
163         underTest.logEnd(
164             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
165             120
166         )
167 
168         assertThat(underTest.endTimeByEvent.size()).isEqualTo(0)
169         assertThat(
170                 underTest.endTimeByEvent.get(
171                     StatsLogManager.LauncherLatencyEvent
172                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
173                         .id
174                 )
175             )
176             .isEqualTo(0)
177     }
178 
179     @Test
180     @UiThreadTest
logEndOfEvent_afterEndOfTotalDuration_notLoggednull181     fun logEndOfEvent_afterEndOfTotalDuration_notLogged() {
182         underTest
183             .logStart(
184                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
185                 100
186             )
187             .logEnd(
188                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
189                 120
190             )
191 
192         underTest.logEnd(
193             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
194             121
195         )
196 
197         assertThat(underTest.endTimeByEvent.size()).isEqualTo(1)
198         assertThat(
199                 underTest.endTimeByEvent.get(
200                     StatsLogManager.LauncherLatencyEvent
201                         .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC
202                         .id
203                 )
204             )
205             .isEqualTo(0)
206     }
207 
208     @Test
209     @UiThreadTest
logCardinality_setCardinalitynull210     fun logCardinality_setCardinality() {
211         underTest.logCardinality(-1)
212         underTest.logStart(
213             StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
214             100
215         )
216 
217         underTest.logCardinality(235)
218 
219         assertThat(underTest.cardinality).isEqualTo(235)
220     }
221 
222     @Test
223     @UiThreadTest
reset_clearStatenull224     fun reset_clearState() {
225         underTest
226             .logStart(
227                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
228                 100
229             )
230             .logStart(
231                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
232                 100
233             )
234             .logStart(
235                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
236                 110
237             )
238             .logEnd(
239                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_VIEW_INFLATION,
240                 115
241             )
242             .logWorkspaceLoadStartTime(120)
243             .logCardinality(235)
244             .logEnd(
245                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_ACTIVITY_ON_CREATE,
246                 100
247             )
248             .logEnd(
249                 StatsLogManager.LauncherLatencyEvent
250                     .LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC,
251                 140
252             )
253             .logEnd(
254                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
255                 160
256             )
257         assertThat(underTest.startTimeByEvent.size()).isEqualTo(4)
258         assertThat(underTest.endTimeByEvent.size()).isEqualTo(4)
259         assertThat(underTest.cardinality).isEqualTo(235)
260         assertThat(underTest.isTornDown).isFalse()
261 
262         underTest.reset()
263 
264         assertThat(underTest.startTimeByEvent.isEmpty()).isTrue()
265         assertThat(underTest.endTimeByEvent.isEmpty()).isTrue()
266         assertThat(underTest.cardinality).isEqualTo(ColdRebootStartupLatencyLogger.UNSET_INT)
267         assertThat(underTest.workspaceLoadStartTime)
268             .isEqualTo(ColdRebootStartupLatencyLogger.UNSET_LONG)
269         assertThat(underTest.isTornDown).isTrue()
270     }
271 
272     @Test
273     @UiThreadTest
tornDown_rejectLogsnull274     fun tornDown_rejectLogs() {
275         underTest.reset()
276 
277         underTest
278             .logStart(
279                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
280                 100
281             )
282             .logEnd(
283                 StatsLogManager.LauncherLatencyEvent.LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION,
284                 200
285             )
286             .logCardinality(123)
287         assertThat(underTest.startTimeByEvent.isEmpty()).isTrue()
288         assertThat(underTest.endTimeByEvent.isEmpty()).isTrue()
289         assertThat(underTest.cardinality).isEqualTo(ColdRebootStartupLatencyLogger.UNSET_INT)
290     }
291 }
292