summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chrome_browser_main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chrome_browser_main.cc')
-rw-r--r--chrome/browser/chrome_browser_main.cc78
1 files changed, 42 insertions, 36 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index d073763a..7c3f5d4 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -692,30 +692,19 @@ ChromeBrowserMainParts::ChromeBrowserMainParts(
ChromeBrowserMainParts::~ChromeBrowserMainParts() {
}
-void ChromeBrowserMainParts::SetupMetricsAndFieldTrials(
- MetricsService* metrics,
+// This will be called after the command-line has been mutated by about:flags
+MetricsService* ChromeBrowserMainParts::SetupMetricsAndFieldTrials(
const CommandLine& parsed_command_line,
PrefService* local_state) {
- if (parsed_command_line.HasSwitch(switches::kMetricsRecordingOnly) ||
- parsed_command_line.HasSwitch(switches::kEnableBenchmarking)) {
- // If we're testing then we don't care what the user preference is, we turn
- // on recording, but not reporting, otherwise tests fail.
- metrics->StartRecordingOnly();
- } else {
- // If the user permits metrics reporting with the checkbox in the
- // prefs, we turn on recording. We disable metrics completely for
- // non-official builds.
-#if defined(GOOGLE_CHROME_BUILD)
-#if defined(OS_CHROMEOS)
- bool enabled =
- chromeos::UserCrosSettingsProvider::cached_reporting_enabled();
-#else
- bool enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
-#endif // #if defined(OS_CHROMEOS)
- if (enabled)
- metrics->Start();
-#endif // defined(GOOGLE_CHROME_BUILD)
- }
+ // Must initialize metrics after labs have been converted into switches,
+ // but before field trials are set up (so that client ID is available for
+ // one-time randomized field trials).
+ MetricsService* metrics = InitializeMetrics(parsed_command_line, local_state);
+
+ // Initialize FieldTrialList to support FieldTrials that use one-time
+ // randomization. The client ID will be empty if the user has not opted
+ // to send metrics.
+ field_trial_list_.reset(new base::FieldTrialList(metrics->GetClientId()));
SetupFieldTrials(metrics->recording_active(),
local_state->IsManagedPreference(
@@ -726,6 +715,8 @@ void ChromeBrowserMainParts::SetupMetricsAndFieldTrials(
// scope. Even though NewRunnableMethod does AddRef and Release, the object
// will not be deleted after the Task is executed.
field_trial_synchronizer_ = new FieldTrialSynchronizer();
+
+ return metrics;
}
// This is an A/B test for the maximum number of persistent connections per
@@ -1097,9 +1088,11 @@ void ChromeBrowserMainParts::DefaultAppsFieldTrial() {
}
}
+// ChromeBrowserMainParts: |SetupMetricsAndFieldTrials()| related --------------
+
// Initializes the metrics service with the configuration for this process,
// returning the created service (guaranteed non-NULL).
-MetricsService* ChromeBrowserMainParts::CreateMetrics(
+MetricsService* ChromeBrowserMainParts::InitializeMetrics(
const CommandLine& parsed_command_line,
const PrefService* local_state) {
#if defined(OS_WIN)
@@ -1109,15 +1102,29 @@ MetricsService* ChromeBrowserMainParts::CreateMetrics(
MetricsLog::set_version_extension("-64");
#endif // defined(OS_WIN)
- // Must initialize metrics after labs have been converted into switches,
- // but before field trials are set up (so that client ID is available for
- // one-time randomized field trials).
MetricsService* metrics = g_browser_process->metrics_service();
- // Initialize FieldTrialList to support FieldTrials that use one-time
- // randomization. The client ID will be empty if the user has not opted
- // to send metrics.
- field_trial_list_.reset(new base::FieldTrialList(metrics->GetClientId()));
+ if (parsed_command_line.HasSwitch(switches::kMetricsRecordingOnly) ||
+ parsed_command_line.HasSwitch(switches::kEnableBenchmarking)) {
+ // If we're testing then we don't care what the user preference is, we turn
+ // on recording, but not reporting, otherwise tests fail.
+ metrics->StartRecordingOnly();
+ return metrics;
+ }
+
+ // If the user permits metrics reporting with the checkbox in the
+ // prefs, we turn on recording. We disable metrics completely for
+ // non-official builds.
+#if defined(GOOGLE_CHROME_BUILD)
+#if defined(OS_CHROMEOS)
+ bool enabled = chromeos::UserCrosSettingsProvider::cached_reporting_enabled();
+#else
+ bool enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
+#endif // #if defined(OS_CHROMEOS)
+ if (enabled) {
+ metrics->Start();
+ }
+#endif // defined(GOOGLE_CHROME_BUILD)
return metrics;
}
@@ -1394,6 +1401,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
// will not be deleted after the Task is executed.
histogram_synchronizer_ = new HistogramSynchronizer();
+ // Now the command line has been mutated based on about:flags, we can
+ // set up metrics and initialize field trials.
+ MetricsService* metrics =
+ SetupMetricsAndFieldTrials(parsed_command_line(), local_state);
+
// Now that all preferences have been registered, set the install date
// for the uninstall metrics if this is our first run. This only actually
// gets used if the user has metrics reporting enabled at uninstall time.
@@ -1414,14 +1426,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
SecKeychainAddCallback(&KeychainCallback, 0, NULL);
#endif
- // Now the command line has been mutated based on about:flags, we can
- // set up metrics and initialize field trials. This needs the threads started.
- MetricsService* metrics = CreateMetrics(parsed_command_line(), local_state);
-
CreateChildThreads(browser_process_.get());
- SetupMetricsAndFieldTrials(metrics, parsed_command_line(), local_state);
-
#if defined(OS_CHROMEOS)
// Now that the file thread exists we can record our stats.
chromeos::BootTimesLoader::Get()->RecordChromeMainStats();