Index: chrome/browser/net/dns_global.cc |
=================================================================== |
--- chrome/browser/net/dns_global.cc (revision 42146) |
+++ chrome/browser/net/dns_global.cc (working copy) |
@@ -543,13 +543,21 @@ |
// latency of page loads. |
FieldTrial::Probability kDivisor = 100; |
// For each option (i.e., non-default), we have a fixed probability. |
- FieldTrial::Probability kProbabilityPerGroup = 3; // 3% probability. |
+ FieldTrial::Probability kProbabilityPerGroup = 5; // 5% probability. |
trial_ = new FieldTrial("DnsImpact", kDivisor); |
// First option is to disable prefetching completely. |
int disabled_prefetch = trial_->AppendGroup("_disabled_prefetch", |
kProbabilityPerGroup); |
+ |
+ |
+ // We're running two experiments at the same time. The first set of trials |
+ // modulates the delay-time until we declare a congestion event (and purge |
+ // our queue). The second modulates the number of concurrent resolutions |
+ // we do at any time. Users are in exactly one trial (or the default) during |
+ // any one run, and hence only one experiment at a time. |
+ // Experiment 1: |
// Set congestion detection at 250, 500, or 750ms, rather than the 1 second |
// default. |
int max_250ms_prefetch = trial_->AppendGroup("_max_250ms_queue_prefetch", |
@@ -561,6 +569,16 @@ |
// Set congestion detection at 2 seconds instead of the 1 second default. |
int max_2s_prefetch = trial_->AppendGroup("_max_2s_queue_prefetch", |
kProbabilityPerGroup); |
+ // Experiment 2: |
+ // Set max simultaneous resoultions to 2, 4, or 6, and scale the congestion |
+ // limit proportionally (so we don't impact average probability of asserting |
+ // congesion very much). |
+ int max_2_concurrent_prefetch = trial_->AppendGroup( |
+ "_max_2 concurrent_prefetch", kProbabilityPerGroup); |
+ int max_4_concurrent_prefetch = trial_->AppendGroup( |
+ "_max_4 concurrent_prefetch", kProbabilityPerGroup); |
+ int max_6_concurrent_prefetch = trial_->AppendGroup( |
+ "_max_6 concurrent_prefetch", kProbabilityPerGroup); |
trial_->AppendGroup("_default_enabled_prefetch", |
FieldTrial::kAllRemainingProbability); |
@@ -571,9 +589,7 @@ |
if (trial_->group() != disabled_prefetch) { |
// Initialize the DNS prefetch system. |
- |
size_t max_concurrent = kMaxPrefetchConcurrentLookups; |
- |
int max_queueing_delay_ms = kMaxPrefetchQueueingDelayMs; |
if (trial_->group() == max_250ms_prefetch) |
@@ -584,6 +600,16 @@ |
max_queueing_delay_ms = 750; |
else if (trial_->group() == max_2s_prefetch) |
max_queueing_delay_ms = 2000; |
+ if (trial_->group() == max_2_concurrent_prefetch) |
+ max_concurrent = 2; |
+ else if (trial_->group() == max_4_concurrent_prefetch) |
+ max_concurrent = 4; |
+ else if (trial_->group() == max_6_concurrent_prefetch) |
+ max_concurrent = 6; |
+ // Scale acceptable delay so we don't cause congestion limits to fire as |
+ // we modulate max_concurrent (*if* we are modulating it at all). |
+ max_queueing_delay_ms = (kMaxPrefetchQueueingDelayMs * |
+ kMaxPrefetchConcurrentLookups) / max_concurrent; |
TimeDelta max_queueing_delay( |
TimeDelta::FromMilliseconds(max_queueing_delay_ms)); |