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

Unified Diff: chrome/browser/chrome_browser_main.cc

Issue 9705074: Supporting command line argument to force field trials (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: No more static default group number Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chrome_browser_main.cc
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index cce078682c0229ab06e2bcdd228ec0f23924427c..875e0db6eeeebedae21c59ad39ab6505b2588898 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -592,6 +592,20 @@ 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::kForceFieldTestNameAndValue)) {
+ std::string persistent = command_line->GetSwitchValueASCII(
+ switches::kForceFieldTestNameAndValue);
+ bool ret = base::FieldTrialList::CreateTrialsFromString(persistent);
+ CHECK(ret) << "Invalid --" << switches::kForceFieldTestNameAndValue <<
+ " list specified.";
+ metrics->Stop();
+ }
+#endif // NDEBUG
+
SetupFieldTrials(metrics->recording_active(),
local_state_->IsManagedPreference(
prefs::kMaxConnectionsPerProxy));
@@ -613,16 +627,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::GetFieldTrialInstance(
+ "ConnCountImpact", kConnectDivisor, "conn_count_6", &connect_6,
+ 2011, 6, 30));
const int connect_5 = connect_trial->AppendGroup("conn_count_5",
kConnectProbability);
@@ -667,10 +682,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::GetFieldTrialInstance(
+ "IdleSktToImpact", kIdleSocketTimeoutDivisor, "idle_timeout_10",
+ &socket_timeout_10, 2011, 6, 30));
const int socket_timeout_5 =
socket_timeout_trial->AppendGroup("idle_timeout_5",
@@ -700,16 +716,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::GetFieldTrialInstance(
+ "ProxyConnectionImpact", kProxyConnectionsDivisor,
+ "proxy_connections_32", &proxy_connections_32, 2011, 6, 30));
// 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
@@ -767,13 +784,14 @@ void ChromeBrowserMainParts::SpdyFieldTrial() {
base::FieldTrial::Probability flow_control_probability = 5;
base::FieldTrial::Probability spdy3_probability = 0;
+ // 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::GetFieldTrialInstance(
+ "SpdyImpact", kSpdyDivisor, "npn_with_spdy", &npn_spdy_grp,
+ 2013, 6, 30));
// NPN with only http support, no spdy.
int npn_http_grp = trial->AppendGroup("npn_with_http", npnhttp_probability);
@@ -817,8 +835,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::GetFieldTrialInstance(
+ "SpdyCwnd", kSpdyCwndDivisor, "cwndDynamic", NULL, 2013, 6, 30));
trial->AppendGroup("cwnd10", kSpdyCwnd10);
trial->AppendGroup("cwnd16", kSpdyCwnd16);
@@ -854,14 +872,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::GetFieldTrialInstance(
"WarmSocketImpact", kWarmSocketDivisor, "last_accessed_socket",
- 2013, 1, 30));
+ &last_accessed_socket, 2013, 1, 30));
- // 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(
@@ -891,11 +910,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::GetFieldTrialInstance("ConnnectBackupJobs",
+ kConnectBackupJobsDivisor, "ConnectBackupJobsEnabled",
+ &connect_backup_jobs_enabled, 2011, 6, 30));
trial->AppendGroup("ConnectBackupJobsDisabled",
kConnectBackupJobsProbability);
const int trial_group = trial->group();
@@ -913,8 +932,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::GetFieldTrialInstance(
+ "DnsImpact", kDivisor, "default_enabled_prefetch", NULL,
+ 2011, 10, 30));
// First option is to disable prefetching completely.
int disabled_prefetch = trial->AppendGroup("disabled_prefetch",
@@ -1021,8 +1041,8 @@ void ChromeBrowserMainParts::ComodoDNSExperimentFieldTrial() {
// After April 15, 2012 builds, it will always be in default group.
scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial("ComodoDNSExperiment", kDivisor,
- "inactive", 2012, 4, 15));
+ base::FieldTrialList::GetFieldTrialInstance(
+ "ComodoDNSExperiment", kDivisor, "inactive", NULL, 2012, 4, 15));
const int active = trial->AppendGroup("active", kProbability);
@@ -1668,10 +1688,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::GetFieldTrialInstance(
+ "GlobalSdch", kSDCH_DIVISOR, "global_enable_sdch",
+ &sdch_enabled_group, 2012, 3, 31));
sdch_trial->AppendGroup("global_disable_sdch",
kSDCH_DISABLE_PROBABILITY);

Powered by Google App Engine
This is Rietveld 408576698