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 = [
"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/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/LogcatExtractionRunnable.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;
import org.chromium.base.StreamUtil;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.settings.privacy.PrivacyPreferencesManager;
import org.chromium.components.background_task_scheduler.TaskIds;
import org.chromium.components.minidump_uploader.CrashFileManager;
......@@ -120,7 +119,7 @@ public class MinidumpUploadService extends IntentService {
/**
* 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);
for (String type : TYPES) {
for (int success = pref.getCrashSuccessUploadCount(type); success > 0; success--) {
......@@ -134,8 +133,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(type)) sDidBrowserCrashRecently.set(true);
}
pref.setCrashSuccessUploadCount(type, 0);
pref.setCrashFailureUploadCount(type, 0);
pref.resetCrashUploadCounts(type);
}
}
......@@ -286,7 +284,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(process_type)) {
sDidBrowserCrashRecently.set(true);
}
ChromePreferenceManager.getInstance().incrementCrashSuccessUploadCount(process_type);
CrashUploadCountStore.getInstance().incrementCrashSuccessUploadCount(process_type);
}
/**
......@@ -302,7 +300,7 @@ public class MinidumpUploadService extends IntentService {
if (ProcessType.BROWSER.equals(process_type)) {
sDidBrowserCrashRecently.set(true);
}
ChromePreferenceManager.getInstance().incrementCrashFailureUploadCount(process_type);
CrashUploadCountStore.getInstance().incrementCrashFailureUploadCount(process_type);
}
/**
......
......@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.banners.AppBannerManager;
import org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProvider;
import org.chromium.chrome.browser.contacts_picker.ContactsPickerDialog;
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.MinidumpUploadService;
import org.chromium.chrome.browser.download.DownloadController;
......@@ -67,7 +68,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
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.rlz.RevenueStats;
import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
......@@ -524,7 +524,7 @@ public class ProcessInitializationHandler {
// possible. Instead, metrics are temporarily written to prefs; export those prefs
// to UMA metrics here.
MinidumpUploadService.storeBreakpadUploadStatsInUma(
ChromePreferenceManager.getInstance());
CrashUploadCountStore.getInstance());
// Likewise, this is a good time to process and clean up any pending or stale crash
// reports left behind by previous runs.
......
......@@ -4,8 +4,6 @@
package org.chromium.chrome.browser.preferences;
import org.chromium.chrome.browser.crash.MinidumpUploadService.ProcessType;
import java.util.HashSet;
import java.util.Set;
......@@ -39,68 +37,6 @@ public class ChromePreferenceManager {
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
* 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