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

Unified Diff: chrome/browser/net/predictor.cc

Issue 443413002: Enable TCP preconnect and DNS preresolve on cellular. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix preresolve and preconnect conditions in AnticipateOmniboxUrl. Created 6 years, 4 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
« no previous file with comments | « chrome/browser/net/predictor.h ('k') | chrome/browser/policy/policy_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/net/predictor.cc
diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc
index fea0171d5f284050519fded47c939a0b70537b36..1900d9ea1d6cde693069b3083450ef9a8c09d5f9 100644
--- a/chrome/browser/net/predictor.cc
+++ b/chrome/browser/net/predictor.cc
@@ -229,12 +229,10 @@ void Predictor::InitNetworkPredictor(PrefService* user_prefs,
void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!predictor_enabled_)
+ if (!preconnect_enabled_ || !CanPreresolveAndPreconnectUI())
mmenke 2014/08/12 17:38:10 I think !preconnect_enabled_ should go down to whe
Bence 2014/08/12 20:21:56 Done.
return;
if (!url.is_valid() || !url.has_host())
return;
- if (!CanPredictNetworkActionsUI())
- return;
std::string host = url.HostNoBrackets();
bool is_new_host_request = (host != last_omnibox_host_);
@@ -243,44 +241,42 @@ void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) {
UrlInfo::ResolutionMotivation motivation(UrlInfo::OMNIBOX_MOTIVATED);
base::TimeTicks now = base::TimeTicks::Now();
- if (preconnect_enabled_) {
- if (preconnectable && !is_new_host_request) {
- ++consecutive_omnibox_preconnect_count_;
- // The omnibox suggests a search URL (for which we can preconnect) after
- // one or two characters are typed, even though such typing often (1 in
- // 3?) becomes a real URL. This code waits till is has more evidence of a
- // preconnectable URL (search URL) before forming a preconnection, so as
- // to reduce the useless preconnect rate.
- // Perchance this logic should be pushed back into the omnibox, where the
- // actual characters typed, such as a space, can better forcast whether
- // we need to search/preconnect or not. By waiting for at least 4
- // characters in a row that have lead to a search proposal, we avoid
- // preconnections for a prefix like "www." and we also wait until we have
- // at least a 4 letter word to search for.
- // Each character typed appears to induce 2 calls to
- // AnticipateOmniboxUrl(), so we double 4 characters and limit at 8
- // requests.
- // TODO(jar): Use an A/B test to optimize this.
- const int kMinConsecutiveRequests = 8;
- if (consecutive_omnibox_preconnect_count_ >= kMinConsecutiveRequests) {
- // TODO(jar): Perhaps we should do a GET to leave the socket open in the
- // pool. Currently, we just do a connect, which MAY be reset if we
- // don't use it in 10 secondes!!! As a result, we may do more
- // connections, and actually cost the server more than if we did a real
- // get with a fake request (/gen_204 might be the good path on Google).
- const int kMaxSearchKeepaliveSeconds(10);
- if ((now - last_omnibox_preconnect_).InSeconds() <
- kMaxSearchKeepaliveSeconds)
- return; // We've done a preconnect recently.
- last_omnibox_preconnect_ = now;
- const int kConnectionsNeeded = 1;
- PreconnectUrl(CanonicalizeUrl(url), GURL(), motivation,
- kConnectionsNeeded);
- return; // Skip pre-resolution, since we'll open a connection.
- }
- } else {
- consecutive_omnibox_preconnect_count_ = 0;
+ if (preconnectable && !is_new_host_request) {
+ ++consecutive_omnibox_preconnect_count_;
+ // The omnibox suggests a search URL (for which we can preconnect) after
+ // one or two characters are typed, even though such typing often (1 in
+ // 3?) becomes a real URL. This code waits till is has more evidence of a
+ // preconnectable URL (search URL) before forming a preconnection, so as
+ // to reduce the useless preconnect rate.
+ // Perchance this logic should be pushed back into the omnibox, where the
+ // actual characters typed, such as a space, can better forcast whether
+ // we need to search/preconnect or not. By waiting for at least 4
+ // characters in a row that have lead to a search proposal, we avoid
+ // preconnections for a prefix like "www." and we also wait until we have
+ // at least a 4 letter word to search for.
+ // Each character typed appears to induce 2 calls to
+ // AnticipateOmniboxUrl(), so we double 4 characters and limit at 8
+ // requests.
+ // TODO(jar): Use an A/B test to optimize this.
+ const int kMinConsecutiveRequests = 8;
+ if (consecutive_omnibox_preconnect_count_ >= kMinConsecutiveRequests) {
+ // TODO(jar): Perhaps we should do a GET to leave the socket open in the
+ // pool. Currently, we just do a connect, which MAY be reset if we
+ // don't use it in 10 secondes!!! As a result, we may do more
+ // connections, and actually cost the server more than if we did a real
+ // get with a fake request (/gen_204 might be the good path on Google).
+ const int kMaxSearchKeepaliveSeconds(10);
+ if ((now - last_omnibox_preconnect_).InSeconds() <
+ kMaxSearchKeepaliveSeconds)
+ return; // We've done a preconnect recently.
+ last_omnibox_preconnect_ = now;
+ const int kConnectionsNeeded = 1;
+ PreconnectUrl(
+ CanonicalizeUrl(url), GURL(), motivation, kConnectionsNeeded);
+ return; // Skip pre-resolution, since we'll open a connection.
}
+ } else {
+ consecutive_omnibox_preconnect_count_ = 0;
}
// Fall through and consider pre-resolution.
@@ -311,10 +307,10 @@ void Predictor::PreconnectUrlAndSubresources(const GURL& url,
return;
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- if (!CanPredictNetworkActionsUI())
+ if (!CanPreresolveAndPreconnectUI())
return;
} else {
- if (!CanPredictNetworkActionsIO())
+ if (!CanPreresolveAndPreconnectIO())
return;
}
@@ -473,7 +469,7 @@ void Predictor::Resolve(const GURL& url,
void Predictor::LearnFromNavigation(const GURL& referring_url,
const GURL& target_url) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (!predictor_enabled_ || !CanPredictNetworkActionsIO())
+ if (!predictor_enabled_ || !CanPrefetchAndPrerenderIO())
return;
DCHECK_EQ(referring_url, Predictor::CanonicalizeUrl(referring_url));
DCHECK_NE(referring_url, GURL::EmptyGURL());
@@ -497,7 +493,7 @@ void Predictor::PredictorGetHtmlInfo(Predictor* predictor,
// "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">"
"</head><body>");
if (predictor && predictor->predictor_enabled() &&
- predictor->CanPredictNetworkActionsIO()) {
+ predictor->CanPrefetchAndPrerenderIO()) {
predictor->GetHtmlInfo(output);
} else {
output->append("DNS pre-resolution and TCP pre-connection is disabled.");
@@ -728,7 +724,7 @@ void Predictor::FinalizeInitializationOnIOThread(
void Predictor::LearnAboutInitialNavigation(const GURL& url) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (!predictor_enabled_ || NULL == initial_observer_.get() ||
- !CanPredictNetworkActionsIO())
+ !CanPrefetchAndPrerenderIO())
return;
mmenke 2014/08/12 17:38:10 nit: While you're here, mind adding braces?
Bence 2014/08/12 20:21:56 Done.
initial_observer_->Append(url, this);
}
@@ -760,10 +756,10 @@ void Predictor::DnsPrefetchMotivatedList(
return;
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- if (!CanPredictNetworkActionsUI())
+ if (!CanPrefetchAndPrerenderUI())
return;
} else {
- if (!CanPredictNetworkActionsIO())
+ if (!CanPrefetchAndPrerenderIO())
return;
}
@@ -802,10 +798,10 @@ void Predictor::SaveStateForNextStartupAndTrim() {
return;
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- if (!CanPredictNetworkActionsUI())
+ if (!CanPrefetchAndPrerenderUI())
return;
} else {
- if (!CanPredictNetworkActionsIO())
+ if (!CanPrefetchAndPrerenderIO())
return;
}
@@ -908,10 +904,10 @@ void Predictor::PredictFrameSubresources(const GURL& url,
return;
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- if (!CanPredictNetworkActionsUI())
+ if (!CanPrefetchAndPrerenderUI())
return;
} else {
- if (!CanPredictNetworkActionsIO())
+ if (!CanPrefetchAndPrerenderIO())
return;
}
DCHECK_EQ(url.GetWithEmptyPath(), url);
@@ -948,12 +944,20 @@ void Predictor::AdviseProxy(const GURL& url,
}
}
-bool Predictor::CanPredictNetworkActionsUI() {
- return chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_);
+bool Predictor::CanPrefetchAndPrerenderUI() const {
mmenke 2014/08/12 17:38:10 Suggest adding DCHECKs for which thread we're on i
mmenke 2014/08/12 17:38:10 optional: It's marginally slower, but you might w
Bence 2014/08/12 20:21:55 Done.
Bence 2014/08/12 20:21:56 Done.
+ return chrome_browser_net::CanPrefetchAndPrerenderUI(user_prefs_);
+}
+
+bool Predictor::CanPrefetchAndPrerenderIO() const {
+ return chrome_browser_net::CanPrefetchAndPrerenderIO(profile_io_data_);
+}
+
+bool Predictor::CanPreresolveAndPreconnectUI() const {
+ return chrome_browser_net::CanPreresolveAndPreconnectUI(user_prefs_);
}
-bool Predictor::CanPredictNetworkActionsIO() {
- return chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_);
+bool Predictor::CanPreresolveAndPreconnectIO() const {
+ return chrome_browser_net::CanPreresolveAndPreconnectIO(profile_io_data_);
}
enum SubresourceValue {
@@ -1345,7 +1349,9 @@ void SimplePredictor::ShutdownOnUIThread() {
SetShutdown(true);
}
-bool SimplePredictor::CanPredictNetworkActionsUI() { return true; }
-bool SimplePredictor::CanPredictNetworkActionsIO() { return true; }
+bool SimplePredictor::CanPrefetchAndPrerenderUI() const { return true; }
+bool SimplePredictor::CanPrefetchAndPrerenderIO() const { return true; }
+bool SimplePredictor::CanPreresolveAndPreconnectUI() const { return true; }
+bool SimplePredictor::CanPreresolveAndPreconnectIO() const { return true; }
} // namespace chrome_browser_net
« no previous file with comments | « chrome/browser/net/predictor.h ('k') | chrome/browser/policy/policy_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698