Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Side by Side Diff: chrome/browser/browser_main.cc

Issue 6931048: Revert 84197 - Add one-time randomization support for FieldTrial, and the ability to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/browser_main.h ('k') | chrome/browser/metrics/metrics_service.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browser_main.h" 5 #include "chrome/browser/browser_main.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 net::SSLConfigService::EnableDNSCertProvenanceChecking(); 236 net::SSLConfigService::EnableDNSCertProvenanceChecking();
237 } 237 }
238 238
239 if (parsed_command_line().HasSwitch(switches::kEnableTcpFastOpen)) 239 if (parsed_command_line().HasSwitch(switches::kEnableTcpFastOpen))
240 net::set_tcp_fastopen_enabled(true); 240 net::set_tcp_fastopen_enabled(true);
241 241
242 PostEarlyInitialization(); 242 PostEarlyInitialization();
243 } 243 }
244 244
245 // This will be called after the command-line has been mutated by about:flags 245 // This will be called after the command-line has been mutated by about:flags
246 MetricsService* BrowserMainParts::SetupMetricsAndFieldTrials( 246 void BrowserMainParts::SetupFieldTrials() {
247 const CommandLine& parsed_command_line, 247 // Note: make sure to call ConnectionFieldTrial() before
248 PrefService* local_state) { 248 // ProxyConnectionsFieldTrial().
249 // Must initialize metrics after labs have been converted into switches, 249 ConnectionFieldTrial();
250 // but before field trials are set up (so that client ID is available for 250 SocketTimeoutFieldTrial();
251 // one-time randomized field trials). 251 ProxyConnectionsFieldTrial();
252 MetricsService* metrics = InitializeMetrics(parsed_command_line, local_state); 252 prerender::ConfigurePrefetchAndPrerender(parsed_command_line());
253 253 SpdyFieldTrial();
254 // Initialize FieldTrialList to support FieldTrials that use one-time 254 ConnectBackupJobsFieldTrial();
255 // randomization. The client ID will be empty if the user has not opted 255 SSLFalseStartFieldTrial();
256 // to send metrics.
257 field_trial_list_.reset(new base::FieldTrialList(metrics->GetClientId()));
258
259 SetupFieldTrials();
260
261 // Initialize FieldTrialSynchronizer system. This is a singleton and is used
262 // for posting tasks via NewRunnableMethod. Its deleted when it goes out of
263 // scope. Even though NewRunnableMethod does AddRef and Release, the object
264 // will not be deleted after the Task is executed.
265 field_trial_synchronizer_ = new FieldTrialSynchronizer();
266
267 return metrics;
268 } 256 }
269 257
270 // This is an A/B test for the maximum number of persistent connections per 258 // This is an A/B test for the maximum number of persistent connections per
271 // host. Currently Chrome, Firefox, and IE8 have this value set at 6. Safari 259 // host. Currently Chrome, Firefox, and IE8 have this value set at 6. Safari
272 // uses 4, and Fasterfox (a plugin for Firefox that supposedly configures it to 260 // uses 4, and Fasterfox (a plugin for Firefox that supposedly configures it to
273 // run faster) uses 8. We would like to see how much of an effect this value has 261 // run faster) uses 8. We would like to see how much of an effect this value has
274 // on browsing. Too large a value might cause us to run into SYN flood detection 262 // on browsing. Too large a value might cause us to run into SYN flood detection
275 // mechanisms. 263 // mechanisms.
276 void BrowserMainParts::ConnectionFieldTrial() { 264 void BrowserMainParts::ConnectionFieldTrial() {
277 const base::FieldTrial::Probability kConnectDivisor = 100; 265 const base::FieldTrial::Probability kConnectDivisor = 100;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 void BrowserMainParts::InitializeMainThread() { 528 void BrowserMainParts::InitializeMainThread() {
541 const char* kThreadName = "CrBrowserMain"; 529 const char* kThreadName = "CrBrowserMain";
542 base::PlatformThread::SetName(kThreadName); 530 base::PlatformThread::SetName(kThreadName);
543 main_message_loop().set_thread_name(kThreadName); 531 main_message_loop().set_thread_name(kThreadName);
544 532
545 // Register the main thread by instantiating it, but don't call any methods. 533 // Register the main thread by instantiating it, but don't call any methods.
546 main_thread_.reset(new BrowserThread(BrowserThread::UI, 534 main_thread_.reset(new BrowserThread(BrowserThread::UI,
547 MessageLoop::current())); 535 MessageLoop::current()));
548 } 536 }
549 537
550 // BrowserMainParts: |SetupMetricsAndFieldTrials()| related --------------------
551
552 // Initializes the metrics service with the configuration for this process,
553 // returning the created service (guaranteed non-NULL).
554 MetricsService* BrowserMainParts::InitializeMetrics(
555 const CommandLine& parsed_command_line,
556 const PrefService* local_state) {
557 #if defined(OS_WIN)
558 if (parsed_command_line.HasSwitch(switches::kChromeFrame))
559 MetricsLog::set_version_extension("-F");
560 #elif defined(ARCH_CPU_64_BITS)
561 MetricsLog::set_version_extension("-64");
562 #endif // defined(OS_WIN)
563
564 MetricsService* metrics = g_browser_process->metrics_service();
565
566 if (parsed_command_line.HasSwitch(switches::kMetricsRecordingOnly) ||
567 parsed_command_line.HasSwitch(switches::kEnableBenchmarking)) {
568 // If we're testing then we don't care what the user preference is, we turn
569 // on recording, but not reporting, otherwise tests fail.
570 metrics->StartRecordingOnly();
571 return metrics;
572 }
573
574 // If the user permits metrics reporting with the checkbox in the
575 // prefs, we turn on recording. We disable metrics completely for
576 // non-official builds.
577 #if defined(GOOGLE_CHROME_BUILD)
578 #if defined(OS_CHROMEOS)
579 bool enabled = chromeos::MetricsCrosSettingsProvider::GetMetricsStatus();
580 #else
581 bool enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
582 #endif // #if defined(OS_CHROMEOS)
583 if (enabled) {
584 metrics->Start();
585 chrome_browser_net_websocket_experiment::
586 WebSocketExperimentRunner::Start();
587 }
588 #endif // defined(GOOGLE_CHROME_BUILD)
589
590 return metrics;
591 }
592
593 void BrowserMainParts::SetupFieldTrials() {
594 // Note: make sure to call ConnectionFieldTrial() before
595 // ProxyConnectionsFieldTrial().
596 ConnectionFieldTrial();
597 SocketTimeoutFieldTrial();
598 ProxyConnectionsFieldTrial();
599 prerender::ConfigurePrefetchAndPrerender(parsed_command_line());
600 SpdyFieldTrial();
601 ConnectBackupJobsFieldTrial();
602 SSLFalseStartFieldTrial();
603 }
604
605 // ----------------------------------------------------------------------------- 538 // -----------------------------------------------------------------------------
606 // TODO(viettrungluu): move more/rest of BrowserMain() into above structure 539 // TODO(viettrungluu): move more/rest of BrowserMain() into above structure
607 540
608 namespace { 541 namespace {
609 542
610 // This function provides some ways to test crash and assertion handling 543 // This function provides some ways to test crash and assertion handling
611 // behavior of the program. 544 // behavior of the program.
612 void HandleTestParameters(const CommandLine& command_line) { 545 void HandleTestParameters(const CommandLine& command_line) {
613 // This parameter causes an assertion. 546 // This parameter causes an assertion.
614 if (command_line.HasSwitch(switches::kBrowserAssertTest)) { 547 if (command_line.HasSwitch(switches::kBrowserAssertTest)) {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 // Precreate the desktop and window station used by the renderers. 756 // Precreate the desktop and window station used by the renderers.
824 sandbox::TargetPolicy* policy = broker_services->CreatePolicy(); 757 sandbox::TargetPolicy* policy = broker_services->CreatePolicy();
825 sandbox::ResultCode result = policy->CreateAlternateDesktop(use_winsta); 758 sandbox::ResultCode result = policy->CreateAlternateDesktop(use_winsta);
826 CHECK(sandbox::SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION != result); 759 CHECK(sandbox::SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION != result);
827 policy->Release(); 760 policy->Release();
828 } 761 }
829 } 762 }
830 #endif 763 #endif
831 } 764 }
832 765
766 // Initializes the metrics service with the configuration for this process,
767 // returning the created service (guaranteed non-NULL).
768 MetricsService* InitializeMetrics(const CommandLine& parsed_command_line,
769 const PrefService* local_state) {
770 #if defined(OS_WIN)
771 if (parsed_command_line.HasSwitch(switches::kChromeFrame))
772 MetricsLog::set_version_extension("-F");
773 #elif defined(ARCH_CPU_64_BITS)
774 MetricsLog::set_version_extension("-64");
775 #endif // defined(OS_WIN)
776
777 MetricsService* metrics = g_browser_process->metrics_service();
778
779 if (parsed_command_line.HasSwitch(switches::kMetricsRecordingOnly) ||
780 parsed_command_line.HasSwitch(switches::kEnableBenchmarking)) {
781 // If we're testing then we don't care what the user preference is, we turn
782 // on recording, but not reporting, otherwise tests fail.
783 metrics->StartRecordingOnly();
784 } else {
785 // If the user permits metrics reporting with the checkbox in the
786 // prefs, we turn on recording. We disable metrics completely for
787 // non-official builds.
788 #if defined(GOOGLE_CHROME_BUILD)
789 #if defined(OS_CHROMEOS)
790 bool enabled = chromeos::MetricsCrosSettingsProvider::GetMetricsStatus();
791 #else
792 bool enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
793 #endif // #if defined(OS_CHROMEOS)
794 if (enabled) {
795 metrics->Start();
796 chrome_browser_net_websocket_experiment::
797 WebSocketExperimentRunner::Start();
798 }
799 #endif
800 }
801
802 return metrics;
803 }
804
833 // Initializes the profile, possibly doing some user prompting to pick a 805 // Initializes the profile, possibly doing some user prompting to pick a
834 // fallback profile. Returns the newly created profile, or NULL if startup 806 // fallback profile. Returns the newly created profile, or NULL if startup
835 // should not continue. 807 // should not continue.
836 Profile* CreateProfile(const MainFunctionParams& parameters, 808 Profile* CreateProfile(const MainFunctionParams& parameters,
837 const FilePath& user_data_dir) { 809 const FilePath& user_data_dir) {
838 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 810 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
839 Profile* profile = browser_command_line.HasSwitch(switches::kMultiProfiles) ? 811 Profile* profile = browser_command_line.HasSwitch(switches::kMultiProfiles) ?
840 g_browser_process->profile_manager()->GetLastUsedProfile(user_data_dir) : 812 g_browser_process->profile_manager()->GetLastUsedProfile(user_data_dir) :
841 g_browser_process->profile_manager()->GetDefaultProfile(user_data_dir); 813 g_browser_process->profile_manager()->GetDefaultProfile(user_data_dir);
842 if (profile) 814 if (profile)
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 1320
1349 // Initialize thread watcher system. This is a singleton and is used by 1321 // Initialize thread watcher system. This is a singleton and is used by
1350 // WatchDogThread to keep track of information about threads that are being 1322 // WatchDogThread to keep track of information about threads that are being
1351 // watched. 1323 // watched.
1352 scoped_ptr<ThreadWatcherList> thread_watcher_list(new ThreadWatcherList()); 1324 scoped_ptr<ThreadWatcherList> thread_watcher_list(new ThreadWatcherList());
1353 1325
1354 // Convert active labs into switches. Modifies the current command line. 1326 // Convert active labs into switches. Modifies the current command line.
1355 about_flags::ConvertFlagsToSwitches(local_state, 1327 about_flags::ConvertFlagsToSwitches(local_state,
1356 CommandLine::ForCurrentProcess()); 1328 CommandLine::ForCurrentProcess());
1357 1329
1358 // Now the command line has been mutated based on about:flags, we can 1330 // Now the command line has been mutated based on about:flags, we can run some
1359 // set up metrics and initialize field trials. 1331 // field trials
1360 MetricsService* metrics = parts->SetupMetricsAndFieldTrials( 1332 parts->SetupFieldTrials();
1361 parsed_command_line, local_state); 1333
1334 // Initialize FieldTrialSynchronizer system. This is a singleton and is used
1335 // for posting tasks via NewRunnableMethod. Its deleted when it goes out of
1336 // scope. Even though NewRunnableMethod does AddRef and Release, the object
1337 // will not be deleted after the Task is executed.
1338 scoped_refptr<FieldTrialSynchronizer> field_trial_synchronizer(
1339 new FieldTrialSynchronizer());
1362 1340
1363 // Now that all preferences have been registered, set the install date 1341 // Now that all preferences have been registered, set the install date
1364 // for the uninstall metrics if this is our first run. This only actually 1342 // for the uninstall metrics if this is our first run. This only actually
1365 // gets used if the user has metrics reporting enabled at uninstall time. 1343 // gets used if the user has metrics reporting enabled at uninstall time.
1366 int64 install_date = 1344 int64 install_date =
1367 local_state->GetInt64(prefs::kUninstallMetricsInstallDate); 1345 local_state->GetInt64(prefs::kUninstallMetricsInstallDate);
1368 if (install_date == 0) { 1346 if (install_date == 0) {
1369 local_state->SetInt64(prefs::kUninstallMetricsInstallDate, 1347 local_state->SetInt64(prefs::kUninstallMetricsInstallDate,
1370 base::Time::Now().ToTimeT()); 1348 base::Time::Now().ToTimeT());
1371 } 1349 }
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
1695 sdch_trial->AppendGroup("global_disable_sdch", 1673 sdch_trial->AppendGroup("global_disable_sdch",
1696 kSDCH_DISABLE_PROBABILITY); 1674 kSDCH_DISABLE_PROBABILITY);
1697 if (sdch_enabled != sdch_trial->group()) 1675 if (sdch_enabled != sdch_trial->group())
1698 sdch_supported_domain = "never_enabled_sdch_for_any_domain"; 1676 sdch_supported_domain = "never_enabled_sdch_for_any_domain";
1699 } 1677 }
1700 1678
1701 net::SdchManager sdch_manager; // Singleton database. 1679 net::SdchManager sdch_manager; // Singleton database.
1702 sdch_manager.set_sdch_fetcher(new SdchDictionaryFetcher); 1680 sdch_manager.set_sdch_fetcher(new SdchDictionaryFetcher);
1703 sdch_manager.EnableSdchSupport(sdch_supported_domain); 1681 sdch_manager.EnableSdchSupport(sdch_supported_domain);
1704 1682
1683 MetricsService* metrics = InitializeMetrics(parsed_command_line, local_state);
1705 InstallJankometer(parsed_command_line); 1684 InstallJankometer(parsed_command_line);
1706 1685
1707 #if defined(OS_WIN) && !defined(GOOGLE_CHROME_BUILD) 1686 #if defined(OS_WIN) && !defined(GOOGLE_CHROME_BUILD)
1708 if (parsed_command_line.HasSwitch(switches::kDebugPrint)) { 1687 if (parsed_command_line.HasSwitch(switches::kDebugPrint)) {
1709 FilePath path = 1688 FilePath path =
1710 parsed_command_line.GetSwitchValuePath(switches::kDebugPrint); 1689 parsed_command_line.GetSwitchValuePath(switches::kDebugPrint);
1711 printing::PrintedDocument::set_debug_dump_path(path); 1690 printing::PrintedDocument::set_debug_dump_path(path);
1712 } 1691 }
1713 #endif 1692 #endif
1714 1693
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1924 #if defined(OS_CHROMEOS) 1903 #if defined(OS_CHROMEOS)
1925 // To be precise, logout (browser shutdown) is not yet done, but the 1904 // To be precise, logout (browser shutdown) is not yet done, but the
1926 // remaining work is negligible, hence we say LogoutDone here. 1905 // remaining work is negligible, hence we say LogoutDone here.
1927 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutDone", 1906 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutDone",
1928 false); 1907 false);
1929 chromeos::BootTimesLoader::Get()->WriteLogoutTimes(); 1908 chromeos::BootTimesLoader::Get()->WriteLogoutTimes();
1930 #endif 1909 #endif
1931 TRACE_EVENT_END("BrowserMain", 0, 0); 1910 TRACE_EVENT_END("BrowserMain", 0, 0);
1932 return result_code; 1911 return result_code;
1933 } 1912 }
OLDNEW
« no previous file with comments | « chrome/browser/browser_main.h ('k') | chrome/browser/metrics/metrics_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698