From 57f0ec207c59a3bf991dde7d947258714446ad68 Mon Sep 17 00:00:00 2001 From: Matthew Robertson Date: Thu, 14 Aug 2025 11:18:21 -0400 Subject: [PATCH] Force AQS to init before PerfEarly --- .../com/google/firebase/perf/FirebasePerfEarly.java | 10 +++++++++- .../google/firebase/perf/FirebasePerfRegistrar.java | 8 ++++++-- .../firebase/perf/FirebasePerfRegistrarTest.java | 4 +++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfEarly.java b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfEarly.java index 01a081ca9b7..9d0c0f6487c 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfEarly.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfEarly.java @@ -18,10 +18,12 @@ import androidx.annotation.Nullable; import com.google.firebase.FirebaseApp; import com.google.firebase.StartupTime; +import com.google.firebase.inject.Provider; import com.google.firebase.perf.application.AppStateMonitor; import com.google.firebase.perf.config.ConfigResolver; import com.google.firebase.perf.metrics.AppStartTrace; import com.google.firebase.perf.session.FirebasePerformanceSessionSubscriber; +import com.google.firebase.sessions.FirebaseSessions; import com.google.firebase.sessions.api.FirebaseSessionsDependencies; import java.util.concurrent.Executor; @@ -35,13 +37,19 @@ public class FirebasePerfEarly { public FirebasePerfEarly( - FirebaseApp app, @Nullable StartupTime startupTime, Executor uiExecutor) { + FirebaseApp app, + @Nullable StartupTime startupTime, + Executor uiExecutor, + Provider firebaseSessions) { Context context = app.getApplicationContext(); // Initialize ConfigResolver early for accessing device caching layer. ConfigResolver configResolver = ConfigResolver.getInstance(); configResolver.setApplicationContext(context); + // Ensure FirebaseSessions was initialized + firebaseSessions.get(); + // Register FirebasePerformance as a subscriber ASAP - which will start collecting gauges if the // FirebaseSession is verbose. FirebaseSessionsDependencies.register(new FirebasePerformanceSessionSubscriber(configResolver)); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfRegistrar.java b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfRegistrar.java index daffc2de81a..c277f725c1d 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfRegistrar.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerfRegistrar.java @@ -30,6 +30,7 @@ import com.google.firebase.perf.injection.modules.FirebasePerformanceModule; import com.google.firebase.platforminfo.LibraryVersionComponent; import com.google.firebase.remoteconfig.RemoteConfigComponent; +import com.google.firebase.sessions.FirebaseSessions; import com.google.firebase.sessions.api.FirebaseSessionsDependencies; import com.google.firebase.sessions.api.SessionSubscriber; import java.util.Arrays; @@ -46,6 +47,7 @@ */ @Keep public class FirebasePerfRegistrar implements ComponentRegistrar { + private static final String LIBRARY_NAME = "fire-perf"; private static final String EARLY_LIBRARY_NAME = "fire-perf-early"; @@ -73,15 +75,17 @@ public List> getComponents() { .add(Dependency.required(FirebaseApp.class)) .add(Dependency.optionalProvider(StartupTime.class)) .add(Dependency.required(uiExecutor)) + .add(Dependency.optionalProvider(FirebaseSessions.class)) .eagerInDefaultApp() .factory( container -> new FirebasePerfEarly( container.get(FirebaseApp.class), container.getProvider(StartupTime.class).get(), - container.get(uiExecutor))) + container.get(uiExecutor), + container.getProvider(FirebaseSessions.class))) .build(), - /** + /* * Fireperf SDK is lazily by {@link FirebasePerformanceInitializer} during {@link * com.google.firebase.perf.application.AppStateMonitor#onActivityResumed(Activity)}. we use * "lazy" dependency for some components that are not required during initialization so as diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerfRegistrarTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerfRegistrarTest.java index 7df39fe6a1e..b66e064ead0 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerfRegistrarTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerfRegistrarTest.java @@ -25,6 +25,7 @@ import com.google.firebase.components.Qualified; import com.google.firebase.installations.FirebaseInstallationsApi; import com.google.firebase.remoteconfig.RemoteConfigComponent; +import com.google.firebase.sessions.FirebaseSessions; import java.util.List; import java.util.concurrent.Executor; import org.junit.Test; @@ -59,7 +60,8 @@ public void testGetComponents() { .containsExactly( Dependency.required(Qualified.qualified(UiThread.class, Executor.class)), Dependency.required(FirebaseApp.class), - Dependency.optionalProvider(StartupTime.class)); + Dependency.optionalProvider(StartupTime.class), + Dependency.optionalProvider(FirebaseSessions.class)); assertThat(firebasePerfEarlyComponent.isLazy()).isFalse(); }