Skip to content

Commit 8b08c0c

Browse files
committed
Update legacy session enforcement and debugging logic
1 parent 8193be9 commit 8b08c0c

File tree

4 files changed

+27
-26
lines changed

4 files changed

+27
-26
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt

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

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

19-
import com.google.firebase.perf.session.PerfSession
2019
import com.google.firebase.perf.session.isLegacy
20+
import com.google.firebase.perf.v1.NetworkRequestMetric
21+
import com.google.firebase.perf.v1.TraceMetric
2122
import com.google.firebase.perf.v1.PerfSession as ProtoPerfSession
2223

2324
class FirebaseSessionsEnforcementCheck {
@@ -27,21 +28,34 @@ class FirebaseSessionsEnforcementCheck {
2728
private var logger: AndroidLogger = AndroidLogger.getInstance()
2829

2930
@JvmStatic
30-
fun checkSession(sessions: List<ProtoPerfSession>, failureMessage: String) {
31-
sessions.forEach { checkSession(it.sessionId, failureMessage) }
31+
fun filterLegacySessions(trace: TraceMetric): TraceMetric {
32+
val updatedTrace = trace.toBuilder().clearPerfSessions()
33+
filterLegacySessions(trace.perfSessionsList).forEach { updatedTrace.addPerfSessions(it) }
34+
return updatedTrace.build()
3235
}
3336

3437
@JvmStatic
35-
fun checkSession(session: PerfSession, failureMessage: String) {
36-
checkSession(session.sessionId(), failureMessage)
38+
fun filterLegacySessions(networkRequestMetric: NetworkRequestMetric): NetworkRequestMetric {
39+
val updatedNetworkRequestMetric = networkRequestMetric.toBuilder().clearPerfSessions()
40+
filterLegacySessions(networkRequestMetric.perfSessionsList).forEach { updatedNetworkRequestMetric.addPerfSessions(it) }
41+
return updatedNetworkRequestMetric.build()
3742
}
3843

3944
@JvmStatic
4045
fun checkSession(sessionId: String, failureMessage: String) {
4146
if (sessionId.isLegacy()) {
42-
logger.debug("legacy session ${sessionId}: $failureMessage")
47+
logger.verbose("legacy session ${sessionId}: $failureMessage")
4348
assert(!enforcement) { failureMessage }
4449
}
4550
}
51+
52+
private fun filterLegacySessions(sessions: List<ProtoPerfSession>): List<ProtoPerfSession> {
53+
val updatedSessions = sessions.filter { !it.sessionId.isLegacy() }
54+
return if(updatedSessions.isEmpty()) {
55+
sessions
56+
} else {
57+
updatedSessions
58+
}
59+
}
4660
}
4761
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package com.google.firebase.perf.session
1818

1919
import com.google.firebase.perf.config.ConfigResolver
20-
import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck
20+
import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck.Companion.checkSession
2121
import com.google.firebase.sessions.api.SessionSubscriber
2222

2323
class FirebasePerformanceSessionSubscriber(val configResolver: ConfigResolver) : SessionSubscriber {
@@ -30,7 +30,7 @@ class FirebasePerformanceSessionSubscriber(val configResolver: ConfigResolver) :
3030
override fun onSessionChanged(sessionDetails: SessionSubscriber.SessionDetails) {
3131
val currentPerfSession = SessionManager.getInstance().perfSession()
3232
// TODO(b/394127311): Add logic to deal with app start gauges if necessary.
33-
FirebaseSessionsEnforcementCheck.checkSession(currentPerfSession, "onSessionChanged")
33+
checkSession(currentPerfSession.sessionId(), "onSessionChanged called on Legacy Session ID.")
3434

3535
val updatedSession = PerfSession.createWithId(sessionDetails.sessionId)
3636
SessionManager.getInstance().updatePerfSession(updatedSession)

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,13 @@ public static SessionManager getInstance() {
4646

4747
/** Returns the currently active PerfSession. */
4848
public final PerfSession perfSession() {
49-
FirebaseSessionsEnforcementCheck.checkSession(perfSession, "PerfSession.perfSession()");
50-
5149
return perfSession;
5250
}
5351

5452
private SessionManager() {
5553
// Creates a legacy session by default. This is a safety net to allow initializing
5654
// SessionManager - but the current implementation replaces it immediately.
5755
this(GaugeManager.getInstance(), PerfSession.createWithId(null));
58-
FirebaseSessionsEnforcementCheck.checkSession(perfSession, "SessionManager()");
5956
}
6057

6158
@VisibleForTesting
@@ -78,9 +75,6 @@ public void setApplicationContext(final Context appContext) {
7875
* @see PerfSession#isSessionRunningTooLong()
7976
*/
8077
public void stopGaugeCollectionIfSessionRunningTooLong() {
81-
FirebaseSessionsEnforcementCheck.checkSession(
82-
perfSession, "SessionManager.stopGaugeCollectionIfSessionRunningTooLong");
83-
8478
if (perfSession.isSessionRunningTooLong()) {
8579
gaugeManager.stopCollectingGauges();
8680
}
@@ -158,16 +152,12 @@ public void unregisterForSessionUpdates(WeakReference<SessionAwareObject> client
158152
}
159153

160154
private void logGaugeMetadataIfCollectionEnabled() {
161-
FirebaseSessionsEnforcementCheck.checkSession(
162-
perfSession, "logGaugeMetadataIfCollectionEnabled");
163155
if (perfSession.isVerbose()) {
164156
gaugeManager.logGaugeMetadata(perfSession.sessionId());
165157
}
166158
}
167159

168160
private void startOrStopCollectingGauges() {
169-
FirebaseSessionsEnforcementCheck.checkSession(perfSession, "startOrStopCollectingGauges");
170-
171161
if (perfSession.isVerbose()) {
172162
gaugeManager.startCollectingGauges(perfSession);
173163
} else {

firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import static com.google.firebase.perf.util.AppProcessesProvider.getProcessName;
1818
import static java.util.concurrent.TimeUnit.MILLISECONDS;
1919
import static java.util.concurrent.TimeUnit.MINUTES;
20+
import static com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck.filterLegacySessions;
21+
import static com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck.checkSession;
2022

2123
import android.annotation.SuppressLint;
2224
import android.content.Context;
@@ -39,7 +41,6 @@
3941
import com.google.firebase.perf.config.ConfigResolver;
4042
import com.google.firebase.perf.logging.AndroidLogger;
4143
import com.google.firebase.perf.logging.ConsoleUrlGenerator;
42-
import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck;
4344
import com.google.firebase.perf.metrics.validator.PerfMetricValidator;
4445
import com.google.firebase.perf.session.SessionManager;
4546
import com.google.firebase.perf.util.Constants;
@@ -300,10 +301,8 @@ public void log(final TraceMetric traceMetric) {
300301
* {@link #isAllowedToDispatch(PerfMetric)}).
301302
*/
302303
public void log(final TraceMetric traceMetric, final ApplicationProcessState appState) {
303-
FirebaseSessionsEnforcementCheck.checkSession(
304-
traceMetric.getPerfSessionsList(), "log TraceMetric");
305304
executorService.execute(
306-
() -> syncLog(PerfMetric.newBuilder().setTraceMetric(traceMetric), appState));
305+
() -> syncLog(PerfMetric.newBuilder().setTraceMetric(filterLegacySessions(traceMetric)), appState));
307306
}
308307

309308
/**
@@ -330,12 +329,10 @@ public void log(final NetworkRequestMetric networkRequestMetric) {
330329
*/
331330
public void log(
332331
final NetworkRequestMetric networkRequestMetric, final ApplicationProcessState appState) {
333-
FirebaseSessionsEnforcementCheck.checkSession(
334-
networkRequestMetric.getPerfSessionsList(), "log NetworkRequestMetric");
335332
executorService.execute(
336333
() ->
337334
syncLog(
338-
PerfMetric.newBuilder().setNetworkRequestMetric(networkRequestMetric), appState));
335+
PerfMetric.newBuilder().setNetworkRequestMetric(filterLegacySessions(networkRequestMetric)), appState));
339336
}
340337

341338
/**
@@ -361,7 +358,7 @@ public void log(final GaugeMetric gaugeMetric) {
361358
* {@link #isAllowedToDispatch(PerfMetric)}).
362359
*/
363360
public void log(final GaugeMetric gaugeMetric, final ApplicationProcessState appState) {
364-
FirebaseSessionsEnforcementCheck.checkSession(gaugeMetric.getSessionId(), "log GaugeMetric");
361+
checkSession(gaugeMetric.getSessionId(), "Logging GaugeMetric with Legacy Session ID.");
365362
executorService.execute(
366363
() -> syncLog(PerfMetric.newBuilder().setGaugeMetric(gaugeMetric), appState));
367364
}

0 commit comments

Comments
 (0)