Commit 0b40c851 authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Create CrashUploadCountStore and move crash-specific logic from prefs.

This is a step to move feature-specific logic out of
ChromePreferencesManager and delete it.

Bug: 1022102
Change-Id: I8b0215e7cd15d5da6e4a13654bff3259159d11f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1953928
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarMohamed Heikal <mheikal@chromium.org>
Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#723069}
parent f68a9b48
...@@ -357,6 +357,7 @@ chrome_java_sources = [ ...@@ -357,6 +357,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/crash/ApplicationStatusTracker.java", "java/src/org/chromium/chrome/browser/crash/ApplicationStatusTracker.java",
"java/src/org/chromium/chrome/browser/crash/ChromeMinidumpUploadJobService.java", "java/src/org/chromium/chrome/browser/crash/ChromeMinidumpUploadJobService.java",
"java/src/org/chromium/chrome/browser/crash/ChromeMinidumpUploaderDelegate.java", "java/src/org/chromium/chrome/browser/crash/ChromeMinidumpUploaderDelegate.java",
"java/src/org/chromium/chrome/browser/crash/CrashUploadCountStore.java",
"java/src/org/chromium/chrome/browser/crash/FirebaseConfig.java", "java/src/org/chromium/chrome/browser/crash/FirebaseConfig.java",
"java/src/org/chromium/chrome/browser/crash/LogcatExtractionRunnable.java", "java/src/org/chromium/chrome/browser/crash/LogcatExtractionRunnable.java",
"java/src/org/chromium/chrome/browser/crash/MinidumpLogcatPrepender.java", "java/src/org/chromium/chrome/browser/crash/MinidumpLogcatPrepender.java",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.crash;
import org.chromium.chrome.browser.crash.MinidumpUploadService.ProcessType;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
/**
* Records number of crashes uploaded in SharedPreferences.
*
* These numbers may be recorded even when running in background and the main Chrome Activity does
* not exist, so they are persisted until the next time it runs.
*/
public class CrashUploadCountStore {
private static final CrashUploadCountStore INSTANCE = new CrashUploadCountStore();
private final SharedPreferencesManager mManager;
private CrashUploadCountStore() {
mManager = SharedPreferencesManager.getInstance();
}
/**
* @return the CrashUploadCountStore singleton
*/
public static CrashUploadCountStore getInstance() {
return INSTANCE;
}
/**
* @return Number of times of successful crash upload.
*/
int getCrashSuccessUploadCount(@ProcessType String process) {
return mManager.readInt(successUploadKey(process));
}
void incrementCrashSuccessUploadCount(@ProcessType String process) {
mManager.incrementInt(successUploadKey(process));
}
private String successUploadKey(@ProcessType String process) {
switch (process) {
case ProcessType.BROWSER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_BROWSER;
case ProcessType.RENDERER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_RENDERER;
case ProcessType.GPU:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_GPU;
case ProcessType.OTHER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_OTHER;
default:
throw new IllegalArgumentException("Process type unknown: " + process);
}
}
/**
* @return Number of times of failure crash upload after reaching the max number of tries.
*/
int getCrashFailureUploadCount(@ProcessType String process) {
return mManager.readInt(failureUploadKey(process));
}
void incrementCrashFailureUploadCount(@ProcessType String process) {
mManager.incrementInt(failureUploadKey(process));
}
private String failureUploadKey(@ProcessType String process) {
switch (process) {
case ProcessType.BROWSER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_BROWSER;
case ProcessType.RENDERER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_RENDERER;
case ProcessType.GPU:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_GPU;
case ProcessType.OTHER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_OTHER;
default:
throw new IllegalArgumentException("Process type unknown: " + process);
}
}
void resetCrashUploadCounts(@ProcessType String process) {
mManager.writeInt(successUploadKey(process), 0);
mManager.writeInt(failureUploadKey(process), 0);
}
}
...@@ -20,7 +20,6 @@ import org.chromium.base.Log; ...@@ -20,7 +20,6 @@ import org.chromium.base.Log;
import org.chromium.base.StreamUtil; import org.chromium.base.StreamUtil;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.settings.privacy.PrivacyPreferencesManager; import org.chromium.chrome.browser.settings.privacy.PrivacyPreferencesManager;
import org.chromium.components.background_task_scheduler.TaskIds; import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.minidump_uploader.CrashFileManager; import org.chromium.components.minidump_uploader.CrashFileManager;
...@@ -120,7 +119,7 @@ public class MinidumpUploadService extends IntentService { ...@@ -120,7 +119,7 @@ public class MinidumpUploadService extends IntentService {
/** /**
* Stores the successes and failures from uploading crash to UMA, * Stores the successes and failures from uploading crash to UMA,
*/ */
public static void storeBreakpadUploadStatsInUma(ChromePreferenceManager pref) { public static void storeBreakpadUploadStatsInUma(CrashUploadCountStore pref) {
sBrowserCrashMetricsInitialized.set(true); sBrowserCrashMetricsInitialized.set(true);
for (String type : TYPES) { for (String type : TYPES) {
for (int success = pref.getCrashSuccessUploadCount(type); success > 0; success--) { for (int success = pref.getCrashSuccessUploadCount(type); success > 0; success--) {
...@@ -134,8 +133,7 @@ public class MinidumpUploadService extends IntentService { ...@@ -134,8 +133,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(type)) sDidBrowserCrashRecently.set(true); if (ProcessType.BROWSER.equals(type)) sDidBrowserCrashRecently.set(true);
} }
pref.setCrashSuccessUploadCount(type, 0); pref.resetCrashUploadCounts(type);
pref.setCrashFailureUploadCount(type, 0);
} }
} }
...@@ -286,7 +284,7 @@ public class MinidumpUploadService extends IntentService { ...@@ -286,7 +284,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(process_type)) { if (ProcessType.BROWSER.equals(process_type)) {
sDidBrowserCrashRecently.set(true); sDidBrowserCrashRecently.set(true);
} }
ChromePreferenceManager.getInstance().incrementCrashSuccessUploadCount(process_type); CrashUploadCountStore.getInstance().incrementCrashSuccessUploadCount(process_type);
} }
/** /**
...@@ -302,7 +300,7 @@ public class MinidumpUploadService extends IntentService { ...@@ -302,7 +300,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(process_type)) { if (ProcessType.BROWSER.equals(process_type)) {
sDidBrowserCrashRecently.set(true); sDidBrowserCrashRecently.set(true);
} }
ChromePreferenceManager.getInstance().incrementCrashFailureUploadCount(process_type); CrashUploadCountStore.getInstance().incrementCrashFailureUploadCount(process_type);
} }
/** /**
......
...@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.banners.AppBannerManager; ...@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.banners.AppBannerManager;
import org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProvider; import org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProvider;
import org.chromium.chrome.browser.contacts_picker.ContactsPickerDialog; import org.chromium.chrome.browser.contacts_picker.ContactsPickerDialog;
import org.chromium.chrome.browser.content_capture.ContentCaptureHistoryDeletionObserver; import org.chromium.chrome.browser.content_capture.ContentCaptureHistoryDeletionObserver;
import org.chromium.chrome.browser.crash.CrashUploadCountStore;
import org.chromium.chrome.browser.crash.LogcatExtractionRunnable; import org.chromium.chrome.browser.crash.LogcatExtractionRunnable;
import org.chromium.chrome.browser.crash.MinidumpUploadService; import org.chromium.chrome.browser.crash.MinidumpUploadService;
import org.chromium.chrome.browser.download.DownloadController; import org.chromium.chrome.browser.download.DownloadController;
...@@ -67,7 +68,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage; ...@@ -67,7 +68,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.partnercustomizations.HomepageManager; import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.photo_picker.PhotoPickerDialog; import org.chromium.chrome.browser.photo_picker.PhotoPickerDialog;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.profiles.ProfileManagerUtils; import org.chromium.chrome.browser.profiles.ProfileManagerUtils;
import org.chromium.chrome.browser.rlz.RevenueStats; import org.chromium.chrome.browser.rlz.RevenueStats;
import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider; import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
...@@ -524,7 +524,7 @@ public class ProcessInitializationHandler { ...@@ -524,7 +524,7 @@ public class ProcessInitializationHandler {
// possible. Instead, metrics are temporarily written to prefs; export those prefs // possible. Instead, metrics are temporarily written to prefs; export those prefs
// to UMA metrics here. // to UMA metrics here.
MinidumpUploadService.storeBreakpadUploadStatsInUma( MinidumpUploadService.storeBreakpadUploadStatsInUma(
ChromePreferenceManager.getInstance()); CrashUploadCountStore.getInstance());
// Likewise, this is a good time to process and clean up any pending or stale crash // Likewise, this is a good time to process and clean up any pending or stale crash
// reports left behind by previous runs. // reports left behind by previous runs.
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
package org.chromium.chrome.browser.preferences; package org.chromium.chrome.browser.preferences;
import org.chromium.chrome.browser.crash.MinidumpUploadService.ProcessType;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
...@@ -39,68 +37,6 @@ public class ChromePreferenceManager { ...@@ -39,68 +37,6 @@ public class ChromePreferenceManager {
return LazyHolder.INSTANCE; return LazyHolder.INSTANCE;
} }
/**
* @return Number of times of successful crash upload.
*/
public int getCrashSuccessUploadCount(@ProcessType String process) {
// Convention to keep all the key in preference lower case.
return mManager.readInt(successUploadKey(process));
}
public void setCrashSuccessUploadCount(@ProcessType String process, int count) {
// Convention to keep all the key in preference lower case.
mManager.writeInt(successUploadKey(process), count);
}
public void incrementCrashSuccessUploadCount(@ProcessType String process) {
setCrashSuccessUploadCount(process, getCrashSuccessUploadCount(process) + 1);
}
private String successUploadKey(@ProcessType String process) {
switch (process) {
case ProcessType.BROWSER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_BROWSER;
case ProcessType.RENDERER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_RENDERER;
case ProcessType.GPU:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_GPU;
case ProcessType.OTHER:
return ChromePreferenceKeys.CRASH_UPLOAD_SUCCESS_OTHER;
default:
throw new IllegalArgumentException("Process type unknown: " + process);
}
}
/**
* @return Number of times of failure crash upload after reaching the max number of tries.
*/
public int getCrashFailureUploadCount(@ProcessType String process) {
return mManager.readInt(failureUploadKey(process));
}
public void setCrashFailureUploadCount(@ProcessType String process, int count) {
mManager.writeInt(failureUploadKey(process), count);
}
public void incrementCrashFailureUploadCount(@ProcessType String process) {
setCrashFailureUploadCount(process, getCrashFailureUploadCount(process) + 1);
}
private String failureUploadKey(@ProcessType String process) {
switch (process) {
case ProcessType.BROWSER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_BROWSER;
case ProcessType.RENDERER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_RENDERER;
case ProcessType.GPU:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_GPU;
case ProcessType.OTHER:
return ChromePreferenceKeys.CRASH_UPLOAD_FAILURE_OTHER;
default:
throw new IllegalArgumentException("Process type unknown: " + process);
}
}
/** /**
* Returns Chrome major version number when signin promo was last shown, or 0 if version number * Returns Chrome major version number when signin promo was last shown, or 0 if version number
* isn't known. * isn't known.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment