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

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

Issue 15675002: Add the UMA recording recall of URLRequests preconnected. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move logic to predictor Created 7 years, 7 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
Index: chrome/browser/net/predictor.cc
diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc
index 3af1cf3a2b5388e70d6a69964fb21b77574991be..fbcf75f2032537f3f6cbc6dacdafddc1cfd1e5ea 100644
--- a/chrome/browser/net/predictor.cc
+++ b/chrome/browser/net/predictor.cc
@@ -136,6 +136,8 @@ Predictor::Predictor(bool preconnect_enabled)
host_resolver_(NULL),
preconnect_enabled_(preconnect_enabled),
consecutive_omnibox_preconnect_count_(0),
+ recent_preconnects_(
+ TimeDelta::FromSeconds(kMaxUnusedSocketLifetimeSecondsWithoutAGet)),
next_trim_time_(base::TimeTicks::Now() +
TimeDelta::FromHours(kDurationBetweenTrimmingsHours)) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -243,9 +245,8 @@ void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) {
return; // We've done a preconnect recently.
last_omnibox_preconnect_ = now;
const int kConnectionsNeeded = 1;
- PreconnectOnUIThread(CanonicalizeUrl(url), GURL(), motivation,
- kConnectionsNeeded,
- url_request_context_getter_);
+ PreconnectUrl(CanonicalizeUrl(url), GURL(), motivation,
+ kConnectionsNeeded);
return; // Skip pre-resolution, since we'll open a connection.
}
} else {
@@ -284,9 +285,8 @@ void Predictor::PreconnectUrlAndSubresources(const GURL& url,
std::string host = url.HostNoBrackets();
UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED);
const int kConnectionsNeeded = 1;
- PreconnectOnUIThread(CanonicalizeUrl(url), first_party_for_cookies,
- motivation, kConnectionsNeeded,
- url_request_context_getter_);
+ PreconnectUrl(CanonicalizeUrl(url), first_party_for_cookies,
+ motivation, kConnectionsNeeded);
PredictFrameSubresources(url.GetWithEmptyPath(), first_party_for_cookies);
}
}
@@ -824,6 +824,41 @@ void Predictor::EnablePredictorOnIOThread(bool enable) {
predictor_enabled_ = enable;
}
+void Predictor::PreconnectUrl(const GURL& url,
+ const GURL& first_party_for_cookies,
+ UrlInfo::ResolutionMotivation motivation,
+ int count) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
+ BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ if (BrowserThread::CurrentlyOn(BrowserThread::IO)) {
+ PreconnectUrlOnIOThread(url, first_party_for_cookies, motivation, count);
+ } else {
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&Predictor::PreconnectUrlOnIOThread,
+ base::Unretained(this), url, first_party_for_cookies,
+ motivation, count));
mmenke 2013/05/23 15:28:36 I hadn't realized the Predictor lived on multiple
kouhei (in TOK) 2013/05/24 00:34:37 The Predictor instance is created in UIthread, but
mmenke 2013/05/24 18:28:55 Thanks for investigating this! Looks like you're
+ }
+}
+
+void Predictor::PreconnectUrlOnIOThread(
+ const GURL& url, const GURL& first_party_for_cookies,
+ UrlInfo::ResolutionMotivation motivation, int count) {
+ GURL canonical_url(CanonicalizeUrl(url));
+ recent_preconnects_.SetRecentlySeen(canonical_url);
+
+ PreconnectOnIOThread(url, first_party_for_cookies, motivation, count,
+ url_request_context_getter_);
+}
+
+void Predictor::RecordPreconnectNavigationStats(const GURL& url) {
+ UMA_HISTOGRAM_BOOLEAN(
+ "Net.PreconnectedNavigation",
+ recent_preconnects_.WasRecentlySeen(url));
+}
+
void Predictor::PredictFrameSubresources(const GURL& url,
const GURL& first_party_for_cookies) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
@@ -864,9 +899,8 @@ void Predictor::PrepareFrameSubresources(const GURL& url,
// load any subresources). If we learn about this resource, we will instead
// provide a more carefully estimated preconnection count.
if (preconnect_enabled_) {
- PreconnectOnIOThread(url, first_party_for_cookies,
- UrlInfo::SELF_REFERAL_MOTIVATED, 2,
- url_request_context_getter_);
+ PreconnectUrlOnIOThread(url, first_party_for_cookies,
+ UrlInfo::SELF_REFERAL_MOTIVATED, 2);
}
return;
}
@@ -890,8 +924,8 @@ void Predictor::PrepareFrameSubresources(const GURL& url,
int count = static_cast<int>(std::ceil(connection_expectation));
if (url.host() == future_url->first.host())
++count;
- PreconnectOnIOThread(future_url->first, first_party_for_cookies,
- motivation, count, url_request_context_getter_);
+ PreconnectUrlOnIOThread(future_url->first, first_party_for_cookies,
+ motivation, count);
} else if (connection_expectation > kDNSPreresolutionWorthyExpectedValue) {
evalution = PRERESOLUTION;
future_url->second.preresolution_increment();

Powered by Google App Engine
This is Rietveld 408576698