Skip to content

Commit c87b3dd

Browse files
committed
Re-introduce gauge metadata collection
1 parent 9e15726 commit c87b3dd

File tree

4 files changed

+29
-30
lines changed

4 files changed

+29
-30
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.google.firebase.perf.session
22

33
import com.google.firebase.perf.config.ConfigResolver
44
import com.google.firebase.perf.logging.AndroidLogger
5+
import com.google.firebase.perf.session.gauges.GaugeManager
56
import com.google.firebase.sessions.api.SessionSubscriber
67

78
class FirebasePerformanceSessionSubscriber(private val dataCollectionEnabled: Boolean) :
@@ -28,6 +29,9 @@ class FirebasePerformanceSessionSubscriber(private val dataCollectionEnabled: Bo
2829
SessionManager.getInstance().updatePerfSession(newSession)
2930
perfSessionToAqs[newSession.internalSessionId] = sessionDetails
3031
}
32+
33+
// Always log GaugeMetadata when a session changes.
34+
GaugeManager.getInstance().logGaugeMetadata(sessionDetails.sessionId)
3135
}
3236

3337
fun reportPerfSession(perfSessionId: String) {

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
import java.util.Iterator;
3030
import java.util.Objects;
3131
import java.util.Set;
32-
import java.util.concurrent.ExecutorService;
33-
import java.util.concurrent.Executors;
3432
import java.util.concurrent.Future;
3533

3634
/** Session manager to generate sessionIDs and broadcast to the application. */
@@ -75,14 +73,7 @@ public SessionManager(
7573
* (currently that is before onResume finishes) to ensure gauge collection starts on time.
7674
*/
7775
public void setApplicationContext(final Context appContext) {
78-
// TODO(b/258263016): Migrate to go/firebase-android-executors
79-
@SuppressLint("ThreadPoolCreation")
80-
ExecutorService executorService = Executors.newSingleThreadExecutor();
81-
syncInitFuture =
82-
executorService.submit(
83-
() -> {
84-
gaugeManager.initializeGaugeMetadataManager(appContext);
85-
});
76+
gaugeManager.initializeGaugeMetadataManager(appContext, ApplicationProcessState.FOREGROUND);
8677
}
8778

8879
/**

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/GaugeManager.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.google.firebase.components.Lazy;
2323
import com.google.firebase.perf.config.ConfigResolver;
2424
import com.google.firebase.perf.logging.AndroidLogger;
25+
import com.google.firebase.perf.session.FirebasePerformanceSessionSubscriber;
2526
import com.google.firebase.perf.session.PerfSession;
2627
import com.google.firebase.perf.transport.TransportManager;
2728
import com.google.firebase.perf.util.Timer;
@@ -59,7 +60,7 @@ public class GaugeManager {
5960
private final TransportManager transportManager;
6061

6162
@Nullable private GaugeMetadataManager gaugeMetadataManager;
62-
@Nullable private ScheduledFuture gaugeManagerDataCollectionJob = null;
63+
@Nullable private ScheduledFuture<?> gaugeManagerDataCollectionJob = null;
6364
@Nullable private String sessionId = null;
6465
private ApplicationProcessState applicationProcessState =
6566
ApplicationProcessState.APPLICATION_PROCESS_STATE_UNKNOWN;
@@ -94,8 +95,10 @@ private GaugeManager() {
9495
}
9596

9697
/** Initializes GaugeMetadataManager which requires application context. */
97-
public void initializeGaugeMetadataManager(Context appContext) {
98+
public void initializeGaugeMetadataManager(
99+
Context appContext, ApplicationProcessState applicationProcessState) {
98100
this.gaugeMetadataManager = new GaugeMetadataManager(appContext);
101+
this.applicationProcessState = applicationProcessState;
99102
}
100103

101104
/** Returns the singleton instance of this class. */
@@ -206,7 +209,7 @@ public void stopCollectingGauges() {
206209

207210
// Flush any data that was collected for this session one last time.
208211
@SuppressWarnings("FutureReturnValueIgnored")
209-
ScheduledFuture unusedFuture =
212+
ScheduledFuture<?> unusedFuture =
210213
gaugeManagerExecutor
211214
.get()
212215
.schedule(
@@ -242,31 +245,32 @@ private void syncFlush(String sessionId, ApplicationProcessState appState) {
242245
}
243246

244247
// Adding Session ID info.
245-
gaugeMetricBuilder.setSessionId(sessionId);
248+
String aqsSessionId =
249+
FirebasePerformanceSessionSubscriber.Companion.getInstance()
250+
.getAqsMappedToPerfSession(sessionId);
251+
gaugeMetricBuilder.setSessionId(aqsSessionId);
252+
AndroidLogger.getInstance().debug("CFPR syncFlush: " + sessionId + " AQS: " + aqsSessionId);
246253

247254
transportManager.log(gaugeMetricBuilder.build(), appState);
248255
}
249256

250257
/**
251258
* Log the Gauge Metadata information to the transport.
252259
*
253-
* @param sessionId The {@link PerfSession#sessionId()} to which the collected Gauge Metrics
260+
* @param aqsSessionId The {@link FirebasePerformanceSessionSubscriber#getAqsMappedToPerfSession(String)} to which the collected Gauge Metrics
254261
* should be associated with.
255-
* @param appState The {@link ApplicationProcessState} for which these gauges are collected.
256262
* @return true if GaugeMetadata was logged, false otherwise.
257263
*/
258-
public boolean logGaugeMetadata(String sessionId, ApplicationProcessState appState) {
259-
// TODO(b/394127311): Re-introduce logging of metadata for AQS.
260-
if (gaugeMetadataManager != null) {
261-
GaugeMetric gaugeMetric =
262-
GaugeMetric.newBuilder()
263-
.setSessionId(sessionId)
264-
.setGaugeMetadata(getGaugeMetadata())
265-
.build();
266-
transportManager.log(gaugeMetric, appState);
267-
return true;
268-
}
269-
return false;
264+
public void logGaugeMetadata(String aqsSessionId) {
265+
// TODO(b/394127311): This can now throw an NPE. Explore if there's anything that should be
266+
// verified.
267+
AndroidLogger.getInstance().debug("CFPR logGaugeMetadata: " + aqsSessionId);
268+
GaugeMetric gaugeMetric =
269+
GaugeMetric.newBuilder()
270+
.setSessionId(aqsSessionId)
271+
.setGaugeMetadata(getGaugeMetadata())
272+
.build();
273+
transportManager.log(gaugeMetric, this.applicationProcessState);
270274
}
271275

272276
private GaugeMetadata getGaugeMetadata() {

firebase-perf/src/test/java/com/google/firebase/perf/session/SessionManagerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public void setApplicationContext_logGaugeMetadata_afterGaugeMetadataManagerIsIn
8282
testSessionManager.setApplicationContext(mockApplicationContext);
8383

8484
testSessionManager.getSyncInitFuture().get();
85-
inOrder.verify(mockGaugeManager).initializeGaugeMetadataManager(any());
86-
inOrder.verify(mockGaugeManager).logGaugeMetadata(any(), any());
85+
inOrder.verify(mockGaugeManager).initializeGaugeMetadataManager(any(), any());
86+
inOrder.verify(mockGaugeManager).logGaugeMetadata(any());
8787
}
8888

8989
@Test

0 commit comments

Comments
 (0)