Skip to content

Commit 3cc4f14

Browse files
committed
Register for sessionID updates much earlier than FirebasePerformance module creation.
1 parent 9f924d6 commit 3cc4f14

File tree

7 files changed

+42
-39
lines changed

7 files changed

+42
-39
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
package com.google.firebase.perf;
1616

1717
import android.content.Context;
18+
import androidx.annotation.NonNull;
1819
import androidx.annotation.Nullable;
1920
import com.google.firebase.FirebaseApp;
2021
import com.google.firebase.StartupTime;
2122
import com.google.firebase.perf.application.AppStateMonitor;
2223
import com.google.firebase.perf.config.ConfigResolver;
2324
import com.google.firebase.perf.metrics.AppStartTrace;
25+
import com.google.firebase.perf.session.PerfSession;
2426
import com.google.firebase.perf.session.SessionManager;
27+
import com.google.firebase.sessions.FirebaseSessions;
28+
import com.google.firebase.sessions.api.SessionSubscriber;
2529
import java.util.concurrent.Executor;
2630

2731
/**
@@ -34,7 +38,7 @@
3438
public class FirebasePerfEarly {
3539

3640
public FirebasePerfEarly(
37-
FirebaseApp app, @Nullable StartupTime startupTime, Executor uiExecutor) {
41+
FirebaseApp app, FirebaseSessions firebaseSessions, @Nullable StartupTime startupTime, Executor uiExecutor) {
3842
Context context = app.getApplicationContext();
3943

4044
// Initialize ConfigResolver early for accessing device caching layer.
@@ -51,6 +55,27 @@ public FirebasePerfEarly(
5155
uiExecutor.execute(new AppStartTrace.StartFromBackgroundRunnable(appStartTrace));
5256
}
5357

58+
// Register with Firebase sessions to receive updates about session changes.
59+
firebaseSessions.register(
60+
new SessionSubscriber() {
61+
@Override
62+
public void onSessionChanged(@NonNull SessionDetails sessionDetails) {
63+
PerfSession perfSession = PerfSession.createWithId(sessionDetails.getSessionId());
64+
SessionManager.getInstance().updatePerfSession(perfSession);
65+
}
66+
67+
@Override
68+
public boolean isDataCollectionEnabled() {
69+
return configResolver.isPerformanceMonitoringEnabled();
70+
}
71+
72+
@NonNull
73+
@Override
74+
public Name getSessionSubscriberName() {
75+
return SessionSubscriber.Name.PERFORMANCE;
76+
}
77+
});
78+
5479
// In the case of cold start, we create a session and start collecting gauges as early as
5580
// possible.
5681
// There is code in SessionManager that prevents us from resetting the session twice in case

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,21 @@ public List<Component<?>> getComponents() {
6565
.add(Dependency.requiredProvider(RemoteConfigComponent.class))
6666
.add(Dependency.required(FirebaseInstallationsApi.class))
6767
.add(Dependency.requiredProvider(TransportFactory.class))
68-
.add(Dependency.required(FirebaseSessions.class))
6968
.add(Dependency.required(FirebasePerfEarly.class))
7069
.factory(FirebasePerfRegistrar::providesFirebasePerformance)
7170
.build(),
7271
Component.builder(FirebasePerfEarly.class)
7372
.name(EARLY_LIBRARY_NAME)
7473
.add(Dependency.required(FirebaseApp.class))
74+
.add(Dependency.required(FirebaseSessions.class))
7575
.add(Dependency.optionalProvider(StartupTime.class))
7676
.add(Dependency.required(uiExecutor))
7777
.eagerInDefaultApp()
7878
.factory(
7979
container ->
8080
new FirebasePerfEarly(
8181
container.get(FirebaseApp.class),
82+
container.get(FirebaseSessions.class),
8283
container.getProvider(StartupTime.class).get(),
8384
container.get(uiExecutor)))
8485
.build(),
@@ -102,8 +103,7 @@ private static FirebasePerformance providesFirebasePerformance(ComponentContaine
102103
container.get(FirebaseApp.class),
103104
container.get(FirebaseInstallationsApi.class),
104105
container.getProvider(RemoteConfigComponent.class),
105-
container.getProvider(TransportFactory.class),
106-
container.get(FirebaseSessions.class)))
106+
container.getProvider(TransportFactory.class)))
107107
.build();
108108

109109
return component.getFirebasePerformance();

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ public static FirebasePerformance getInstance() {
143143
private final Provider<RemoteConfigComponent> firebaseRemoteConfigProvider;
144144
private final FirebaseInstallationsApi firebaseInstallationsApi;
145145
private final Provider<TransportFactory> transportFactoryProvider;
146-
private final FirebaseSessions firebaseSessions;
147146

148147
/**
149148
* Constructs the FirebasePerformance class and allows injecting dependencies.
@@ -167,15 +166,13 @@ public static FirebasePerformance getInstance() {
167166
FirebaseInstallationsApi firebaseInstallationsApi,
168167
Provider<TransportFactory> transportFactoryProvider,
169168
RemoteConfigManager remoteConfigManager,
170-
FirebaseSessions firebaseSessions,
171169
ConfigResolver configResolver,
172170
SessionManager sessionManager) {
173171

174172
this.firebaseApp = firebaseApp;
175173
this.firebaseRemoteConfigProvider = firebaseRemoteConfigProvider;
176174
this.firebaseInstallationsApi = firebaseInstallationsApi;
177175
this.transportFactoryProvider = transportFactoryProvider;
178-
this.firebaseSessions = firebaseSessions;
179176

180177
if (firebaseApp == null) {
181178
this.mPerformanceCollectionForceEnabledState = false;
@@ -206,27 +203,6 @@ public static FirebasePerformance getInstance() {
206203
ConsoleUrlGenerator.generateDashboardUrl(
207204
firebaseApp.getOptions().getProjectId(), appContext.getPackageName())));
208205
}
209-
210-
// Register with Firebase sessions to receive updates about session changes.
211-
this.firebaseSessions.register(
212-
new SessionSubscriber() {
213-
@Override
214-
public void onSessionChanged(@NonNull SessionDetails sessionDetails) {
215-
PerfSession perfSession = PerfSession.createWithId(sessionDetails.getSessionId());
216-
sessionManager.updatePerfSession(perfSession);
217-
}
218-
219-
@Override
220-
public boolean isDataCollectionEnabled() {
221-
return configResolver.isPerformanceMonitoringEnabled();
222-
}
223-
224-
@NonNull
225-
@Override
226-
public Name getSessionSubscriberName() {
227-
return SessionSubscriber.Name.PERFORMANCE;
228-
}
229-
});
230206
}
231207

232208
/**

firebase-perf/src/main/java/com/google/firebase/perf/injection/modules/FirebasePerformanceModule.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,16 @@ public class FirebasePerformanceModule {
3535
private final FirebaseInstallationsApi firebaseInstallations;
3636
private final Provider<RemoteConfigComponent> remoteConfigComponentProvider;
3737
private final Provider<TransportFactory> transportFactoryProvider;
38-
private final FirebaseSessions firebaseSessions;
3938

4039
public FirebasePerformanceModule(
4140
@NonNull FirebaseApp firebaseApp,
4241
@NonNull FirebaseInstallationsApi firebaseInstallations,
4342
@NonNull Provider<RemoteConfigComponent> remoteConfigComponentProvider,
44-
@NonNull Provider<TransportFactory> transportFactoryProvider,
45-
@NonNull FirebaseSessions firebaseSessions) {
43+
@NonNull Provider<TransportFactory> transportFactoryProvider) {
4644
this.firebaseApp = firebaseApp;
4745
this.firebaseInstallations = firebaseInstallations;
4846
this.remoteConfigComponentProvider = remoteConfigComponentProvider;
4947
this.transportFactoryProvider = transportFactoryProvider;
50-
this.firebaseSessions = firebaseSessions;
5148
}
5249

5350
@Provides
@@ -84,9 +81,4 @@ ConfigResolver providesConfigResolver() {
8481
SessionManager providesSessionManager() {
8582
return SessionManager.getInstance();
8683
}
87-
88-
@Provides
89-
FirebaseSessions providesFirebaseSessions() {
90-
return firebaseSessions;
91-
}
9284
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public void testGetComponents() {
5050
Dependency.requiredProvider(RemoteConfigComponent.class),
5151
Dependency.required(FirebaseInstallationsApi.class),
5252
Dependency.requiredProvider(TransportFactory.class),
53-
Dependency.required(FirebaseSessions.class),
5453
Dependency.required(FirebasePerfEarly.class));
5554

5655
assertThat(firebasePerfComponent.isLazy()).isTrue();
@@ -61,6 +60,7 @@ public void testGetComponents() {
6160
.containsExactly(
6261
Dependency.required(Qualified.qualified(UiThread.class, Executor.class)),
6362
Dependency.required(FirebaseApp.class),
63+
Dependency.required(FirebaseSessions.class),
6464
Dependency.optionalProvider(StartupTime.class));
6565

6666
assertThat(firebasePerfEarlyComponent.isLazy()).isFalse();

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,6 @@ private FirebasePerformance initializeFirebasePerformancePreferences(
579579
mock(FirebaseInstallationsApi.class),
580580
transportFactoryProvider,
581581
spyRemoteConfigManager,
582-
mock(FirebaseSessions.class),
583582
spyConfigResolver,
584583
spySessionManager);
585584
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414

1515
package com.google.firebase.perf;
1616

17+
import static org.robolectric.Shadows.shadowOf;
18+
1719
import android.content.Context;
20+
import android.content.pm.PackageInfo;
1821
import android.os.Bundle;
1922
import androidx.test.core.app.ApplicationProvider;
2023
import com.google.firebase.FirebaseApp;
@@ -25,6 +28,7 @@
2528
import com.google.firebase.perf.util.ImmutableBundle;
2629
import org.junit.After;
2730
import org.junit.Before;
31+
import org.robolectric.shadows.ShadowPackageManager;
2832

2933
public class FirebasePerformanceTestBase {
3034

@@ -53,6 +57,13 @@ public class FirebasePerformanceTestBase {
5357
@Before
5458
public void setUpFirebaseApp() {
5559
appContext = ApplicationProvider.getApplicationContext();
60+
61+
ShadowPackageManager shadowPackageManager = shadowOf(appContext.getPackageManager());
62+
63+
PackageInfo packageInfo =
64+
shadowPackageManager.getInternalMutablePackageInfo(appContext.getPackageName());
65+
packageInfo.versionName = "1.0.0";
66+
5667
FirebaseOptions options =
5768
new FirebaseOptions.Builder()
5869
.setApplicationId(FAKE_FIREBASE_APPLICATION_ID)

0 commit comments

Comments
 (0)