Skip to content

Commit 92fce90

Browse files
committed
Revert "move more jobs to disk write (#6156)"
This reverts commit db42bae.
1 parent b83910b commit 92fce90

File tree

5 files changed

+26
-57
lines changed

5 files changed

+26
-57
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,9 @@ public void testWriteNonFatal_callsSessionReportingCoordinatorPersistNonFatal()
213213
.thenReturn(new TreeSet<>(Collections.singleton(sessionId)));
214214

215215
controller.writeNonFatalException(thread, nonFatal);
216-
crashlyticsWorkers.common.submit(() -> controller.doCloseSessions(testSettingsProvider));
216+
controller.doCloseSessions(testSettingsProvider);
217217

218218
crashlyticsWorkers.common.await();
219-
crashlyticsWorkers.diskWrite.await();
220219

221220
verify(mockSessionReportingCoordinator)
222221
.persistNonFatalEvent(eq(nonFatal), eq(thread), eq(sessionId), anyLong());
@@ -490,8 +489,6 @@ public void testUploadDisabledThenOptOut() throws Exception {
490489
await(controller.deleteUnsentReports());
491490
await(task);
492491

493-
crashlyticsWorkers.diskWrite.await();
494-
495492
verify(mockSessionReportingCoordinator).removeAllReports();
496493
verifyNoMoreInteractions(mockSessionReportingCoordinator);
497494
}

firebase-crashlytics/src/androidTest/java/com/google/firebase/crashlytics/internal/metadata/MetaDataStoreTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ public void testWriteUserData_escaped() throws Exception {
170170
crashlyticsWorkers.diskWrite.await();
171171
UserMetadata userData =
172172
UserMetadata.loadFromExistingSession(SESSION_ID_1, fileStore, crashlyticsWorkers);
173-
Thread.sleep(10);
174173
assertEquals(ESCAPED.trim(), userData.getUserId());
175174
}
176175

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

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ public Task<Void> call() throws Exception {
205205

206206
// We've fatally crashed, so write the marker file that indicates a crash occurred.
207207
crashMarker.create();
208+
208209
reportingCoordinator.persistFatalEvent(
209210
ex, thread, currentSessionId, timestampSeconds);
210211

@@ -362,11 +363,8 @@ public Task<Void> then(@Nullable Boolean send) throws Exception {
362363
public Task<Void> call() throws Exception {
363364
if (!send) {
364365
Logger.getLogger().v("Deleting cached crash reports...");
365-
crashlyticsWorkers.diskWrite.submit(
366-
() -> {
367-
deleteFiles(listAppExceptionMarkerFiles());
368-
reportingCoordinator.removeAllReports();
369-
});
366+
deleteFiles(listAppExceptionMarkerFiles());
367+
reportingCoordinator.removeAllReports();
370368
unsentReportsHandled.trySetResult(null);
371369
return Tasks.forResult(null);
372370
}
@@ -514,7 +512,7 @@ boolean finalizeSessions(SettingsProvider settingsProvider) {
514512

515513
Logger.getLogger().v("Finalizing previously open sessions.");
516514
try {
517-
doCloseSessions(true, settingsProvider, true);
515+
doCloseSessions(true, settingsProvider);
518516
} catch (Exception e) {
519517
Logger.getLogger().e("Unable to finalize previously open sessions.", e);
520518
return false;
@@ -559,19 +557,15 @@ private void doOpenSession(String sessionIdentifier, Boolean isOnDemand) {
559557
reportingCoordinator.onBeginSession(sessionIdentifier, startedAtSeconds);
560558
}
561559

562-
// This is only used for exception handler close session (we have another close session in
563-
// background initialization)
564560
void doCloseSessions(SettingsProvider settingsProvider) {
565-
doCloseSessions(false, settingsProvider, false);
561+
doCloseSessions(false, settingsProvider);
566562
}
567563

568564
/**
569-
*
570-
* Not synchronized/locked. Must be executed from the executor service runs tasks in serial order
565+
* Not synchronized/locked. Must be executed from the single thread executor service used by this
566+
* class.
571567
*/
572-
private void doCloseSessions(
573-
boolean skipCurrentSession, SettingsProvider settingsProvider, boolean isInitProcess) {
574-
CrashlyticsWorkers.checkBackgroundThread();
568+
private void doCloseSessions(boolean skipCurrentSession, SettingsProvider settingsProvider) {
575569
final int offset = skipCurrentSession ? 1 : 0;
576570

577571
// :TODO HW2021 this implementation can be cleaned up.
@@ -585,15 +579,13 @@ private void doCloseSessions(
585579

586580
final String mostRecentSessionIdToClose = sortedOpenSessions.get(offset);
587581

588-
// We only collect ANR info for finalize report during initialization process
589-
if (isInitProcess && settingsProvider.getSettingsSync().featureFlagData.collectAnrs) {
582+
if (settingsProvider.getSettingsSync().featureFlagData.collectAnrs) {
590583
writeApplicationExitInfoEventIfRelevant(mostRecentSessionIdToClose);
591584
} else {
592585
Logger.getLogger().v("ANR feature disabled.");
593586
}
594587

595-
// We only collect native crash info for finalize report during initialization process
596-
if (isInitProcess && nativeComponent.hasCrashDataForSession(mostRecentSessionIdToClose)) {
588+
if (nativeComponent.hasCrashDataForSession(mostRecentSessionIdToClose)) {
597589
// We only finalize the current session if it's a Java crash, so only finalize native crash
598590
// data when we aren't including current.
599591
finalizePreviousNativeSession(mostRecentSessionIdToClose);

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -354,16 +354,12 @@ private boolean onReportSendComplete(@NonNull Task<CrashlyticsReportWithSessionI
354354
CrashlyticsReportWithSessionId report = task.getResult();
355355
Logger.getLogger()
356356
.d("Crashlytics report successfully enqueued to DataTransport: " + report.getSessionId());
357-
crashlyticsWorkers.diskWrite.submit(
358-
() -> {
359-
File reportFile = report.getReportFile();
360-
if (reportFile.delete()) {
361-
Logger.getLogger().d("Deleted report file: " + reportFile.getPath());
362-
} else {
363-
Logger.getLogger()
364-
.w("Crashlytics could not delete report file: " + reportFile.getPath());
365-
}
366-
});
357+
File reportFile = report.getReportFile();
358+
if (reportFile.delete()) {
359+
Logger.getLogger().d("Deleted report file: " + reportFile.getPath());
360+
} else {
361+
Logger.getLogger().w("Crashlytics could not delete report file: " + reportFile.getPath());
362+
}
367363
return true;
368364
}
369365
Logger.getLogger()

firebase-crashlytics/src/test/java/com/google/firebase/crashlytics/internal/common/CrashlyticsControllerRobolectricTest.java

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import com.google.firebase.crashlytics.internal.settings.SettingsProvider;
4444
import com.google.firebase.inject.Deferred;
4545
import java.util.ArrayList;
46-
import java.util.Arrays;
4746
import java.util.Collections;
4847
import java.util.List;
4948
import java.util.TreeSet;
@@ -66,8 +65,6 @@ public class CrashlyticsControllerRobolectricTest {
6665
@Mock private SessionReportingCoordinator mockSessionReportingCoordinator;
6766
@Mock private DataCollectionArbiter mockDataCollectionArbiter;
6867

69-
private CrashlyticsWorkers crashlyticsWorkers;
70-
7168
private static final CrashlyticsNativeComponent MISSING_NATIVE_COMPONENT =
7269
new CrashlyticsNativeComponentDeferredProxy(
7370
new Deferred<CrashlyticsNativeComponent>() {
@@ -83,24 +80,17 @@ public void setUp() {
8380
MockitoAnnotations.openMocks(this);
8481
testContext = getApplicationContext();
8582
testFileStore = new FileStore(testContext);
86-
crashlyticsWorkers =
87-
new CrashlyticsWorkers(TestOnlyExecutors.background(), TestOnlyExecutors.blocking());
8883
}
8984

9085
@Test
91-
public void testDoCloseSession_enabledAnrs_doesNotPersistsAppExitInfoIfItDoesntExist()
92-
throws Exception {
86+
public void testDoCloseSession_enabledAnrs_doesNotPersistsAppExitInfoIfItDoesntExist() {
9387
final String sessionId = "sessionId";
9488
final CrashlyticsController controller = createController();
9589

9690
when(mockSessionReportingCoordinator.listSortedOpenSessionIds())
9791
.thenReturn(new TreeSet<>(Collections.singletonList(sessionId)));
9892
mockSettingsProvider(true, false);
99-
100-
crashlyticsWorkers.common.submit(() -> controller.doCloseSessions(mockSettingsProvider));
101-
// cannot use await since it check preconditions if blocking main thread
102-
Thread.sleep(10);
103-
93+
controller.doCloseSessions(mockSettingsProvider);
10494
// Since we haven't added any app exit info to the shadow activity manager, there won't exist a
10595
// single app exit info, and so this method won't be called.
10696
verify(mockSessionReportingCoordinator, never())
@@ -109,8 +99,7 @@ public void testDoCloseSession_enabledAnrs_doesNotPersistsAppExitInfoIfItDoesntE
10999
}
110100

111101
@Test
112-
public void testDoCloseSession_enabledAnrs_persistsAppExitInfoIfItExists() throws Exception {
113-
final String sessionIdPrevious = "sessionIdPrevious";
102+
public void testDoCloseSession_enabledAnrs_persistsAppExitInfoIfItExists() {
114103
final String sessionId = "sessionId";
115104
final CrashlyticsController controller = createController();
116105
// Adds multiple AppExitInfos to confirm that Crashlytics loops through
@@ -120,30 +109,26 @@ public void testDoCloseSession_enabledAnrs_persistsAppExitInfoIfItExists() throw
120109
List<ApplicationExitInfo> testApplicationExitInfo = getApplicationExitInfoList();
121110

122111
when(mockSessionReportingCoordinator.listSortedOpenSessionIds())
123-
.thenReturn(new TreeSet<>(Arrays.asList(sessionId, sessionIdPrevious)));
112+
.thenReturn(new TreeSet<>(Collections.singletonList(sessionId)));
124113
mockSettingsProvider(true, false);
125-
crashlyticsWorkers.common.submit(() -> controller.finalizeSessions(mockSettingsProvider));
126-
// cannot use await since it check preconditions if blocking main thread
127-
Thread.sleep(100);
114+
controller.doCloseSessions(mockSettingsProvider);
128115
verify(mockSessionReportingCoordinator)
129116
.persistRelevantAppExitInfoEvent(
130-
eq(sessionIdPrevious),
117+
eq(sessionId),
131118
eq(testApplicationExitInfo),
132119
any(LogFileManager.class),
133120
any(UserMetadata.class));
134121
}
135122

136123
@Test
137-
public void testDoCloseSession_disabledAnrs_doesNotPersistsAppExitInfo() throws Exception {
124+
public void testDoCloseSession_disabledAnrs_doesNotPersistsAppExitInfo() {
138125
final String sessionId = "sessionId";
139126
final CrashlyticsController controller = createController();
140127

141128
when(mockSessionReportingCoordinator.listSortedOpenSessionIds())
142129
.thenReturn(new TreeSet<>(Collections.singletonList(sessionId)));
143130
mockSettingsProvider(false, false);
144-
crashlyticsWorkers.common.submit(() -> controller.doCloseSessions(mockSettingsProvider));
145-
// cannot use await since it check preconditions if blocking main thread
146-
Thread.sleep(10);
131+
controller.doCloseSessions(mockSettingsProvider);
147132
verify(mockSessionReportingCoordinator, never())
148133
.persistRelevantAppExitInfoEvent(
149134
eq(sessionId), any(), any(LogFileManager.class), any(UserMetadata.class));
@@ -192,7 +177,7 @@ private CrashlyticsController createController() {
192177
MISSING_NATIVE_COMPONENT,
193178
mock(AnalyticsEventLogger.class),
194179
mock(CrashlyticsAppQualitySessionsSubscriber.class),
195-
crashlyticsWorkers);
180+
new CrashlyticsWorkers(TestOnlyExecutors.background(), TestOnlyExecutors.blocking()));
196181
controller.openSession(SESSION_ID);
197182
return controller;
198183
}

0 commit comments

Comments
 (0)