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.cc97
1 files changed, 62 insertions, 35 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 185baac..5dbf897 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -588,6 +588,19 @@ void ChromeBrowserMainParts::SetupMetricsAndFieldTrials() {
metrics->ForceClientIdCreation(); // Needed below.
field_trial_list_.reset(new base::FieldTrialList(metrics->GetClientId()));
+ // Ensure any field trials specified on the command line are initialized.
+ // Also stop the metrics service so that we don't pollute UMA.
+#ifndef NDEBUG
+ const CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kForceFieldTrials)) {
+ std::string persistent = command_line->GetSwitchValueASCII(
+ switches::kForceFieldTrials);
+ bool ret = base::FieldTrialList::CreateTrialsFromString(persistent);
+ CHECK(ret) << "Invalid --" << switches::kForceFieldTrials <<
+ " list specified.";
+ }
+#endif // NDEBUG
+
SetupFieldTrials(metrics->recording_active(),
local_state_->IsManagedPreference(
prefs::kMaxConnectionsPerProxy));
@@ -609,16 +622,17 @@ void ChromeBrowserMainParts::ConnectionFieldTrial() {
const base::FieldTrial::Probability kConnectDivisor = 100;
const base::FieldTrial::Probability kConnectProbability = 1; // 1% prob.
- // After June 30, 2011 builds, it will always be in default group.
- scoped_refptr<base::FieldTrial> connect_trial(
- new base::FieldTrial(
- "ConnCountImpact", kConnectDivisor, "conn_count_6", 2011, 6, 30));
-
// This (6) is the current default value. Having this group declared here
// makes it straightforward to modify |kConnectProbability| such that the same
// probability value will be assigned to all the other groups, while
// preserving the remainder of the of probability space to the default value.
- const int connect_6 = connect_trial->kDefaultGroupNumber;
+ int connect_6 = -1;
+
+ // After June 30, 2011 builds, it will always be in default group.
+ scoped_refptr<base::FieldTrial> connect_trial(
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "ConnCountImpact", kConnectDivisor, "conn_count_6", 2011, 6, 30,
+ &connect_6));
const int connect_5 = connect_trial->AppendGroup("conn_count_5",
kConnectProbability);
@@ -663,10 +677,11 @@ void ChromeBrowserMainParts::SocketTimeoutFieldTrial() {
const base::FieldTrial::Probability kSocketTimeoutProbability = 1;
// After June 30, 2011 builds, it will always be in default group.
+ int socket_timeout_10 = -1;
scoped_refptr<base::FieldTrial> socket_timeout_trial(
- new base::FieldTrial("IdleSktToImpact", kIdleSocketTimeoutDivisor,
- "idle_timeout_10", 2011, 6, 30));
- const int socket_timeout_10 = socket_timeout_trial->kDefaultGroupNumber;
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "IdleSktToImpact", kIdleSocketTimeoutDivisor, "idle_timeout_10",
+ 2011, 6, 30, &socket_timeout_10));
const int socket_timeout_5 =
socket_timeout_trial->AppendGroup("idle_timeout_5",
@@ -696,16 +711,17 @@ void ChromeBrowserMainParts::ProxyConnectionsFieldTrial() {
// 25% probability
const base::FieldTrial::Probability kProxyConnectionProbability = 1;
- // After June 30, 2011 builds, it will always be in default group.
- scoped_refptr<base::FieldTrial> proxy_connection_trial(
- new base::FieldTrial("ProxyConnectionImpact", kProxyConnectionsDivisor,
- "proxy_connections_32", 2011, 6, 30));
-
// This (32 connections per proxy server) is the current default value.
// Declaring it here allows us to easily re-assign the probability space while
// maintaining that the default group always has the remainder of the "share",
// which allows for cleaner and quicker changes down the line if needed.
- const int proxy_connections_32 = proxy_connection_trial->kDefaultGroupNumber;
+ int proxy_connections_32 = -1;
+
+ // After June 30, 2011 builds, it will always be in default group.
+ scoped_refptr<base::FieldTrial> proxy_connection_trial(
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "ProxyConnectionImpact", kProxyConnectionsDivisor,
+ "proxy_connections_32", 2011, 6, 30, &proxy_connections_32));
// The number of max sockets per group cannot be greater than the max number
// of sockets per proxy server. We tried using 8, and it can easily
@@ -758,13 +774,14 @@ void ChromeBrowserMainParts::SpdyFieldTrial() {
base::FieldTrial::Probability npnhttp_probability = 5;
base::FieldTrial::Probability spdy3_probability = 10;
+ // NPN with spdy support is the default.
+ int npn_spdy_grp = -1;
+
// After June 30, 2013 builds, it will always be in default group.
scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial(
- "SpdyImpact", kSpdyDivisor, "npn_with_spdy", 2013, 6, 30));
-
- // NPN with spdy support is the default.
- int npn_spdy_grp = trial->kDefaultGroupNumber;
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "SpdyImpact", kSpdyDivisor, "npn_with_spdy", 2013, 6, 30,
+ &npn_spdy_grp));
// NPN with only http support, no spdy.
int npn_http_grp = trial->AppendGroup("npn_with_http", npnhttp_probability);
@@ -798,8 +815,8 @@ void ChromeBrowserMainParts::SpdyFieldTrial() {
// After June 30, 2013 builds, it will always be in default group
// (cwndDynamic).
scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial(
- "SpdyCwnd", kSpdyCwndDivisor, "cwndDynamic", 2013, 6, 30));
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "SpdyCwnd", kSpdyCwndDivisor, "cwndDynamic", 2013, 6, 30, NULL));
trial->AppendGroup("cwnd10", kSpdyCwnd10);
trial->AppendGroup("cwnd16", kSpdyCwnd16);
@@ -835,14 +852,15 @@ void ChromeBrowserMainParts::WarmConnectionFieldTrial() {
const base::FieldTrial::Probability kWarmSocketDivisor = 100;
const base::FieldTrial::Probability kWarmSocketProbability = 33;
+ // Default value is USE_LAST_ACCESSED_SOCKET.
+ int last_accessed_socket = -1;
+
// After January 30, 2013 builds, it will always be in default group.
scoped_refptr<base::FieldTrial> warmest_socket_trial(
- new base::FieldTrial(
+ base::FieldTrialList::FactoryGetFieldTrial(
"WarmSocketImpact", kWarmSocketDivisor, "last_accessed_socket",
- 2013, 1, 30));
+ 2013, 1, 30, &last_accessed_socket));
- // Default value is USE_LAST_ACCESSED_SOCKET.
- const int last_accessed_socket = warmest_socket_trial->kDefaultGroupNumber;
const int warmest_socket = warmest_socket_trial->AppendGroup(
"warmest_socket", kWarmSocketProbability);
const int warm_socket = warmest_socket_trial->AppendGroup(
@@ -872,11 +890,11 @@ void ChromeBrowserMainParts::ConnectBackupJobsFieldTrial() {
// 1% probability.
const base::FieldTrial::Probability kConnectBackupJobsProbability = 1;
// After June 30, 2011 builds, it will always be in default group.
+ int connect_backup_jobs_enabled = -1;
scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial("ConnnectBackupJobs",
- kConnectBackupJobsDivisor, "ConnectBackupJobsEnabled", 2011, 6,
- 30));
- const int connect_backup_jobs_enabled = trial->kDefaultGroupNumber;
+ base::FieldTrialList::FactoryGetFieldTrial("ConnnectBackupJobs",
+ kConnectBackupJobsDivisor, "ConnectBackupJobsEnabled",
+ 2011, 6, 30, &connect_backup_jobs_enabled));
trial->AppendGroup("ConnectBackupJobsDisabled",
kConnectBackupJobsProbability);
const int trial_group = trial->group();
@@ -894,8 +912,9 @@ void ChromeBrowserMainParts::PredictorFieldTrial() {
// After June 30, 2011 builds, it will always be in default group
// (default_enabled_prefetch).
scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial("DnsImpact", kDivisor,
- "default_enabled_prefetch", 2011, 10, 30));
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "DnsImpact", kDivisor, "default_enabled_prefetch", 2011, 10, 30,
+ NULL));
// First option is to disable prefetching completely.
int disabled_prefetch = trial->AppendGroup("disabled_prefetch",
@@ -1038,6 +1057,13 @@ bool ChromeBrowserMainParts::IsMetricsReportingEnabled() {
// prefs, we turn on recording. We disable metrics completely for
// non-official builds.
bool enabled = false;
+#ifndef NDEBUG
+ // The debug build doesn't sent UMA logs when FieldTrials are forced.
+ const CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kForceFieldTrials))
+ return false;
+#endif // #ifndef NDEBUG
+
#if defined(GOOGLE_CHROME_BUILD)
#if defined(OS_CHROMEOS)
chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
@@ -1608,10 +1634,11 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
base::FieldTrial::Probability kSDCH_DIVISOR = 1000;
base::FieldTrial::Probability kSDCH_DISABLE_PROBABILITY = 1; // 0.1% prob.
// After March 31, 2012 builds, it will always be in default group.
+ int sdch_enabled_group = -1;
scoped_refptr<base::FieldTrial> sdch_trial(
- new base::FieldTrial("GlobalSdch", kSDCH_DIVISOR, "global_enable_sdch",
- 2012, 3, 31));
- int sdch_enabled_group = sdch_trial->kDefaultGroupNumber;
+ base::FieldTrialList::FactoryGetFieldTrial(
+ "GlobalSdch", kSDCH_DIVISOR, "global_enable_sdch", 2012, 3, 31,
+ &sdch_enabled_group));
sdch_trial->AppendGroup("global_disable_sdch",
kSDCH_DISABLE_PROBABILITY);