From 4204f5c1b072729dd57386b0ac203b34c783bbf1 Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:06:23 -0400 Subject: [PATCH 1/7] Add legacy session enforcement in TransportManager --- .../logging/FirebaseSessionsEnforcementCheck.kt | 17 +++++++++++++++-- .../firebase/perf/session/SessionManager.java | 12 +++++------- .../perf/transport/TransportManager.java | 6 ++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt b/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt index 0abef6b0008..e61cc1680c9 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt +++ b/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt @@ -18,6 +18,7 @@ package com.google.firebase.perf.logging import com.google.firebase.perf.session.PerfSession import com.google.firebase.perf.session.isLegacy +import com.google.firebase.perf.v1.PerfSession as ProtoPerfSession class FirebaseSessionsEnforcementCheck { companion object { @@ -25,10 +26,22 @@ class FirebaseSessionsEnforcementCheck { @JvmStatic var enforcement: Boolean = false private var logger: AndroidLogger = AndroidLogger.getInstance() + @JvmStatic + fun checkSession(sessions: List, failureMessage: String) { + for (session in sessions) { + checkSession(session.sessionId, failureMessage) + } + } + @JvmStatic fun checkSession(session: PerfSession, failureMessage: String) { - if (session.isLegacy()) { - logger.debug("legacy session ${session.sessionId()}: $failureMessage") + checkSession(session.sessionId(), failureMessage) + } + + @JvmStatic + fun checkSession(sessionId: String, failureMessage: String) { + if (sessionId.isLegacy()) { + logger.debug("legacy session ${sessionId}: $failureMessage") assert(!enforcement) { failureMessage } } } 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 d0db8a1b85e..2711979f73b 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 @@ -101,7 +101,11 @@ public void updatePerfSession(PerfSession perfSession) { this.perfSession = perfSession; - // TODO(b/394127311): Update/verify behavior for Firebase Sessions. + // Log gauge metadata. + logGaugeMetadataIfCollectionEnabled(); + + // Start of stop the gauge data collection. + startOrStopCollectingGauges(); synchronized (clients) { for (Iterator> i = clients.iterator(); i.hasNext(); ) { @@ -115,12 +119,6 @@ public void updatePerfSession(PerfSession perfSession) { } } } - - // Log gauge metadata. - logGaugeMetadataIfCollectionEnabled(); - - // Start of stop the gauge data collection. - startOrStopCollectingGauges(); } /** 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 a38fb666c85..f32b1e10fe3 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 @@ -39,6 +39,7 @@ import com.google.firebase.perf.config.ConfigResolver; import com.google.firebase.perf.logging.AndroidLogger; import com.google.firebase.perf.logging.ConsoleUrlGenerator; +import com.google.firebase.perf.logging.FirebaseSessionsEnforcementCheck; import com.google.firebase.perf.metrics.validator.PerfMetricValidator; import com.google.firebase.perf.session.SessionManager; import com.google.firebase.perf.util.Constants; @@ -299,6 +300,8 @@ public void log(final TraceMetric traceMetric) { * {@link #isAllowedToDispatch(PerfMetric)}). */ public void log(final TraceMetric traceMetric, final ApplicationProcessState appState) { + FirebaseSessionsEnforcementCheck.checkSession( + traceMetric.getPerfSessionsList(), "log TraceMetric"); executorService.execute( () -> syncLog(PerfMetric.newBuilder().setTraceMetric(traceMetric), appState)); } @@ -327,6 +330,8 @@ public void log(final NetworkRequestMetric networkRequestMetric) { */ public void log( final NetworkRequestMetric networkRequestMetric, final ApplicationProcessState appState) { + FirebaseSessionsEnforcementCheck.checkSession( + networkRequestMetric.getPerfSessionsList(), "log NetworkRequestMetric"); executorService.execute( () -> syncLog( @@ -356,6 +361,7 @@ public void log(final GaugeMetric gaugeMetric) { * {@link #isAllowedToDispatch(PerfMetric)}). */ public void log(final GaugeMetric gaugeMetric, final ApplicationProcessState appState) { + FirebaseSessionsEnforcementCheck.checkSession(gaugeMetric.getSessionId(), "log(GaugeMetric)"); executorService.execute( () -> syncLog(PerfMetric.newBuilder().setGaugeMetric(gaugeMetric), appState)); } From c867fe68cecd8792f3e5e82cd7dab48b27402259 Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:14:43 -0400 Subject: [PATCH 2/7] Add Deprecated to initializeGaugeCollection --- .../java/com/google/firebase/perf/session/SessionManager.java | 1 + 1 file changed, 1 insertion(+) 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 2711979f73b..f005a7c6801 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 @@ -127,6 +127,7 @@ public void updatePerfSession(PerfSession perfSession) { * PerfSession} was already initialized a moment ago by getInstance(). Unlike updatePerfSession, * this does not reset the perfSession. */ + @Deprecated // TODO(b/394127311): Delete this. public void initializeGaugeCollection() { startOrStopCollectingGauges(); } From dcc041b401a134c2757d84b79a435edbd7d0cebd Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:31:28 -0400 Subject: [PATCH 3/7] Update comment --- .../java/com/google/firebase/perf/session/SessionManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f005a7c6801..911c8ed1a45 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 @@ -52,7 +52,8 @@ public final PerfSession perfSession() { } private SessionManager() { - // session should quickly updated by session subscriber. + // 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)); FirebaseSessionsEnforcementCheck.checkSession(perfSession, "SessionManager()"); } From ca2ebe62556c00c0718ddd8bb606770147ae7152 Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:35:14 -0400 Subject: [PATCH 4/7] Move up startOrStopCollectingGauges --- .../com/google/firebase/perf/session/SessionManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 911c8ed1a45..fa71fb0343c 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 @@ -102,12 +102,12 @@ public void updatePerfSession(PerfSession perfSession) { this.perfSession = perfSession; + // Start of stop the gauge data collection ASAP. + startOrStopCollectingGauges(); + // Log gauge metadata. logGaugeMetadataIfCollectionEnabled(); - // Start of stop the gauge data collection. - startOrStopCollectingGauges(); - synchronized (clients) { for (Iterator> i = clients.iterator(); i.hasNext(); ) { SessionAwareObject callback = i.next().get(); From dbba223ce7a97db164371ad5c56cf5e3d130c28e Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:44:52 -0400 Subject: [PATCH 5/7] Comments --- .../java/com/google/firebase/perf/session/SessionManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 fa71fb0343c..a5f20ec6aa4 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 @@ -102,7 +102,7 @@ public void updatePerfSession(PerfSession perfSession) { this.perfSession = perfSession; - // Start of stop the gauge data collection ASAP. + // Start or stop the gauge data collection ASAP. startOrStopCollectingGauges(); // Log gauge metadata. @@ -128,7 +128,7 @@ public void updatePerfSession(PerfSession perfSession) { * PerfSession} was already initialized a moment ago by getInstance(). Unlike updatePerfSession, * this does not reset the perfSession. */ - @Deprecated // TODO(b/394127311): Delete this. + @Deprecated // TODO(b/394127311): Delete this. AQS early initialization updates the session ASAP. public void initializeGaugeCollection() { startOrStopCollectingGauges(); } From fd499161d0b60c348da1dc7e6919331449f50390 Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:48:20 -0400 Subject: [PATCH 6/7] nit --- .../com/google/firebase/perf/transport/TransportManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f32b1e10fe3..d1eb5ae059c 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 @@ -361,7 +361,7 @@ public void log(final GaugeMetric gaugeMetric) { * {@link #isAllowedToDispatch(PerfMetric)}). */ public void log(final GaugeMetric gaugeMetric, final ApplicationProcessState appState) { - FirebaseSessionsEnforcementCheck.checkSession(gaugeMetric.getSessionId(), "log(GaugeMetric)"); + FirebaseSessionsEnforcementCheck.checkSession(gaugeMetric.getSessionId(), "log GaugeMetric"); executorService.execute( () -> syncLog(PerfMetric.newBuilder().setGaugeMetric(gaugeMetric), appState)); } From 48cf2a53b97e5ddbb7abfa5fc713aa2b3b625630 Mon Sep 17 00:00:00 2001 From: Tejas Deshpande Date: Tue, 29 Jul 2025 12:50:01 -0400 Subject: [PATCH 7/7] code assist --- .../firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt b/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt index e61cc1680c9..089611564e8 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt +++ b/firebase-perf/src/main/java/com/google/firebase/perf/logging/FirebaseSessionsEnforcementCheck.kt @@ -28,9 +28,7 @@ class FirebaseSessionsEnforcementCheck { @JvmStatic fun checkSession(sessions: List, failureMessage: String) { - for (session in sessions) { - checkSession(session.sessionId, failureMessage) - } + sessions.forEach { checkSession(it.sessionId, failureMessage) } } @JvmStatic