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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/predictor.h" 5 #include "chrome/browser/net/predictor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <set> 9 #include <set>
10 #include <sstream> 10 #include <sstream>
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 urls, referral_list, 226 urls, referral_list,
227 io_thread, profile_io_data)); 227 io_thread, profile_io_data));
228 } 228 }
229 229
230 void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) { 230 void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) {
231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
232 if (!predictor_enabled_) 232 if (!predictor_enabled_)
233 return; 233 return;
234 if (!url.is_valid() || !url.has_host()) 234 if (!url.is_valid() || !url.has_host())
235 return; 235 return;
236 if (!CanPredictNetworkActionsUI())
237 return;
238 236
239 std::string host = url.HostNoBrackets(); 237 std::string host = url.HostNoBrackets();
240 bool is_new_host_request = (host != last_omnibox_host_); 238 bool is_new_host_request = (host != last_omnibox_host_);
241 last_omnibox_host_ = host; 239 last_omnibox_host_ = host;
242 240
243 UrlInfo::ResolutionMotivation motivation(UrlInfo::OMNIBOX_MOTIVATED); 241 UrlInfo::ResolutionMotivation motivation(UrlInfo::OMNIBOX_MOTIVATED);
244 base::TimeTicks now = base::TimeTicks::Now(); 242 base::TimeTicks now = base::TimeTicks::Now();
245 243
246 if (preconnect_enabled_) { 244 if (preconnect_enabled_ && CanPreconnectUI()) {
247 if (preconnectable && !is_new_host_request) { 245 if (preconnectable && !is_new_host_request) {
248 ++consecutive_omnibox_preconnect_count_; 246 ++consecutive_omnibox_preconnect_count_;
249 // The omnibox suggests a search URL (for which we can preconnect) after 247 // The omnibox suggests a search URL (for which we can preconnect) after
250 // one or two characters are typed, even though such typing often (1 in 248 // one or two characters are typed, even though such typing often (1 in
251 // 3?) becomes a real URL. This code waits till is has more evidence of a 249 // 3?) becomes a real URL. This code waits till is has more evidence of a
252 // preconnectable URL (search URL) before forming a preconnection, so as 250 // preconnectable URL (search URL) before forming a preconnection, so as
253 // to reduce the useless preconnect rate. 251 // to reduce the useless preconnect rate.
254 // Perchance this logic should be pushed back into the omnibox, where the 252 // Perchance this logic should be pushed back into the omnibox, where the
255 // actual characters typed, such as a space, can better forcast whether 253 // actual characters typed, such as a space, can better forcast whether
256 // we need to search/preconnect or not. By waiting for at least 4 254 // we need to search/preconnect or not. By waiting for at least 4
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 302
305 void Predictor::PreconnectUrlAndSubresources(const GURL& url, 303 void Predictor::PreconnectUrlAndSubresources(const GURL& url,
306 const GURL& first_party_for_cookies) { 304 const GURL& first_party_for_cookies) {
307 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
308 BrowserThread::CurrentlyOn(BrowserThread::IO)); 306 BrowserThread::CurrentlyOn(BrowserThread::IO));
309 if (!predictor_enabled_ || !preconnect_enabled_ || 307 if (!predictor_enabled_ || !preconnect_enabled_ ||
310 !url.is_valid() || !url.has_host()) 308 !url.is_valid() || !url.has_host())
311 return; 309 return;
312 310
313 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { 311 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
314 if (!CanPredictNetworkActionsUI()) 312 if (!CanPreconnectUI())
315 return; 313 return;
316 } else { 314 } else {
317 if (!CanPredictNetworkActionsIO()) 315 if (!CanPreconnectIO())
318 return; 316 return;
319 } 317 }
320 318
321 UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED); 319 UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED);
322 const int kConnectionsNeeded = 1; 320 const int kConnectionsNeeded = 1;
323 PreconnectUrl(CanonicalizeUrl(url), first_party_for_cookies, 321 PreconnectUrl(CanonicalizeUrl(url), first_party_for_cookies,
324 motivation, kConnectionsNeeded); 322 motivation, kConnectionsNeeded);
325 PredictFrameSubresources(url.GetWithEmptyPath(), first_party_for_cookies); 323 PredictFrameSubresources(url.GetWithEmptyPath(), first_party_for_cookies);
326 } 324 }
327 325
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 } 947 }
950 948
951 bool Predictor::CanPredictNetworkActionsUI() { 949 bool Predictor::CanPredictNetworkActionsUI() {
952 return chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_); 950 return chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_);
953 } 951 }
954 952
955 bool Predictor::CanPredictNetworkActionsIO() { 953 bool Predictor::CanPredictNetworkActionsIO() {
956 return chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_); 954 return chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_);
957 } 955 }
958 956
957 bool Predictor::CanPreconnectUI() {
958 return chrome_browser_net::CanPreconnectUI(user_prefs_);
959 }
960
961 bool Predictor::CanPreconnectIO() {
962 return chrome_browser_net::CanPreconnectIO(profile_io_data_);
963 }
964
959 enum SubresourceValue { 965 enum SubresourceValue {
960 PRECONNECTION, 966 PRECONNECTION,
961 PRERESOLUTION, 967 PRERESOLUTION,
962 TOO_NEW, 968 TOO_NEW,
963 SUBRESOURCE_VALUE_MAX 969 SUBRESOURCE_VALUE_MAX
964 }; 970 };
965 971
966 void Predictor::PrepareFrameSubresources(const GURL& original_url, 972 void Predictor::PrepareFrameSubresources(const GURL& original_url,
967 const GURL& first_party_for_cookies) { 973 const GURL& first_party_for_cookies) {
968 // Apply HSTS redirect early so it is taken into account when looking up 974 // Apply HSTS redirect early so it is taken into account when looking up
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 ProfileIOData* profile_io_data) { 1346 ProfileIOData* profile_io_data) {
1341 // Empty function for unittests. 1347 // Empty function for unittests.
1342 } 1348 }
1343 1349
1344 void SimplePredictor::ShutdownOnUIThread() { 1350 void SimplePredictor::ShutdownOnUIThread() {
1345 SetShutdown(true); 1351 SetShutdown(true);
1346 } 1352 }
1347 1353
1348 bool SimplePredictor::CanPredictNetworkActionsUI() { return true; } 1354 bool SimplePredictor::CanPredictNetworkActionsUI() { return true; }
1349 bool SimplePredictor::CanPredictNetworkActionsIO() { return true; } 1355 bool SimplePredictor::CanPredictNetworkActionsIO() { return true; }
1356 bool SimplePredictor::CanPreconnectUI() { return true; }
1357 bool SimplePredictor::CanPreconnectIO() { return true; }
1350 1358
1351 } // namespace chrome_browser_net 1359 } // namespace chrome_browser_net
OLDNEW
« chrome/browser/net/predictor.h ('K') | « chrome/browser/net/predictor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698