@@ -75,8 +75,6 @@ public class AppStartTrace implements ActivityLifecycleCallbacks, LifecycleObser
7575 private static final @ NonNull Timer PERF_CLASS_LOAD_TIME = new Clock ().getTime ();
7676 private static final long MAX_LATENCY_BEFORE_UI_INIT = TimeUnit .MINUTES .toMicros (1 );
7777
78- private static final long MAX_BACKGROUND_RUNNABLE_DELAY = TimeUnit .MILLISECONDS .toMicros (100 );
79-
8078 // Core pool size 0 allows threads to shut down if they're idle
8179 private static final int CORE_POOL_SIZE = 0 ;
8280 private static final int MAX_POOL_SIZE = 1 ; // Only need single thread
@@ -113,8 +111,6 @@ public class AppStartTrace implements ActivityLifecycleCallbacks, LifecycleObser
113111 private final @ Nullable Timer processStartTime ;
114112 private final @ Nullable Timer firebaseClassLoadTime ;
115113 private Timer onCreateTime = null ;
116-
117- private Timer mainThreadRunnableTime = null ;
118114 private Timer onStartTime = null ;
119115 private Timer onResumeTime = null ;
120116 private Timer firstForegroundTime = null ;
@@ -323,26 +319,8 @@ private void recordOnDrawFrontOfQueue() {
323319 logExperimentTrace (this .experimentTtid );
324320 }
325321
326- private void resolveIsStartedFromBackground () {
327- // If the mainThreadRunnableTime is null, either the runnable hasn't run, or this check has
328- // already been made.
329- if (mainThreadRunnableTime == null ) {
330- return ;
331- }
332-
333- // Set it to true if the runnable ran more than 100ms prior to onActivityCreated()
334- if (mainThreadRunnableTime .getDurationMicros () > MAX_BACKGROUND_RUNNABLE_DELAY ) {
335- isStartedFromBackground = true ;
336- }
337-
338- // Set this to null to prevent additional checks if `onActivityCreated()` is called again.
339- mainThreadRunnableTime = null ;
340- }
341-
342322 @ Override
343323 public synchronized void onActivityCreated (Activity activity , Bundle savedInstanceState ) {
344- resolveIsStartedFromBackground ();
345-
346324 if (isStartedFromBackground || onCreateTime != null // An activity already called onCreate()
347325 ) {
348326 return ;
@@ -582,7 +560,8 @@ public static boolean isScreenOn(Context appContext) {
582560 * We use StartFromBackgroundRunnable to detect if app is started from background or foreground.
583561 * If app is started from background, we do not generate AppStart trace. This runnable is posted
584562 * to main UI thread from FirebasePerfEarly. If app is started from background, this runnable will
585- * be executed earlier than 100ms of any activity's onCreate() method.
563+ * be executed before any activity's onCreate() method. If app is started from foreground,
564+ * activity's onCreate() method is executed before this runnable.
586565 */
587566 public static class StartFromBackgroundRunnable implements Runnable {
588567 private final AppStartTrace trace ;
@@ -593,7 +572,10 @@ public StartFromBackgroundRunnable(final AppStartTrace trace) {
593572
594573 @ Override
595574 public void run () {
596- trace .mainThreadRunnableTime = new Timer ();
575+ // if no activity has ever been created.
576+ if (trace .onCreateTime == null ) {
577+ trace .isStartedFromBackground = true ;
578+ }
597579 }
598580 }
599581
@@ -632,7 +614,7 @@ Timer getOnResumeTime() {
632614 }
633615
634616 @ VisibleForTesting
635- void setMainThreadRunnableTime ( Timer timer ) {
636- mainThreadRunnableTime = timer ;
617+ void setIsStartFromBackground ( ) {
618+ isStartedFromBackground = true ;
637619 }
638620}
0 commit comments