Skip to content

Commit fd33b50

Browse files
authored
Crashlytics common executor (#6119)
Cherry-pick #6019, #6040 to main #no-changelog
1 parent 9a1d120 commit fd33b50

File tree

3 files changed

+34
-17
lines changed

3 files changed

+34
-17
lines changed

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/CrashlyticsRegistrar.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616

1717
import com.google.firebase.FirebaseApp;
1818
import com.google.firebase.analytics.connector.AnalyticsConnector;
19+
import com.google.firebase.annotations.concurrent.Background;
20+
import com.google.firebase.annotations.concurrent.Blocking;
1921
import com.google.firebase.components.Component;
2022
import com.google.firebase.components.ComponentContainer;
2123
import com.google.firebase.components.ComponentRegistrar;
2224
import com.google.firebase.components.Dependency;
25+
import com.google.firebase.components.Qualified;
2326
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
2427
import com.google.firebase.inject.Deferred;
2528
import com.google.firebase.installations.FirebaseInstallationsApi;
@@ -29,10 +32,15 @@
2932
import com.google.firebase.sessions.api.SessionSubscriber;
3033
import java.util.Arrays;
3134
import java.util.List;
35+
import java.util.concurrent.ExecutorService;
3236

3337
/** @hide */
3438
public class CrashlyticsRegistrar implements ComponentRegistrar {
3539
private static final String LIBRARY_NAME = "fire-cls";
40+
private final Qualified<ExecutorService> backgroundExecutorService =
41+
Qualified.qualified(Background.class, ExecutorService.class);
42+
private final Qualified<ExecutorService> blockingExecutorService =
43+
Qualified.qualified(Blocking.class, ExecutorService.class);
3644

3745
static {
3846
// Add Crashlytics as a dependency of Sessions when this class is loaded into memory.
@@ -46,6 +54,8 @@ public List<Component<?>> getComponents() {
4654
.name(LIBRARY_NAME)
4755
.add(Dependency.required(FirebaseApp.class))
4856
.add(Dependency.required(FirebaseInstallationsApi.class))
57+
.add(Dependency.required(backgroundExecutorService))
58+
.add(Dependency.required(blockingExecutorService))
4959
.add(Dependency.deferred(CrashlyticsNativeComponent.class))
5060
.add(Dependency.deferred(AnalyticsConnector.class))
5161
.add(Dependency.deferred(FirebaseRemoteConfigInterop.class))
@@ -70,6 +80,12 @@ private FirebaseCrashlytics buildCrashlytics(ComponentContainer container) {
7080
container.getDeferred(FirebaseRemoteConfigInterop.class);
7181

7282
return FirebaseCrashlytics.init(
73-
app, firebaseInstallations, nativeComponent, analyticsConnector, remoteConfigInterop);
83+
app,
84+
firebaseInstallations,
85+
nativeComponent,
86+
analyticsConnector,
87+
remoteConfigInterop,
88+
container.get(backgroundExecutorService),
89+
container.get(blockingExecutorService));
7490
}
7591
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/FirebaseCrashlytics.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
import androidx.annotation.VisibleForTesting;
2222
import com.google.android.gms.tasks.Continuation;
2323
import com.google.android.gms.tasks.Task;
24-
import com.google.android.gms.tasks.Tasks;
2524
import com.google.firebase.FirebaseApp;
2625
import com.google.firebase.analytics.connector.AnalyticsConnector;
26+
import com.google.firebase.annotations.concurrent.Background;
27+
import com.google.firebase.annotations.concurrent.Blocking;
2728
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
2829
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponentDeferredProxy;
2930
import com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider;
@@ -45,7 +46,7 @@
4546
import com.google.firebase.remoteconfig.interop.FirebaseRemoteConfigInterop;
4647
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
4748
import java.util.List;
48-
import java.util.concurrent.Callable;
49+
import java.util.concurrent.Executor;
4950
import java.util.concurrent.ExecutorService;
5051

5152
/**
@@ -68,7 +69,9 @@ public class FirebaseCrashlytics {
6869
@NonNull FirebaseInstallationsApi firebaseInstallationsApi,
6970
@NonNull Deferred<CrashlyticsNativeComponent> nativeComponent,
7071
@NonNull Deferred<AnalyticsConnector> analyticsConnector,
71-
@NonNull Deferred<FirebaseRemoteConfigInterop> remoteConfigInteropDeferred) {
72+
@NonNull Deferred<FirebaseRemoteConfigInterop> remoteConfigInteropDeferred,
73+
@Background ExecutorService backgroundExecutorService,
74+
@Blocking ExecutorService blockingExecutorService) {
7275

7376
Context context = app.getApplicationContext();
7477
final String appIdentifier = context.getPackageName();
@@ -147,8 +150,8 @@ public class FirebaseCrashlytics {
147150

148151
Logger.getLogger().v("Installer package name is: " + appData.installerPackageName);
149152

150-
final ExecutorService threadPoolExecutor =
151-
ExecutorUtils.buildSingleThreadExecutorService("com.google.firebase.crashlytics.startup");
153+
final Executor threadPoolExecutor =
154+
ExecutorUtils.buildSequentialExecutor(backgroundExecutorService);
152155

153156
final SettingsController settingsController =
154157
SettingsController.create(
@@ -178,17 +181,9 @@ public Object then(@NonNull Task<Void> task) throws Exception {
178181

179182
final boolean finishCoreInBackground = core.onPreExecute(appData, settingsController);
180183

181-
Tasks.call(
182-
threadPoolExecutor,
183-
new Callable<Void>() {
184-
@Override
185-
public Void call() throws Exception {
186-
if (finishCoreInBackground) {
187-
core.doBackgroundInitializationAsync(settingsController);
188-
}
189-
return null;
190-
}
191-
});
184+
if (finishCoreInBackground) {
185+
core.doBackgroundInitializationAsync(settingsController);
186+
}
192187

193188
return new FirebaseCrashlytics(core);
194189
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/ExecutorUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
import static java.util.concurrent.TimeUnit.SECONDS;
1818

1919
import android.annotation.SuppressLint;
20+
import com.google.firebase.concurrent.FirebaseExecutors;
2021
import com.google.firebase.crashlytics.internal.Logger;
2122
import java.util.Locale;
23+
import java.util.concurrent.Executor;
2224
import java.util.concurrent.ExecutorService;
2325
import java.util.concurrent.Executors;
2426
import java.util.concurrent.LinkedBlockingQueue;
@@ -34,6 +36,10 @@ public final class ExecutorUtils {
3436

3537
private ExecutorUtils() {}
3638

39+
public static Executor buildSequentialExecutor(Executor commonExecutor) {
40+
return FirebaseExecutors.newSequentialExecutor(commonExecutor);
41+
}
42+
3743
public static ExecutorService buildSingleThreadExecutorService(String name) {
3844
final ThreadFactory threadFactory = ExecutorUtils.getNamedThreadFactory(name);
3945
final ExecutorService executor =

0 commit comments

Comments
 (0)