| Index: chrome/browser/chrome_browser_main.cc
|
| ===================================================================
|
| --- chrome/browser/chrome_browser_main.cc (revision 117220)
|
| +++ chrome/browser/chrome_browser_main.cc (working copy)
|
| @@ -582,7 +582,6 @@
|
| notify_result_(ProcessSingleton::PROCESS_NONE),
|
| is_first_run_(false),
|
| first_run_ui_bypass_(false),
|
| - metrics_(NULL),
|
| local_state_(NULL),
|
| restart_last_session_(false) {
|
| // If we're running tests (ui_task is non-null).
|
| @@ -597,21 +596,25 @@
|
| }
|
|
|
| // This will be called after the command-line has been mutated by about:flags
|
| -MetricsService* ChromeBrowserMainParts::SetupMetricsAndFieldTrials(
|
| - PrefService* local_state) {
|
| +void ChromeBrowserMainParts::SetupMetricsAndFieldTrials() {
|
| // 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);
|
| +#if defined(OS_WIN)
|
| + if (parsed_command_line_.HasSwitch(switches::kChromeFrame))
|
| + MetricsLog::set_version_extension("-F");
|
| +#elif defined(ARCH_CPU_64_BITS)
|
| + MetricsLog::set_version_extension("-64");
|
| +#endif // defined(OS_WIN)
|
|
|
| // 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.
|
| + MetricsService* metrics = browser_process_->metrics_service();
|
| field_trial_list_.reset(new base::FieldTrialList(metrics->GetClientId()));
|
|
|
| SetupFieldTrials(metrics->recording_active(),
|
| - local_state->IsManagedPreference(
|
| + local_state_->IsManagedPreference(
|
| prefs::kMaxConnectionsPerProxy));
|
|
|
| // Initialize FieldTrialSynchronizer system. This is a singleton and is used
|
| @@ -619,8 +622,6 @@
|
| // Even though base::Bind 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
|
| @@ -1005,26 +1006,35 @@
|
|
|
| // ChromeBrowserMainParts: |SetupMetricsAndFieldTrials()| related --------------
|
|
|
| -// Initializes the metrics service with the configuration for this process,
|
| -// returning the created service (guaranteed non-NULL).
|
| -MetricsService* ChromeBrowserMainParts::InitializeMetrics(
|
| - const CommandLine& parsed_command_line,
|
| - const PrefService* local_state) {
|
| -#if defined(OS_WIN)
|
| - if (parsed_command_line.HasSwitch(switches::kChromeFrame))
|
| - MetricsLog::set_version_extension("-F");
|
| -#elif defined(ARCH_CPU_64_BITS)
|
| - MetricsLog::set_version_extension("-64");
|
| -#endif // defined(OS_WIN)
|
| +void ChromeBrowserMainParts::SetupFieldTrials(bool metrics_recording_enabled,
|
| + bool proxy_policy_is_set) {
|
| + // Note: make sure to call ConnectionFieldTrial() before
|
| + // ProxyConnectionsFieldTrial().
|
| + ConnectionFieldTrial();
|
| + SocketTimeoutFieldTrial();
|
| + // If a policy is defining the number of active connections this field test
|
| + // shoud not be performed.
|
| + if (!proxy_policy_is_set)
|
| + ProxyConnectionsFieldTrial();
|
| + prerender::ConfigurePrefetchAndPrerender(parsed_command_line());
|
| + InstantFieldTrial::Activate();
|
| + SpdyFieldTrial();
|
| + ConnectBackupJobsFieldTrial();
|
| + WarmConnectionFieldTrial();
|
| + PredictorFieldTrial();
|
| + DefaultAppsFieldTrial();
|
| + AutoLaunchChromeFieldTrial();
|
| + sync_promo_trial::Activate();
|
| +}
|
|
|
| +void ChromeBrowserMainParts::StartMetricsRecording() {
|
| MetricsService* metrics = g_browser_process->metrics_service();
|
| -
|
| - if (parsed_command_line.HasSwitch(switches::kMetricsRecordingOnly) ||
|
| - parsed_command_line.HasSwitch(switches::kEnableBenchmarking)) {
|
| + 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;
|
| + return;
|
| }
|
|
|
| // If the user permits metrics reporting with the checkbox in the
|
| @@ -1036,37 +1046,14 @@
|
| chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
|
| &enabled);
|
| #else
|
| - bool enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
|
| + bool enabled = local_state_->GetBoolean(prefs::kMetricsReportingEnabled);
|
| #endif // #if defined(OS_CHROMEOS)
|
| if (enabled) {
|
| metrics->Start();
|
| }
|
| #endif // defined(GOOGLE_CHROME_BUILD)
|
| -
|
| - return metrics;
|
| }
|
|
|
| -void ChromeBrowserMainParts::SetupFieldTrials(bool metrics_recording_enabled,
|
| - bool proxy_policy_is_set) {
|
| - // Note: make sure to call ConnectionFieldTrial() before
|
| - // ProxyConnectionsFieldTrial().
|
| - ConnectionFieldTrial();
|
| - SocketTimeoutFieldTrial();
|
| - // If a policy is defining the number of active connections this field test
|
| - // shoud not be performed.
|
| - if (!proxy_policy_is_set)
|
| - ProxyConnectionsFieldTrial();
|
| - prerender::ConfigurePrefetchAndPrerender(parsed_command_line());
|
| - InstantFieldTrial::Activate();
|
| - SpdyFieldTrial();
|
| - ConnectBackupJobsFieldTrial();
|
| - WarmConnectionFieldTrial();
|
| - PredictorFieldTrial();
|
| - DefaultAppsFieldTrial();
|
| - AutoLaunchChromeFieldTrial();
|
| - sync_promo_trial::Activate();
|
| -}
|
| -
|
| // -----------------------------------------------------------------------------
|
| // TODO(viettrungluu): move more/rest of BrowserMain() into BrowserMainParts.
|
|
|
| @@ -1309,6 +1296,11 @@
|
| SecKeychainAddCallback(&KeychainCallback, 0, NULL);
|
| #endif
|
|
|
| + // Now the command line has been mutated based on about:flags, we can setup
|
| + // metrics and initialize field trials. The field trials are needed by
|
| + // IOThread's initialization which happens in BrowserProcess:PreCreateThreads.
|
| + SetupMetricsAndFieldTrials();
|
| +
|
| // ChromeOS needs ResourceBundle::InitSharedInstance to be called before this.
|
| browser_process_->PreCreateThreads();
|
|
|
| @@ -1354,10 +1346,8 @@
|
| }
|
|
|
| int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
|
| - // Now the command line has been mutated based on about:flags,
|
| - // and the file thread has been started, we can set up metrics
|
| - // and initialize field trials.
|
| - metrics_ = SetupMetricsAndFieldTrials(local_state_);
|
| + // Now that the file thread has been started, start recording.
|
| + StartMetricsRecording();
|
|
|
| #if defined(USE_LINUX_BREAKPAD)
|
| // Needs to be called after we have chrome::DIR_USER_DATA and
|
| @@ -1673,7 +1663,7 @@
|
| #endif
|
|
|
| HandleTestParameters(parsed_command_line());
|
| - RecordBreakpadStatusUMA(metrics_);
|
| + RecordBreakpadStatusUMA(browser_process_->metrics_service());
|
| about_flags::RecordUMAStatistics(local_state_);
|
| LanguageUsageMetrics::RecordAcceptLanguages(
|
| profile_->GetPrefs()->GetString(prefs::kAcceptLanguages));
|
|
|