Skip to content

Commit f584b6a

Browse files
authored
Make init suspend on settings only (#6202)
Make init suspend on settings only, not on race. This allows us to avoid having a separate queue just for init and settings. If the app has unsent reports, but data collection and send unsent reports both have not been triggered, still let user actions queue up.
1 parent af0f42a commit f584b6a

File tree

3 files changed

+6
-18
lines changed

3 files changed

+6
-18
lines changed

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/common/CrashlyticsCoreTest.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import android.content.Context;
2323
import android.text.TextUtils;
2424
import androidx.annotation.NonNull;
25-
import androidx.annotation.Nullable;
26-
import com.google.android.gms.tasks.SuccessContinuation;
2725
import com.google.android.gms.tasks.Task;
2826
import com.google.android.gms.tasks.Tasks;
2927
import com.google.firebase.FirebaseApp;
@@ -379,14 +377,7 @@ private Task<CrashlyticsCore> startCoreAsync(CrashlyticsCore crashlyticsCore) {
379377

380378
return crashlyticsCore
381379
.doBackgroundInitializationAsync(mockSettingsController)
382-
.onSuccessTask(
383-
new SuccessContinuation<Void, CrashlyticsCore>() {
384-
@NonNull
385-
@Override
386-
public Task<CrashlyticsCore> then(@Nullable Void aVoid) throws Exception {
387-
return Tasks.forResult(crashlyticsCore);
388-
}
389-
});
380+
.onSuccessTask(unused -> Tasks.forResult(crashlyticsCore));
390381
}
391382

392383
/** Helper class for building CrashlyticsCore instances. */

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,6 @@ Task<Void> deleteUnsentReports() {
339339
return unsentReportsHandled.getTask();
340340
}
341341

342-
// TODO(b/261014167): Use an explicit executor in continuations.
343-
@SuppressLint("TaskMainThread")
344342
Task<Void> submitAllReports(Task<Settings> settingsDataTask) {
345343
if (!reportingCoordinator.hasReportsToSend()) {
346344
// Just notify the user that there are no reports and stop.

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,13 @@ public boolean onPreExecute(AppData appData, SettingsProvider settingsProvider)
224224

225225
/** Performs background initialization asynchronously on the common worker. */
226226
@CanIgnoreReturnValue
227-
public Task<Void> doBackgroundInitializationAsync(SettingsProvider settingsProvider) {
227+
public Task<Settings> doBackgroundInitializationAsync(SettingsProvider settingsProvider) {
228228
return crashlyticsWorkers.common.submitTask(() -> doBackgroundInitialization(settingsProvider));
229229
}
230230

231231
/** Performs background initialization synchronously on the calling thread. */
232232
@CanIgnoreReturnValue
233-
private Task<Void> doBackgroundInitialization(SettingsProvider settingsProvider) {
233+
private Task<Settings> doBackgroundInitialization(SettingsProvider settingsProvider) {
234234
CrashlyticsWorkers.checkBackgroundThread();
235235
// create the marker for this run
236236
markInitializationStarted();
@@ -254,10 +254,9 @@ private Task<Void> doBackgroundInitialization(SettingsProvider settingsProvider)
254254
Logger.getLogger().w("Previous sessions could not be finalized.");
255255
}
256256

257-
// TODO: Move this call out of this method, so that the return value merely indicates
258-
// initialization is complete. Callers that want to know when report sending is complete can
259-
// handle that as a separate call.
260-
return controller.submitAllReports(settingsProvider.getSettingsAsync());
257+
Task<Settings> settings = settingsProvider.getSettingsAsync();
258+
controller.submitAllReports(settings);
259+
return settings;
261260
} catch (Exception e) {
262261
Logger.getLogger()
263262
.e("Crashlytics encountered a problem during asynchronous initialization.", e);

0 commit comments

Comments
 (0)