Chromium Code Reviews| Index: chrome/browser/chrome_browser_field_trials.cc |
| diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc |
| index f1e27a852d57317c77120cf072304e0ef51e6876..14d0c3bdbb3df42c223e0429befed585288e7ef8 100644 |
| --- a/chrome/browser/chrome_browser_field_trials.cc |
| +++ b/chrome/browser/chrome_browser_field_trials.cc |
| @@ -124,6 +124,7 @@ void ChromeBrowserFieldTrials::SetupFieldTrials(bool proxy_policy_is_set) { |
| SetupUniformityFieldTrials(); |
| AutocompleteFieldTrial::Activate(); |
| DisableNewTabFieldTrialIfNecesssary(); |
| + AsyncDnsFieldTrial(); |
| } |
| // This is an A/B test for the maximum number of persistent connections per |
| @@ -582,3 +583,53 @@ void ChromeBrowserFieldTrials::DisableNewTabFieldTrialIfNecesssary() { |
| trial->Disable(); |
| } |
| } |
| + |
| +// When --enable-async-dns is not set, users will be in A/B test for DnsClient. |
|
cbentzel
2012/08/16 20:09:21
Do you want to move this to a ternary (enabled/dis
szym
2012/08/16 20:38:55
I'm okay with that. I'm not sure what this means f
|
| +// group A (async enabled): Use DnsClient if DnsConfig is known. Fall back to |
| +// getaddrinfo on failures. |
| +// group B (async disabled): Never use DnsClient. |
| +void ChromeBrowserFieldTrials::AsyncDnsFieldTrial() { |
| + // Use the concurrency override from the command-line, if any. |
| + if (parsed_command_line_.HasSwitch(switches::kHostResolverParallelism)) { |
| + std::string s = parsed_command_line_.GetSwitchValueASCII( |
| + switches::kHostResolverParallelism); |
| + |
| + // Parse the switch (it should be a positive integer formatted as decimal). |
| + int n; |
| + if (base::StringToInt(s, &n) && n > 0) { |
| + net::HostResolver::set_default_max_concurrent_resolves( |
| + static_cast<size_t>(n)); |
| + } else { |
| + LOG(ERROR) << "Invalid switch for host resolver parallelism: " << s; |
| + } |
| + } |
| + |
| + // Use the retry attempts override from the command-line, if any. |
| + if (parsed_command_line_.HasSwitch(switches::kHostResolverRetryAttempts)) { |
| + std::string s = parsed_command_line_.GetSwitchValueASCII( |
| + switches::kHostResolverRetryAttempts); |
| + // Parse the switch (it should be a non-negative integer). |
| + int n; |
| + if (base::StringToInt(s, &n) && n >= 0) { |
| + net::HostResolver::set_default_max_retry_attempts(static_cast<size_t>(n)); |
| + } else { |
| + LOG(ERROR) << "Invalid switch for host resolver retry attempts: " << s; |
| + } |
| + } |
| + |
| + bool use_async = parsed_command_line_.HasSwitch(switches::kEnableAsyncDns); |
| + if (use_async) { |
| + net::HostResolver::set_default_enable_async(true); |
| + return; // Trial disabled. |
| + } |
| + |
| + const base::FieldTrial::Probability kAsyncDnsDivisor = 100; |
| + base::FieldTrial::Probability enabled_probability = 50; |
| + |
| + scoped_refptr<base::FieldTrial> trial( |
| + base::FieldTrialList::FactoryGetFieldTrial( |
| + "AsyncDns", kAsyncDnsDivisor, "disabled", 2012, 9, 30, NULL)); |
| + |
| + int enabled_group = trial->AppendGroup("enabled", enabled_probability); |
| + net::HostResolver::set_default_enable_async(trial->group() == enabled_group); |
| +} |