Skip to content

Commit 5e50f5e

Browse files
committed
Add unit test
1 parent ad64ce9 commit 5e50f5e

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfEarly.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public FirebasePerfEarly(
4848
if (startupTime != null) {
4949
AppStartTrace appStartTrace = AppStartTrace.getInstance();
5050
appStartTrace.registerActivityLifecycleCallbacks(context);
51-
// TODO(b/339891952): Investigate why this runs *before* the activity lifecycle callbacks.
5251
uiExecutor.execute(new AppStartTrace.StartFromBackgroundRunnable(appStartTrace));
5352
}
5453

firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,4 +638,9 @@ Timer getOnResumeTime() {
638638
void setIsStartFromBackground() {
639639
isStartedFromBackground = true;
640640
}
641+
642+
@VisibleForTesting
643+
void setMainThreadRunnableTime(Timer timer) {
644+
mainThreadRunnableTime = timer;
645+
}
641646
}

firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.mockito.ArgumentMatchers.isA;
1919
import static org.mockito.Mockito.doAnswer;
2020
import static org.mockito.Mockito.mock;
21+
import static org.mockito.Mockito.spy;
2122
import static org.mockito.Mockito.times;
2223
import static org.mockito.Mockito.verify;
2324
import static org.mockito.Mockito.when;
@@ -258,6 +259,34 @@ public void testStartFromBackground() {
258259
ArgumentMatchers.nullable(ApplicationProcessState.class));
259260
}
260261

262+
@Test
263+
public void testStartFromBackground_invertedOrder() {
264+
FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService();
265+
Timer fakeTimer = spy(new Timer(currentTime));
266+
AppStartTrace trace =
267+
new AppStartTrace(transportManager, clock, configResolver, fakeExecutorService);
268+
trace.registerActivityLifecycleCallbacks(appContext);
269+
trace.setIsStartFromBackground();
270+
trace.setMainThreadRunnableTime(fakeTimer);
271+
272+
when(fakeTimer.getDurationMicros()).thenReturn(99L);
273+
trace.onActivityCreated(activity1, bundle);
274+
Assert.assertNotNull(trace.getOnCreateTime());
275+
++currentTime;
276+
trace.onActivityStarted(activity1);
277+
Assert.assertNotNull(trace.getOnStartTime());
278+
++currentTime;
279+
trace.onActivityResumed(activity1);
280+
Assert.assertNotNull(trace.getOnResumeTime());
281+
// There should be a trace sent since the delay between the main thread and onActivityCreated
282+
// is limited.
283+
fakeExecutorService.runAll();
284+
verify(transportManager, times(1))
285+
.log(
286+
traceArgumentCaptor.capture(),
287+
ArgumentMatchers.nullable(ApplicationProcessState.class));
288+
}
289+
261290
@Test
262291
@Config(sdk = 26)
263292
public void timeToInitialDisplay_isLogged() {

0 commit comments

Comments
 (0)