Skip to content

Commit aed358d

Browse files
Update the behaviour of the FirebasePerformanceSessionSubcriber to better match early initialization in AQS. (#7184)
This sets the subscriber in FirebasePerfEarly - allowing AQS to send a session sooner. The removal of `SessionManager.getInstance().initializeGaugeCollection();` seems like the right solution given an AQS will be created ASAP. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 898eaaf commit aed358d

File tree

4 files changed

+13
-25
lines changed

4 files changed

+13
-25
lines changed

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import com.google.firebase.perf.application.AppStateMonitor;
2222
import com.google.firebase.perf.config.ConfigResolver;
2323
import com.google.firebase.perf.metrics.AppStartTrace;
24-
import com.google.firebase.perf.session.SessionManager;
24+
import com.google.firebase.perf.session.FirebasePerformanceSessionSubscriber;
25+
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
2526
import java.util.concurrent.Executor;
2627

2728
/**
@@ -41,6 +42,10 @@ public FirebasePerfEarly(
4142
ConfigResolver configResolver = ConfigResolver.getInstance();
4243
configResolver.setApplicationContext(context);
4344

45+
// Register FirebasePerformance as a subscriber ASAP - which will start collecting gauges if the
46+
// FirebaseSession is verbose.
47+
FirebaseSessionsDependencies.register(new FirebasePerformanceSessionSubscriber(configResolver));
48+
4449
AppStateMonitor appStateMonitor = AppStateMonitor.getInstance();
4550
appStateMonitor.registerActivityLifecycleCallbacks(context);
4651
appStateMonitor.registerForAppColdStart(new FirebasePerformanceInitializer());
@@ -50,13 +55,5 @@ public FirebasePerfEarly(
5055
appStartTrace.registerActivityLifecycleCallbacks(context);
5156
uiExecutor.execute(new AppStartTrace.StartFromBackgroundRunnable(appStartTrace));
5257
}
53-
54-
// TODO: Bring back Firebase Sessions dependency to watch for updates to sessions.
55-
56-
// In the case of cold start, we create a session and start collecting gauges as early as
57-
// possible.
58-
// There is code in SessionManager that prevents us from resetting the session twice in case
59-
// of app cold start.
60-
SessionManager.getInstance().initializeGaugeCollection();
6158
}
6259
}

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,12 @@
3737
import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck;
3838
import com.google.firebase.perf.metrics.HttpMetric;
3939
import com.google.firebase.perf.metrics.Trace;
40-
import com.google.firebase.perf.session.FirebasePerformanceSessionSubscriber;
4140
import com.google.firebase.perf.session.SessionManager;
4241
import com.google.firebase.perf.transport.TransportManager;
4342
import com.google.firebase.perf.util.Constants;
4443
import com.google.firebase.perf.util.ImmutableBundle;
4544
import com.google.firebase.perf.util.Timer;
4645
import com.google.firebase.remoteconfig.RemoteConfigComponent;
47-
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
48-
import com.google.firebase.sessions.api.SessionSubscriber;
4946
import java.lang.annotation.Retention;
5047
import java.lang.annotation.RetentionPolicy;
5148
import java.net.URL;
@@ -96,8 +93,6 @@ public class FirebasePerformance implements FirebasePerformanceAttributable {
9693
// once during initialization and cache it.
9794
private final ImmutableBundle mMetadataBundle;
9895

99-
private final SessionSubscriber sessionSubscriber;
100-
10196
/** Valid HttpMethods for manual network APIs */
10297
@StringDef({
10398
HttpMethod.GET,
@@ -171,7 +166,6 @@ public static FirebasePerformance getInstance() {
171166
this.mPerformanceCollectionForceEnabledState = false;
172167
this.configResolver = configResolver;
173168
this.mMetadataBundle = new ImmutableBundle(new Bundle());
174-
this.sessionSubscriber = new FirebasePerformanceSessionSubscriber(false);
175169
return;
176170
}
177171
FirebaseSessionsEnforcementCheck.setEnforcement(BuildConfig.ENFORCE_LEGACY_SESSIONS);
@@ -189,8 +183,6 @@ public static FirebasePerformance getInstance() {
189183
sessionManager.setApplicationContext(appContext);
190184

191185
mPerformanceCollectionForceEnabledState = configResolver.getIsPerformanceCollectionEnabled();
192-
sessionSubscriber = new FirebasePerformanceSessionSubscriber(isPerformanceCollectionEnabled());
193-
FirebaseSessionsDependencies.register(sessionSubscriber);
194186

195187
if (logger.isLogcatEnabled() && isPerformanceCollectionEnabled()) {
196188
logger.info(
@@ -466,9 +458,4 @@ private static ImmutableBundle extractMetadata(Context appContext) {
466458
Boolean getPerformanceCollectionForceEnabledState() {
467459
return mPerformanceCollectionForceEnabledState;
468460
}
469-
470-
@VisibleForTesting
471-
SessionSubscriber getSessionSubscriber() {
472-
return sessionSubscriber;
473-
}
474461
}

firebase-perf/src/main/java/com/google/firebase/perf/session/FirebasePerformanceSessionSubscriber.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,20 @@
1616

1717
package com.google.firebase.perf.session
1818

19+
import com.google.firebase.perf.config.ConfigResolver
1920
import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck
2021
import com.google.firebase.sessions.api.SessionSubscriber
2122

22-
class FirebasePerformanceSessionSubscriber(override val isDataCollectionEnabled: Boolean) :
23-
SessionSubscriber {
23+
class FirebasePerformanceSessionSubscriber(val configResolver: ConfigResolver) : SessionSubscriber {
2424

2525
override val sessionSubscriberName: SessionSubscriber.Name = SessionSubscriber.Name.PERFORMANCE
2626

27+
override val isDataCollectionEnabled: Boolean
28+
get() = configResolver.isPerformanceCollectionEnabled ?: false
29+
2730
override fun onSessionChanged(sessionDetails: SessionSubscriber.SessionDetails) {
2831
val currentPerfSession = SessionManager.getInstance().perfSession()
29-
// TODO(b/394127311): Add logic to deal with app start gauges.
32+
// TODO(b/394127311): Add logic to deal with app start gauges if necessary.
3033
FirebaseSessionsEnforcementCheck.checkSession(currentPerfSession, "onSessionChanged")
3134

3235
val updatedSession = PerfSession.createWithId(sessionDetails.sessionId)

firebase-perf/src/main/java/com/google/firebase/perf/session/SessionManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public final PerfSession perfSession() {
5454
private SessionManager() {
5555
// session should quickly updated by session subscriber.
5656
this(GaugeManager.getInstance(), PerfSession.createWithId(null));
57+
FirebaseSessionsEnforcementCheck.checkSession(perfSession, "SessionManager()");
5758
}
5859

5960
@VisibleForTesting

0 commit comments

Comments
 (0)