summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/browser_main.cc')
-rw-r--r--chrome/browser/browser_main.cc99
1 files changed, 15 insertions, 84 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index a9063cf..be43c54 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -55,7 +55,7 @@
#include "chrome/browser/net/chrome_dns_cert_provenance_checker.h"
#include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h"
#include "chrome/browser/net/chrome_net_log.h"
-#include "chrome/browser/net/predictor.h"
+#include "chrome/browser/net/predictor_api.h"
#include "chrome/browser/net/sdch_dictionary_fetcher.h"
#include "chrome/browser/plugin_prefs.h"
#include "chrome/browser/policy/browser_policy_connector.h"
@@ -1172,88 +1172,6 @@ void BrowserMainParts::ConnectBackupJobsFieldTrial() {
}
}
-void BrowserMainParts::PredictorFieldTrial() {
- const base::FieldTrial::Probability kDivisor = 1000;
- // For each option (i.e., non-default), we have a fixed probability.
- // 0.1% probability.
- const base::FieldTrial::Probability kProbabilityPerGroup = 1;
-
- // 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));
-
- // 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",
- kProbabilityPerGroup);
- int max_500ms_prefetch = trial->AppendGroup("max_500ms_queue_prefetch",
- kProbabilityPerGroup);
- int max_750ms_prefetch = trial->AppendGroup("max_750ms_queue_prefetch",
- kProbabilityPerGroup);
- // 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);
-
- if (trial->group() != disabled_prefetch) {
- // Initialize the DNS prefetch system.
- size_t max_parallel_resolves =
- chrome_browser_net::Predictor::kMaxSpeculativeParallelResolves;
- int max_queueing_delay_ms =
- chrome_browser_net::Predictor::kMaxSpeculativeResolveQueueDelayMs;
-
- if (trial->group() == max_2_concurrent_prefetch)
- max_parallel_resolves = 2;
- else if (trial->group() == max_4_concurrent_prefetch)
- max_parallel_resolves = 4;
- else if (trial->group() == max_6_concurrent_prefetch)
- max_parallel_resolves = 6;
- chrome_browser_net::Predictor::set_max_parallel_resolves(
- max_parallel_resolves);
-
- if (trial->group() == max_250ms_prefetch) {
- max_queueing_delay_ms =
- (250 * chrome_browser_net::Predictor::kTypicalSpeculativeGroupSize) /
- max_parallel_resolves;
- } else if (trial->group() == max_500ms_prefetch) {
- max_queueing_delay_ms =
- (500 * chrome_browser_net::Predictor::kTypicalSpeculativeGroupSize) /
- max_parallel_resolves;
- } else if (trial->group() == max_750ms_prefetch) {
- max_queueing_delay_ms =
- (750 * chrome_browser_net::Predictor::kTypicalSpeculativeGroupSize) /
- max_parallel_resolves;
- } else if (trial->group() == max_2s_prefetch) {
- max_queueing_delay_ms =
- (2000 * chrome_browser_net::Predictor::kTypicalSpeculativeGroupSize) /
- max_parallel_resolves;
- }
- chrome_browser_net::Predictor::set_max_queueing_delay(
- max_queueing_delay_ms);
- }
-}
-
// Test the impact on subsequent Google searches of getting suggestions from
// www.google.TLD instead of clients1.google.TLD.
void BrowserMainParts::SuggestPrefixFieldTrial() {
@@ -1354,7 +1272,6 @@ void BrowserMainParts::SetupFieldTrials(bool metrics_recording_enabled,
ConnectBackupJobsFieldTrial();
SuggestPrefixFieldTrial();
WarmConnectionFieldTrial();
- PredictorFieldTrial();
}
// -----------------------------------------------------------------------------
@@ -1927,6 +1844,20 @@ int BrowserMain(const MainFunctionParams& parameters) {
RegisterApplicationRestart(parsed_command_line);
#endif // OS_WIN
+ // Initialize and maintain network predictor module, which handles DNS
+ // pre-resolution, as well as TCP/IP connection pre-warming.
+ // This also registers an observer to discard data when closing incognito
+ // mode.
+ bool preconnect_enabled = true; // Default status (easy to change!).
+ if (parsed_command_line.HasSwitch(switches::kDisablePreconnect))
+ preconnect_enabled = false;
+ else if (parsed_command_line.HasSwitch(switches::kEnablePreconnect))
+ preconnect_enabled = true;
+ chrome_browser_net::PredictorInit dns_prefetch(
+ user_prefs,
+ local_state,
+ preconnect_enabled);
+
#if defined(OS_WIN)
base::win::ScopedCOMInitializer com_initializer;