Skip to content

Commit 407df2a

Browse files
committed
Switch to a singleton Fireperf session subscriber
1 parent 4e75c31 commit 407df2a

File tree

4 files changed

+26
-18
lines changed

4 files changed

+26
-18
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,7 @@ public static FirebasePerformance getInstance() {
202202
firebaseApp.getOptions().getProjectId(), appContext.getPackageName())));
203203
}
204204

205-
SessionManagerKt sessionSubscriber = new SessionManagerKt(isPerformanceCollectionEnabled());
206-
FirebaseSessionsDependencies.register(sessionSubscriber);
205+
FirebaseSessionsDependencies.register(SessionManagerKt.Companion.getInstance());
207206
}
208207

209208
/**

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

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,10 @@
2020
import androidx.annotation.Nullable;
2121
import androidx.annotation.VisibleForTesting;
2222
import com.google.firebase.perf.config.ConfigResolver;
23-
import com.google.firebase.perf.logging.AndroidLogger;
2423
import com.google.firebase.perf.util.Clock;
2524
import com.google.firebase.perf.util.Timer;
2625
import com.google.firebase.perf.v1.SessionVerbosity;
27-
import com.google.firebase.sessions.api.SessionSubscriber;
2826
import java.util.List;
29-
import java.util.Objects;
3027
import java.util.UUID;
3128
import java.util.concurrent.TimeUnit;
3229

@@ -50,7 +47,7 @@ public static PerfSession createNewSession() {
5047
// SessionManagerKt verifies if this is an active session, and sets the AQS session ID.
5148
// The assumption is that new PerfSessions *should* be limited to either App Start, or through
5249
// AQS.
53-
SessionManagerKt.Companion.getPerfSessionToAqs().put(prunedSessionId, null);
50+
SessionManagerKt.Companion.getInstance().reportPerfSession(prunedSessionId);
5451

5552
return session;
5653
}
@@ -71,12 +68,8 @@ private PerfSession(@NonNull Parcel in) {
7168

7269
/** Returns the sessionId of the object. */
7370
public String sessionId() {
74-
// TODO(b/394127311): Verify edge cases.
75-
SessionSubscriber.SessionDetails sessionDetails =
76-
SessionManagerKt.Companion.getPerfSessionToAqs().get(internalSessionId);
77-
AndroidLogger.getInstance()
78-
.debug("AQS for " + this.internalSessionId + " is " + sessionDetails);
79-
return Objects.requireNonNull(sessionDetails).getSessionId();
71+
return SessionManagerKt.Companion.getInstance()
72+
.getAqsMappedToPerfSession(this.internalSessionId);
8073
}
8174

8275
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.google.firebase.perf.session
22

3+
import com.google.firebase.perf.config.ConfigResolver
34
import com.google.firebase.perf.logging.AndroidLogger
45
import com.google.firebase.sessions.api.SessionSubscriber
56

6-
class SessionManagerKt(val dataCollectionEnabled: Boolean) : SessionSubscriber {
7+
class SessionManagerKt(private val dataCollectionEnabled: Boolean) : SessionSubscriber {
8+
private val perfSessionToAqs: MutableMap<String, SessionSubscriber.SessionDetails?> =
9+
mutableMapOf()
10+
711
override val isDataCollectionEnabled: Boolean
812
get() = dataCollectionEnabled
913

@@ -25,9 +29,19 @@ class SessionManagerKt(val dataCollectionEnabled: Boolean) : SessionSubscriber {
2529
}
2630
}
2731

32+
fun reportPerfSession(perfSessionId: String) {
33+
perfSessionToAqs[perfSessionId] = null
34+
}
35+
36+
fun getAqsMappedToPerfSession(perfSessionId: String): String {
37+
AndroidLogger.getInstance()
38+
.debug("AQS for perf session $perfSessionId is ${perfSessionToAqs[perfSessionId]?.sessionId}")
39+
return perfSessionToAqs[perfSessionId]?.sessionId ?: perfSessionId
40+
}
41+
2842
companion object {
29-
val perfSessionToAqs: MutableMap<String, SessionSubscriber.SessionDetails?> by lazy {
30-
mutableMapOf()
43+
val instance: SessionManagerKt by lazy {
44+
SessionManagerKt(ConfigResolver.getInstance().isPerformanceMonitoringEnabled)
3145
}
3246
}
3347
}

firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTestBase.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import com.google.firebase.FirebaseApp;
2424
import com.google.firebase.FirebaseOptions;
2525
import com.google.firebase.perf.config.ConfigResolver;
26-
import com.google.firebase.perf.session.PerfSession;
27-
import com.google.firebase.perf.session.SessionManager;
26+
import com.google.firebase.perf.session.SessionManagerKt;
2827
import com.google.firebase.perf.util.ImmutableBundle;
28+
import com.google.firebase.sessions.api.SessionSubscriber;
2929
import org.junit.After;
3030
import org.junit.Before;
3131
import org.robolectric.shadows.ShadowPackageManager;
@@ -72,6 +72,7 @@ public void setUpFirebaseApp() {
7272
.setProjectId(FAKE_FIREBASE_PROJECT_ID)
7373
.build();
7474
FirebaseApp.initializeApp(appContext, options);
75+
FirebasePerformance.getInstance();
7576
}
7677

7778
@After
@@ -98,6 +99,7 @@ private static void forceVerboseSessionWithSamplingPercentage(long samplingPerce
9899
bundle.putFloat("sessions_sampling_percentage", samplingPercentage);
99100
ConfigResolver.getInstance().setMetadataBundle(new ImmutableBundle(bundle));
100101

101-
SessionManager.getInstance().setPerfSession(PerfSession.createNewSession());
102+
SessionManagerKt.Companion.getInstance()
103+
.onSessionChanged(new SessionSubscriber.SessionDetails("sessionId"));
102104
}
103105
}

0 commit comments

Comments
 (0)