From 41775c1f0f6a61a7686711518c96c97d04679fed Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 4 Mar 2026 11:49:05 -0600 Subject: [PATCH 1/7] RemoteConfigManager refactor --- .../com/google/firebase/perf/config/ConfigResolver.java | 6 +++++- .../google/firebase/perf/config/RemoteConfigManager.java | 8 +------- .../perf/injection/modules/FirebasePerformanceModule.java | 2 +- .../com/google/firebase/perf/FirebasePerformanceTest.java | 2 +- .../firebase/perf/config/RemoteConfigManagerTest.java | 4 ++-- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java index 5ac3ecfc282..de4cfcaed58 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java @@ -75,7 +75,7 @@ public ConfigResolver( @Nullable ImmutableBundle metadataBundle, @Nullable DeviceCacheManager deviceCacheManager) { this.remoteConfigManager = - remoteConfigManager == null ? RemoteConfigManager.getInstance() : remoteConfigManager; + remoteConfigManager == null ? new RemoteConfigManager() : remoteConfigManager; this.metadataBundle = metadataBundle == null ? new ImmutableBundle() : metadataBundle; this.deviceCacheManager = deviceCacheManager == null ? DeviceCacheManager.getInstance() : deviceCacheManager; @@ -916,4 +916,8 @@ private boolean isGaugeCaptureFrequencyMsValid(long frequencyMilliseconds) { private boolean isSessionsMaxDurationMinutesValid(long maxDurationMin) { return maxDurationMin > 0; } + + public RemoteConfigManager getRemoteConfigManager() { + return remoteConfigManager; + } } diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java index 66b8ff8f804..db9738f905b 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java @@ -47,7 +47,6 @@ public class RemoteConfigManager { private static final AndroidLogger logger = AndroidLogger.getInstance(); - private static final RemoteConfigManager instance = new RemoteConfigManager(); private static final String FIREPERF_FRC_NAMESPACE_NAME = "fireperf"; private static final long TIME_AFTER_WHICH_A_FETCH_IS_CONSIDERED_STALE_MS = TimeUnit.HOURS.toMillis(12); @@ -67,7 +66,7 @@ public class RemoteConfigManager { // TODO(b/258263016): Migrate to go/firebase-android-executors @SuppressLint("ThreadPoolCreation") - private RemoteConfigManager() { + public RemoteConfigManager() { this( DeviceCacheManager.getInstance(), new ThreadPoolExecutor( @@ -96,11 +95,6 @@ private RemoteConfigManager() { this.remoteConfigFetchDelayInMs = remoteConfigFetchDelayInMs; } - /** Gets the singleton instance. */ - public static RemoteConfigManager getInstance() { - return instance; - } - /** * Sets the {@link Provider} for {@link RemoteConfigComponent} from which we can extract the * {@link FirebaseRemoteConfig} instance whenever it gets available. diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java b/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java index 0bcda21c26c..1f39aa9a243 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java @@ -71,7 +71,7 @@ Provider providesTransportFactoryProvider() { @Provides RemoteConfigManager providesRemoteConfigManager() { - return RemoteConfigManager.getInstance(); + return ConfigResolver.getInstance().getRemoteConfigManager(); } @Provides diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java index cd41c5a3adf..899012ff992 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java @@ -100,9 +100,9 @@ public void setUp() throws NameNotFoundException { sharedPreferences.edit().clear().commit(); DeviceCacheManager.clearInstance(); - spyRemoteConfigManager = spy(RemoteConfigManager.getInstance()); ConfigResolver.clearInstance(); spyConfigResolver = spy(ConfigResolver.getInstance()); + spyRemoteConfigManager = spy(ConfigResolver.getInstance().getRemoteConfigManager()); spySessionManager = spy(SessionManager.getInstance()); fakeDirectExecutorService = new FakeDirectExecutorService(); diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java index 3e1a9623adc..6f413b69c5a 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java @@ -76,8 +76,8 @@ public void setUp() { @Test public void getInstance_verifiesSingleton() { - RemoteConfigManager instanceOne = RemoteConfigManager.getInstance(); - RemoteConfigManager instanceTwo = RemoteConfigManager.getInstance(); + RemoteConfigManager instanceOne = ConfigResolver.getInstance().getRemoteConfigManager(); + RemoteConfigManager instanceTwo = ConfigResolver.getInstance().getRemoteConfigManager(); assertThat(instanceOne).isSameInstanceAs(instanceTwo); } From 63f7df99a0f6b389ac4be7874f7579dd87dea988 Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 18 Mar 2026 16:45:26 -0600 Subject: [PATCH 2/7] Remove SessionManager static singleton; construct in Dagger factory Delete the private no-arg constructor and static getInstance() method. The Dagger component factory in FirebasePerfRegistrar now constructs a fresh SessionManager(GaugeManager, PerfSession) instead of delegating to the singleton accessor. Add null-guards for gaugeManager in setApplicationContext, stopGaugeCollectionIfSessionRunningTooLong, logGaugeMetadataIfCollectionEnabled, and startOrStopCollectingGauges to support test-only SessionManager instances that are constructed with a null GaugeManager. Remove the testInstanceCreation unit test whose invariant is now maintained by the DI container rather than the class itself. --- .../firebase/perf/FirebasePerfRegistrar.java | 4 ++- .../firebase/perf/session/SessionManager.java | 25 ++++++------------- .../perf/session/SessionManagerTest.java | 7 ------ 3 files changed, 11 insertions(+), 25 deletions(-) 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 7473f9e03de..abf4eb99a3d 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 @@ -88,7 +88,9 @@ public List> getComponents() { container.get(SessionManager.class))) .build(), Component.builder(SessionManager.class) - .factory(container -> SessionManager.getInstance()) + .factory( + container -> + new SessionManager(GaugeManager.getInstance(), PerfSession.createWithId(null))) .build(), /** * Fireperf SDK is lazily by {@link FirebasePerformanceInitializer} during {@link diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/session/SessionManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/session/SessionManager.java index 873965d7aaa..a7b3f62ac11 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/session/SessionManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/session/SessionManager.java @@ -14,7 +14,6 @@ package com.google.firebase.perf.session; -import android.annotation.SuppressLint; import android.content.Context; import androidx.annotation.Keep; import androidx.annotation.VisibleForTesting; @@ -30,30 +29,17 @@ /** Session manager to generate sessionIDs and broadcast to the application. */ @Keep // Needed because of b/117526359. public class SessionManager { - @SuppressLint("StaticFieldLeak") - private static final SessionManager instance = new SessionManager(); private final GaugeManager gaugeManager; private final Set> clients = new HashSet<>(); private PerfSession perfSession; - /** Returns the singleton instance of SessionManager. */ - public static SessionManager getInstance() { - return instance; - } - /** Returns the currently active PerfSession. */ public final PerfSession perfSession() { return perfSession; } - private SessionManager() { - // Creates a legacy session by default. This is a safety net to allow initializing - // SessionManager - but the current implementation replaces it immediately. - this(GaugeManager.getInstance(), PerfSession.createWithId(null)); - } - @VisibleForTesting public SessionManager(GaugeManager gaugeManager, PerfSession perfSession) { this.gaugeManager = gaugeManager; @@ -65,7 +51,9 @@ public SessionManager(GaugeManager gaugeManager, PerfSession perfSession) { * (currently that is before onResume finishes) to ensure gauge collection starts on time. */ public void setApplicationContext(final Context appContext) { - gaugeManager.initializeGaugeMetadataManager(appContext); + if (gaugeManager != null) { + gaugeManager.initializeGaugeMetadataManager(appContext); + } } /** @@ -74,7 +62,7 @@ public void setApplicationContext(final Context appContext) { * @see PerfSession#isSessionRunningTooLong() */ public void stopGaugeCollectionIfSessionRunningTooLong() { - if (perfSession.isSessionRunningTooLong()) { + if (perfSession.isSessionRunningTooLong() && gaugeManager != null) { gaugeManager.stopCollectingGauges(); } } @@ -151,12 +139,15 @@ public void unregisterForSessionUpdates(WeakReference client } private void logGaugeMetadataIfCollectionEnabled() { - if (perfSession.isVerbose()) { + if (perfSession.isVerbose() && gaugeManager != null) { gaugeManager.logGaugeMetadata(perfSession.sessionId()); } } private void startOrStopCollectingGauges() { + if (gaugeManager == null) { + return; + } if (perfSession.isVerbose()) { gaugeManager.startCollectingGauges(perfSession); } else { diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/session/SessionManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/session/SessionManagerTest.java index ab8cce7aab5..137fc275ae8 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/session/SessionManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/session/SessionManagerTest.java @@ -61,13 +61,6 @@ public void setUp() { initMocks(this); when(mockPerfSession.sessionId()).thenReturn(testSessionId(5)); when(mockAppStateMonitor.isColdStart()).thenReturn(false); - AppStateMonitor.getInstance().setIsColdStart(false); - } - - @Test - public void testInstanceCreation() { - assertThat(SessionManager.getInstance()).isNotNull(); - assertThat(SessionManager.getInstance()).isEqualTo(SessionManager.getInstance()); } @Test From f6d0cac55813264feb921a5e364e286322f7bc20 Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 18 Mar 2026 16:45:36 -0600 Subject: [PATCH 3/7] Require SessionManager in AppStateMonitor.getInstance(), mirror AppStartTrace pattern Add getInstance(SessionManager) seeded-init overload so FirebasePerfEarly can inject the DI-managed SessionManager at startup. The no-arg getInstance() remains as a safe "get-after-init" fallback (creates its own SessionManager if called before early init, e.g. in tests or AppStateUpdateHandler). Add getSessionManager() accessor and resetInstance() @VisibleForTesting helper to support test isolation. Update FirebasePerfEarly to call getInstance(sessionManager) instead of the no-arg version. --- .../firebase/perf/FirebasePerfEarly.java | 2 +- .../perf/application/AppStateMonitor.java | 36 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 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 14f27aa0233..8729363f6be 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 @@ -47,7 +47,7 @@ public FirebasePerfEarly( // FirebaseSession is verbose. FirebaseSessionsDependencies.register(new FirebasePerformanceSessionSubscriber(configResolver, sessionManager)); - AppStateMonitor appStateMonitor = AppStateMonitor.getInstance(); + AppStateMonitor appStateMonitor = AppStateMonitor.getInstance(sessionManager); appStateMonitor.registerActivityLifecycleCallbacks(context); appStateMonitor.registerForAppColdStart(new FirebasePerformanceInitializer()); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java b/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java index d44db9d83a7..98fbbc60861 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java @@ -26,7 +26,9 @@ import com.google.firebase.perf.logging.AndroidLogger; import com.google.firebase.perf.metrics.FrameMetricsCalculator.PerfFrameMetrics; import com.google.firebase.perf.metrics.Trace; +import com.google.firebase.perf.session.PerfSession; import com.google.firebase.perf.session.SessionManager; +import com.google.firebase.perf.session.gauges.GaugeManager; import com.google.firebase.perf.transport.TransportManager; import com.google.firebase.perf.util.Clock; import com.google.firebase.perf.util.Constants; @@ -81,11 +83,34 @@ public class AppStateMonitor implements ActivityLifecycleCallbacks { private boolean isRegisteredForLifecycleCallbacks = false; private boolean isColdStart = true; + public static AppStateMonitor getInstance(SessionManager sessionManager) { + if (instance == null) { + synchronized (AppStateMonitor.class) { + if (instance == null) { + instance = new AppStateMonitor(TransportManager.getInstance(), new Clock(), sessionManager); + } + } + } + return instance; + } + + /** + * Returns the singleton instance, creating it with a default {@link SessionManager} if not + * already initialized. In production, {@link #getInstance(SessionManager)} is always called + * first by {@link com.google.firebase.perf.FirebasePerfEarly}, so the pre-seeded instance is + * returned. This overload exists for call sites that run after early initialization (e.g. + * {@link com.google.firebase.perf.application.AppStateUpdateHandler}) and for test environments. + */ public static AppStateMonitor getInstance() { if (instance == null) { synchronized (AppStateMonitor.class) { if (instance == null) { - instance = new AppStateMonitor(TransportManager.getInstance(), new Clock(), SessionManager.getInstance()); + instance = + new AppStateMonitor( + TransportManager.getInstance(), + new Clock(), + new SessionManager( + GaugeManager.getInstance(), PerfSession.createWithId(null))); } } } @@ -115,6 +140,15 @@ public static AppStateMonitor getInstance() { this.screenPerformanceRecordingSupported = screenPerformanceRecordingSupported; } + public SessionManager getSessionManager() { + return sessionManager; + } + + @VisibleForTesting + public static void resetInstance() { + instance = null; + } + public synchronized void registerActivityLifecycleCallbacks(Context context) { // Make sure the callback is registered only once. if (isRegisteredForLifecycleCallbacks) { From 5dc07fa4f1cf0ee675c72afa66e3e3c84d9a21c6 Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 18 Mar 2026 16:45:46 -0600 Subject: [PATCH 4/7] Remove SessionManager.getInstance() from Trace; add getSessionManager() to TransportManager Trace's 5-arg convenience constructor now resolves SessionManager via sessionManagerFrom(appStateMonitor), which delegates to AppStateMonitor.getSessionManager() and falls back to a no-gauge instance when called in tests with a mocked AppStateMonitor. Trace's Parcel deserialization constructor now uses TransportManager.getInstance().getSessionManager() instead of SessionManager.getInstance(). This is safe because Parcel deserialization always occurs after FirebasePerfEarly has initialized the SDK. Add getSessionManager() accessor to TransportManager and thread sessionManager through initializeForTest() so test helpers can supply the correct instance. --- .../com/google/firebase/perf/metrics/Trace.java | 16 ++++++++++++++-- .../perf/transport/TransportManager.java | 9 ++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java index 0f5651da156..6b86e97d176 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java @@ -162,8 +162,20 @@ public Trace( @NonNull Clock clock, @NonNull AppStateMonitor appStateMonitor, @NonNull GaugeManager gaugeManager) { - this(name, transportManager, clock, appStateMonitor, gaugeManager, SessionManager.getInstance()); + this( + name, + transportManager, + clock, + appStateMonitor, + gaugeManager, + sessionManagerFrom(appStateMonitor)); } + + private static SessionManager sessionManagerFrom(AppStateMonitor appStateMonitor) { + SessionManager sm = appStateMonitor.getSessionManager(); + return sm != null ? sm : new SessionManager(null, PerfSession.createWithId(null)); + } + /** * Creates a Trace object with the given name. TransportManager, Clock and GaugeManager instances * are for testing. @@ -213,7 +225,7 @@ private Trace(@NonNull Parcel in, boolean isDataOnly) { clock = new Clock(); gaugeManager = GaugeManager.getInstance(); } - sessionManager = SessionManager.getInstance(); + sessionManager = TransportManager.getInstance().getSessionManager(); } /** Starts this trace. */ diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java index f40a2eaf5ad..d4abf5140b5 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java @@ -166,7 +166,8 @@ void initializeForTest( RateLimiter rateLimiter, AppStateMonitor appStateMonitor, FlgTransport flgTransport, - ExecutorService executorService) { + ExecutorService executorService, + SessionManager sessionManager) { this.firebaseApp = firebaseApp; this.projectId = firebaseApp.getOptions().getProjectId(); @@ -179,6 +180,7 @@ void initializeForTest( this.appStateMonitor = appStateMonitor; this.flgTransport = flgTransport; this.executorService = executorService; + this.sessionManager = sessionManager; // Re-init the cache, otherwise the cache might get consumed/exhausted after a few tests cacheMap.put(KEY_AVAILABLE_TRACES_FOR_CACHING, MAX_TRACE_METRICS_CACHE_SIZE); @@ -396,6 +398,11 @@ private void syncLog(PerfMetric.Builder perfMetricBuilder, ApplicationProcessSta } } + /** Returns the {@link SessionManager} associated with this transport. */ + public SessionManager getSessionManager() { + return sessionManager; + } + @WorkerThread private boolean isAllowedToCache(PerfMetricOrBuilder perfMetricOrBuilder) { final int availableTracesForCaching = cacheMap.get(KEY_AVAILABLE_TRACES_FOR_CACHING); From b9e986abe665f9dd834bd044f7c8834f42ff3e8e Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 18 Mar 2026 16:45:53 -0600 Subject: [PATCH 5/7] Eliminate SessionManager.getInstance() from NetworkRequestMetricBuilder The private single-arg constructor now obtains SessionManager via AppStateMonitor.getInstance().getSessionManager() instead of calling SessionManager.getInstance(). AppStateMonitor.getInstance() is safe here because FirebasePerfEarly (eager component) always seeds it before any network request can be intercepted by user code. --- .../firebase/perf/metrics/NetworkRequestMetricBuilder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilder.java b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilder.java index db78d61ff9c..45043d340a5 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilder.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilder.java @@ -90,7 +90,11 @@ public static NetworkRequestMetricBuilder builder(TransportManager transportMana * initialize them. */ private NetworkRequestMetricBuilder(TransportManager transportManager) { - this(transportManager, AppStateMonitor.getInstance(), GaugeManager.getInstance(), SessionManager.getInstance()); + this( + transportManager, + AppStateMonitor.getInstance(), + GaugeManager.getInstance(), + AppStateMonitor.getInstance().getSessionManager()); } /** From 2b7a782bcdc6ffe3f6dad8ad7980391df55c3a0e Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 18 Mar 2026 16:46:07 -0600 Subject: [PATCH 6/7] Update tests after SessionManager singleton removal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FirebasePerfRegistrarTest: update component count (3→4) and dependency assertions to include SessionManager - FirebasePerformanceTest: construct spy SessionManager directly instead of spying on the now-deleted getInstance() return value - AppStartTraceTest: use base-class sessionManager field in @After reset instead of SessionManager.getInstance() - TraceTest: pre-seed AppStateMonitor with the test sessionManager in setUp; use sessionManager.updatePerfSession() in session-addition test - NetworkRequestMetricBuilderTest: same AppStateMonitor pre-seed pattern; use sessionManager.updatePerfSession() in session-addition test - TransportManagerTest: replace all SessionManager.getInstance() calls with the base-class sessionManager field; initializeForTest() now accepts and sets the sessionManager parameter --- .../perf/FirebasePerfRegistrarTest.java | 10 ++-- .../perf/FirebasePerformanceTest.java | 8 ++- .../perf/metrics/AppStartTraceTest.java | 4 +- .../NetworkRequestMetricBuilderTest.java | 4 +- .../firebase/perf/metrics/TraceTest.java | 4 +- .../perf/transport/TransportManagerTest.java | 52 +++++++++---------- 6 files changed, 47 insertions(+), 35 deletions(-) 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..49d01bdca6d 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 @@ -24,6 +24,7 @@ import com.google.firebase.components.Dependency; import com.google.firebase.components.Qualified; import com.google.firebase.installations.FirebaseInstallationsApi; +import com.google.firebase.perf.session.SessionManager; import com.google.firebase.remoteconfig.RemoteConfigComponent; import java.util.List; import java.util.concurrent.Executor; @@ -39,7 +40,8 @@ public void testGetComponents() { FirebasePerfRegistrar firebasePerfRegistrar = new FirebasePerfRegistrar(); List> components = firebasePerfRegistrar.getComponents(); - assertThat(components).hasSize(3); + // FirebasePerformance, FirebasePerfEarly, SessionManager, LibraryVersionComponent + assertThat(components).hasSize(4); Component firebasePerfComponent = components.get(0); @@ -49,7 +51,8 @@ public void testGetComponents() { Dependency.requiredProvider(RemoteConfigComponent.class), Dependency.required(FirebaseInstallationsApi.class), Dependency.requiredProvider(TransportFactory.class), - Dependency.required(FirebasePerfEarly.class)); + Dependency.required(FirebasePerfEarly.class), + Dependency.required(SessionManager.class)); assertThat(firebasePerfComponent.isLazy()).isTrue(); @@ -59,7 +62,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.required(SessionManager.class)); assertThat(firebasePerfEarlyComponent.isLazy()).isFalse(); } diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java index 899012ff992..5c6d5d8d943 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTest.java @@ -36,7 +36,10 @@ import com.google.firebase.perf.config.ConfigResolver; import com.google.firebase.perf.config.DeviceCacheManager; import com.google.firebase.perf.config.RemoteConfigManager; +import com.google.firebase.perf.session.PerfSession; import com.google.firebase.perf.session.SessionManager; +import com.google.firebase.perf.session.gauges.GaugeManager; +import com.google.firebase.perf.util.Clock; import com.google.firebase.perf.util.Constants; import com.google.firebase.perf.util.ImmutableBundle; import com.google.firebase.remoteconfig.RemoteConfigComponent; @@ -104,7 +107,10 @@ public void setUp() throws NameNotFoundException { spyConfigResolver = spy(ConfigResolver.getInstance()); spyRemoteConfigManager = spy(ConfigResolver.getInstance().getRemoteConfigManager()); - spySessionManager = spy(SessionManager.getInstance()); + spySessionManager = + spy( + new SessionManager( + mock(GaugeManager.class), new PerfSession("sessionId", new Clock()))); fakeDirectExecutorService = new FakeDirectExecutorService(); } diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java index ba1b907c386..0761b2eb823 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java @@ -34,10 +34,8 @@ import android.view.View; import androidx.test.core.app.ApplicationProvider; import com.google.firebase.perf.FirebasePerformanceTestBase; -import com.google.firebase.perf.application.AppStateMonitor; import com.google.firebase.perf.config.ConfigResolver; import com.google.firebase.perf.session.PerfSession; -import com.google.firebase.perf.session.SessionManager; import com.google.firebase.perf.session.gauges.GaugeManager; import com.google.firebase.perf.transport.TransportManager; import com.google.firebase.perf.util.Clock; @@ -99,7 +97,7 @@ public Timer answer(InvocationOnMock invocationOnMock) throws Throwable { @After public void reset() { - SessionManager.getInstance().updatePerfSession(PerfSession.createWithId("randomSessionId")); + sessionManager.updatePerfSession(PerfSession.createWithId("randomSessionId")); } /** Test activity sequentially goes through onCreate()->onStart()->onResume() state change. */ diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilderTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilderTest.java index 9a0a7c46c58..c5e7af0bcf2 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilderTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilderTest.java @@ -61,6 +61,8 @@ protected SessionManager provideSessionManager() { @Before public void setUp() { initMocks(this); + AppStateMonitor.resetInstance(); + AppStateMonitor.getInstance(sessionManager); networkMetricBuilder = new NetworkRequestMetricBuilder( mockTransportManager, mockAppStateMonitor, mockGaugeManager, sessionManager); @@ -235,7 +237,7 @@ public void testSessionIdAdditionInNetworkRequestMetric() { int numberOfSessionIds = metricBuilder.getSessions().size(); PerfSession perfSession = PerfSession.createWithId("testSessionId"); - SessionManager.getInstance().updatePerfSession(perfSession); + sessionManager.updatePerfSession(perfSession); assertThat(metricBuilder.getSessions().size()).isEqualTo(numberOfSessionIds + 1); } diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/TraceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/TraceTest.java index ca86a1a86b6..d57daeda632 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/TraceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/TraceTest.java @@ -79,6 +79,8 @@ public void setUp() { DeviceCacheManager.clearInstance(); ConfigResolver.clearInstance(); + AppStateMonitor.resetInstance(); + AppStateMonitor.getInstance(sessionManager); appContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit().clear().commit(); ConfigResolver configResolver = ConfigResolver.getInstance(); @@ -1017,7 +1019,7 @@ public void testSessionIdAdditionInTrace() { int numberOfSessionIds = trace.getSessions().size(); PerfSession perfSession = PerfSession.createWithId("test_session_id"); - SessionManager.getInstance().updatePerfSession(perfSession); + sessionManager.updatePerfSession(perfSession); assertThat(trace.getSessions()).hasSize(numberOfSessionIds + 1); trace.stop(); diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java index 07b50c4377d..6f451ad02d4 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java @@ -41,7 +41,6 @@ import com.google.firebase.perf.FirebasePerformanceTestBase; import com.google.firebase.perf.application.AppStateMonitor; import com.google.firebase.perf.config.ConfigResolver; -import com.google.firebase.perf.session.SessionManager; import com.google.firebase.perf.shadows.ShadowPreconditions; import com.google.firebase.perf.util.Constants; import com.google.firebase.perf.util.Constants.CounterNames; @@ -1206,14 +1205,14 @@ public void logTraceMetric_perfSessionExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(true); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidTraceMetric(), ApplicationProcessState.BACKGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } @Test @@ -1223,14 +1222,14 @@ public void logNetworkMetric_perfSessionExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(true); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidNetworkRequestMetric(), ApplicationProcessState.BACKGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } @Test @@ -1240,14 +1239,14 @@ public void logGaugeMetric_perfSessionExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(true); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidGaugeMetric(), ApplicationProcessState.FOREGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } @Test @@ -1257,14 +1256,14 @@ public void logTraceMetric_perfSessionNotExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(false); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidTraceMetric(), ApplicationProcessState.BACKGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } @Test @@ -1274,14 +1273,14 @@ public void logNetworkMetric_perfSessionNotExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(false); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidNetworkRequestMetric(), ApplicationProcessState.BACKGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } @Test @@ -1291,14 +1290,14 @@ public void logGaugeMetric_perfSessionNotExpired_doesNotUpdateSessionId() { when(mockPerfSession.sessionId()).thenReturn("sessionId"); when(mockPerfSession.isSessionRunningTooLong()).thenReturn(false); - SessionManager.getInstance().setPerfSession(mockPerfSession); - String oldSessionId = SessionManager.getInstance().perfSession().sessionId(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + sessionManager.setPerfSession(mockPerfSession); + String oldSessionId = sessionManager.perfSession().sessionId(); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); testTransportManager.log(createValidGaugeMetric(), ApplicationProcessState.FOREGROUND); fakeExecutorService.runAll(); - assertThat(oldSessionId).isEqualTo(SessionManager.getInstance().perfSession().sessionId()); + assertThat(oldSessionId).isEqualTo(sessionManager.perfSession().sessionId()); } // endregion @@ -1423,7 +1422,8 @@ private void initializeTransport(boolean shouldInitialize) { mockRateLimiter, mockAppStateMonitor, mockFlgTransport, - fakeExecutorService); + fakeExecutorService, + sessionManager); } else { testTransportManager.setInitialized(false); From 6a84a79541bf27b9ffb8857faf7ff70393bf4fcb Mon Sep 17 00:00:00 2001 From: Joseph Rodiz Date: Wed, 1 Apr 2026 16:39:02 -0600 Subject: [PATCH 7/7] run spotlessApply --- .../firebase/perf/FirebasePerfEarly.java | 8 ++++++-- .../firebase/perf/FirebasePerformance.java | 3 ++- .../perf/application/AppStateMonitor.java | 6 +++--- .../firebase/perf/config/ConfigResolver.java | 2 +- .../firebase/perf/metrics/AppStartTrace.java | 18 +++++++++++------- .../google/firebase/perf/metrics/Trace.java | 13 ++++++------- .../FirebasePerformanceSessionSubscriber.kt | 5 ++++- .../perf/application/AppStateMonitorTest.java | 3 --- .../perf/metrics/AppStartTraceTest.java | 19 ++++++++++++------- .../perf/session/gauges/GaugeManagerTest.java | 1 - 10 files changed, 45 insertions(+), 33 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 8729363f6be..b1da99a1fde 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 @@ -36,7 +36,10 @@ public class FirebasePerfEarly { public FirebasePerfEarly( - FirebaseApp app, @Nullable StartupTime startupTime, Executor uiExecutor, SessionManager sessionManager) { + FirebaseApp app, + @Nullable StartupTime startupTime, + Executor uiExecutor, + SessionManager sessionManager) { Context context = app.getApplicationContext(); // Initialize ConfigResolver early for accessing device caching layer. @@ -45,7 +48,8 @@ public FirebasePerfEarly( // Register FirebasePerformance as a subscriber ASAP - which will start collecting gauges if the // FirebaseSession is verbose. - FirebaseSessionsDependencies.register(new FirebasePerformanceSessionSubscriber(configResolver, sessionManager)); + FirebaseSessionsDependencies.register( + new FirebasePerformanceSessionSubscriber(configResolver, sessionManager)); AppStateMonitor appStateMonitor = AppStateMonitor.getInstance(sessionManager); appStateMonitor.registerActivityLifecycleCallbacks(context); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java index 2a9eb992ecb..89ce0477211 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/FirebasePerformance.java @@ -171,7 +171,8 @@ public static FirebasePerformance getInstance() { FirebaseSessionsEnforcementCheck.setEnforcement(BuildConfig.ENFORCE_LEGACY_SESSIONS); TransportManager.getInstance() - .initialize(firebaseApp, firebaseInstallationsApi, transportFactoryProvider, sessionManager); + .initialize( + firebaseApp, firebaseInstallationsApi, transportFactoryProvider, sessionManager); Context appContext = firebaseApp.getApplicationContext(); mMetadataBundle = extractMetadata(appContext); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java b/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java index 98fbbc60861..0b7dd0a307b 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java @@ -87,7 +87,8 @@ public static AppStateMonitor getInstance(SessionManager sessionManager) { if (instance == null) { synchronized (AppStateMonitor.class) { if (instance == null) { - instance = new AppStateMonitor(TransportManager.getInstance(), new Clock(), sessionManager); + instance = + new AppStateMonitor(TransportManager.getInstance(), new Clock(), sessionManager); } } } @@ -109,8 +110,7 @@ public static AppStateMonitor getInstance() { new AppStateMonitor( TransportManager.getInstance(), new Clock(), - new SessionManager( - GaugeManager.getInstance(), PerfSession.createWithId(null))); + new SessionManager(GaugeManager.getInstance(), PerfSession.createWithId(null))); } } } diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java index de4cfcaed58..77cb8428ad4 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java @@ -918,6 +918,6 @@ private boolean isSessionsMaxDurationMinutesValid(long maxDurationMin) { } public RemoteConfigManager getRemoteConfigManager() { - return remoteConfigManager; + return remoteConfigManager; } } diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java index e38944ed0d2..b948ee27b7c 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java @@ -168,12 +168,15 @@ public static void setLauncherActivityOnResumeTime(String activity) { } public static AppStartTrace getInstance(SessionManager sessionManager) { - return instance != null ? instance : getInstance(TransportManager.getInstance(), new Clock(), sessionManager); + return instance != null + ? instance + : getInstance(TransportManager.getInstance(), new Clock(), sessionManager); } // TODO(b/258263016): Migrate to go/firebase-android-executors @SuppressLint("ThreadPoolCreation") - static AppStartTrace getInstance(TransportManager transportManager, Clock clock, SessionManager sessionManager) { + static AppStartTrace getInstance( + TransportManager transportManager, Clock clock, SessionManager sessionManager) { if (instance == null) { synchronized (AppStartTrace.class) { if (instance == null) { @@ -564,11 +567,12 @@ public static boolean isAnyAppProcessInForeground(Context appContext) { if (appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { continue; } -// if (appProcess.processName.equals(appProcessName) -// || appProcess.processName.startsWith(allowedAppProcessNamePrefix)) { -// // Returns true if the process with `IMPORTANCE_FOREGROUND` matches current process. -// return true; -// } + // if (appProcess.processName.equals(appProcessName) + // || appProcess.processName.startsWith(allowedAppProcessNamePrefix)) { + // // Returns true if the process with `IMPORTANCE_FOREGROUND` matches current + // process. + // return true; + // } } } diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java index 6b86e97d176..262ac9e817f 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/Trace.java @@ -157,11 +157,11 @@ public Trace( } public Trace( - @NonNull String name, - @NonNull TransportManager transportManager, - @NonNull Clock clock, - @NonNull AppStateMonitor appStateMonitor, - @NonNull GaugeManager gaugeManager) { + @NonNull String name, + @NonNull TransportManager transportManager, + @NonNull Clock clock, + @NonNull AppStateMonitor appStateMonitor, + @NonNull GaugeManager gaugeManager) { this( name, transportManager, @@ -284,8 +284,7 @@ public void stop() { transportManager.log(new TraceMetricBuilder(this).build(), getAppState()); if (sessionManager.perfSession().isVerbose()) { - gaugeManager.collectGaugeMetricOnce( - sessionManager.perfSession().getTimer()); + gaugeManager.collectGaugeMetricOnce(sessionManager.perfSession().getTimer()); } } else { logger.error("Trace name is empty, no log is sent to server"); diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/session/FirebasePerformanceSessionSubscriber.kt b/firebase-perf/src/main/java/com/google/firebase/perf/session/FirebasePerformanceSessionSubscriber.kt index 2e51a1498d1..2ed18337797 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/session/FirebasePerformanceSessionSubscriber.kt +++ b/firebase-perf/src/main/java/com/google/firebase/perf/session/FirebasePerformanceSessionSubscriber.kt @@ -20,7 +20,10 @@ import com.google.firebase.perf.config.ConfigResolver import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck.Companion.checkSession import com.google.firebase.sessions.api.SessionSubscriber -class FirebasePerformanceSessionSubscriber(val configResolver: ConfigResolver, private val sessionManager: SessionManager) : SessionSubscriber { +class FirebasePerformanceSessionSubscriber( + val configResolver: ConfigResolver, + private val sessionManager: SessionManager +) : SessionSubscriber { override val sessionSubscriberName: SessionSubscriber.Name = SessionSubscriber.Name.PERFORMANCE diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/application/AppStateMonitorTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/application/AppStateMonitorTest.java index de193c2066e..6722f183db0 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/application/AppStateMonitorTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/application/AppStateMonitorTest.java @@ -40,7 +40,6 @@ import com.google.firebase.perf.metrics.NetworkRequestMetricBuilder; import com.google.firebase.perf.metrics.Trace; import com.google.firebase.perf.session.PerfSession; -import com.google.firebase.perf.session.SessionManager; import com.google.firebase.perf.session.gauges.GaugeManager; import com.google.firebase.perf.transport.TransportManager; import com.google.firebase.perf.util.Clock; @@ -53,7 +52,6 @@ import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; -import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -80,7 +78,6 @@ public class AppStateMonitorTest extends FirebasePerformanceTestBase { private Activity activity1; private Activity activity2; - @Before public void setUp() { currentTime = 0; diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java index 0761b2eb823..291000c1cd7 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java @@ -36,7 +36,6 @@ import com.google.firebase.perf.FirebasePerformanceTestBase; import com.google.firebase.perf.config.ConfigResolver; import com.google.firebase.perf.session.PerfSession; -import com.google.firebase.perf.session.gauges.GaugeManager; import com.google.firebase.perf.transport.TransportManager; import com.google.firebase.perf.util.Clock; import com.google.firebase.perf.util.Constants; @@ -105,7 +104,8 @@ public void reset() { public void testLaunchActivity() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); // first activity goes through onCreate()->onStart()->onResume() state change. currentTime = 1; @@ -179,7 +179,8 @@ private void verifyFinalState( public void testInterleavedActivity() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); // first activity onCreate() currentTime = 1; @@ -216,7 +217,8 @@ public void testInterleavedActivity() { public void testDelayedAppStart() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); // Delays activity creation after 1 minute from app start time. currentTime = @@ -243,7 +245,8 @@ public void testStartFromBackground_within50ms() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); Timer fakeTimer = spy(new Timer(currentTime)); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); trace.setMainThreadRunnableTime(fakeTimer); @@ -271,7 +274,8 @@ public void testStartFromBackground_moreThan50ms() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); Timer fakeTimer = spy(new Timer(currentTime)); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); trace.setMainThreadRunnableTime(fakeTimer); @@ -304,7 +308,8 @@ public void timeToInitialDisplay_isLogged() { when(configResolver.getIsExperimentTTIDEnabled()).thenReturn(true); FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, sessionManager, fakeExecutorService); + new AppStartTrace( + transportManager, clock, configResolver, sessionManager, fakeExecutorService); trace.registerActivityLifecycleCallbacks(appContext); // Simulate resume and manually stepping time forward ShadowSystemClock.advanceBy(Duration.ofMillis(1000)); diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java index 9dd0e9e82d8..eaee6c7a218 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java @@ -83,7 +83,6 @@ public static void setUpBeforeClass() { GaugeCounter.resetCounter(); } - @Before public void setUp() { fakeScheduledExecutorService = new FakeScheduledExecutorService();