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

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor.cc

Issue 632033002: Add PLT measurement to Resource Prefetching for Mobile Web (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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/predictors/resource_prefetch_predictor.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/predictors/resource_prefetch_predictor.cc
diff --git a/chrome/browser/predictors/resource_prefetch_predictor.cc b/chrome/browser/predictors/resource_prefetch_predictor.cc
index d0b02a23f78ce0e8ef9c78a3566ea36f35e183f5..6fc6f595625666010b99376018b25d1c9aafe62d 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -34,6 +34,7 @@
#include "content/public/browser/resource_request_info.h"
#include "content/public/browser/web_contents.h"
#include "net/base/mime_util.h"
+#include "net/base/network_change_notifier.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context_getter.h"
@@ -90,6 +91,103 @@ void RecordNavigationEvent(NavigationEvent event) {
NAVIGATION_EVENT_COUNT);
}
+enum PagePrefetchedNetworkType {
+ PAGE_PREFETCHED_NETWORK_TYPE_ALL = 0,
+ PAGE_PREFETCHED_NETWORK_TYPE_NETWORK_UNKNOWN = 1,
+ PAGE_PREFETCHED_NETWORK_TYPE_ETHERNET = 2,
+ PAGE_PREFETCHED_NETWORK_TYPE_WIFI = 3,
+ PAGE_PREFETCHED_NETWORK_TYPE_2G = 4,
+ PAGE_PREFETCHED_NETWORK_TYPE_3G = 5,
+ PAGE_PREFETCHED_NETWORK_TYPE_4G = 6,
+ PAGE_PREFETCHED_NETWORK_TYPE_NETWORK_NONE = 7,
+ PAGE_PREFETCHED_NETWORK_TYPE_BLUETOOTH = 8,
+ PAGE_PREFETCHED_NETWORK_TYPE_CELLULAR = 9,
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT = 10
+};
+
+enum PageNotPrefetchedNetworkType {
tburkard 2014/10/08 07:58:29 can't these be combined into a single enum, or, be
Zhen Wang 2014/10/14 04:12:12 Reusing enum types from net now.
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_ALL = 0,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_NETWORK_UNKNOWN = 1,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_ETHERNET = 2,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_WIFI = 3,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_2G = 4,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_3G = 5,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_4G = 6,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_NETWORK_NONE = 7,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_BLUETOOTH = 8,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_CELLULAR = 9,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_COUNT = 10
+};
+
+std::string GetNetworkTypeString() {
+ switch (net::NetworkChangeNotifier::GetConnectionType()) {
+ case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
+ return "Ethernet";
+ case net::NetworkChangeNotifier::CONNECTION_WIFI:
+ return "WiFi";
+ case net::NetworkChangeNotifier::CONNECTION_2G:
+ return "2G";
+ case net::NetworkChangeNotifier::CONNECTION_3G:
+ return "3G";
+ case net::NetworkChangeNotifier::CONNECTION_4G:
+ return "4G";
+ case net::NetworkChangeNotifier::CONNECTION_NONE:
+ return "NetworkNone";
+ case net::NetworkChangeNotifier::CONNECTION_BLUETOOTH:
+ return "Bluetooth";
+ case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
+ default:
+ break;
+ }
+ return "NetworkUnknown";
+}
+
+PagePrefetchedNetworkType GetPagePrefetchedNetworkType() {
+ switch (net::NetworkChangeNotifier::GetConnectionType()) {
+ case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
+ return PAGE_PREFETCHED_NETWORK_TYPE_ETHERNET;
+ case net::NetworkChangeNotifier::CONNECTION_WIFI:
+ return PAGE_PREFETCHED_NETWORK_TYPE_WIFI;
+ case net::NetworkChangeNotifier::CONNECTION_2G:
+ return PAGE_PREFETCHED_NETWORK_TYPE_2G;
+ case net::NetworkChangeNotifier::CONNECTION_3G:
+ return PAGE_PREFETCHED_NETWORK_TYPE_3G;
+ case net::NetworkChangeNotifier::CONNECTION_4G:
+ return PAGE_PREFETCHED_NETWORK_TYPE_4G;
+ case net::NetworkChangeNotifier::CONNECTION_NONE:
+ return PAGE_PREFETCHED_NETWORK_TYPE_NETWORK_NONE;
+ case net::NetworkChangeNotifier::CONNECTION_BLUETOOTH:
+ return PAGE_PREFETCHED_NETWORK_TYPE_BLUETOOTH;
+ case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
+ default:
+ break;
+ }
+ return PAGE_PREFETCHED_NETWORK_TYPE_NETWORK_UNKNOWN;
+}
+
+PageNotPrefetchedNetworkType GetPageNotPrefetchedNetworkType() {
+ switch (net::NetworkChangeNotifier::GetConnectionType()) {
+ case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_ETHERNET;
+ case net::NetworkChangeNotifier::CONNECTION_WIFI:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_WIFI;
+ case net::NetworkChangeNotifier::CONNECTION_2G:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_2G;
+ case net::NetworkChangeNotifier::CONNECTION_3G:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_3G;
+ case net::NetworkChangeNotifier::CONNECTION_4G:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_4G;
+ case net::NetworkChangeNotifier::CONNECTION_NONE:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_NETWORK_NONE;
+ case net::NetworkChangeNotifier::CONNECTION_BLUETOOTH:
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_BLUETOOTH;
+ case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
+ default:
+ break;
+ }
+ return PAGE_NOT_PREFETCHED_NETWORK_TYPE_NETWORK_UNKNOWN;
+}
+
} // namespace
namespace predictors {
@@ -525,6 +623,8 @@ void ResourcePrefetchPredictor::OnNavigationComplete(
RecordNavigationEvent(NAVIGATION_EVENT_ONLOAD_TRACKED_URL);
// Report any stats.
+ base::TimeDelta plt = base::TimeTicks::Now() - navigation_id.creation_time;
+ ReportPageLoadTimeStats(plt);
if (prefetch_manager_.get()) {
ResultsMap::iterator results_it = results_map_.find(navigation_id);
bool have_prefetch_results = results_it != results_map_.end();
@@ -534,6 +634,9 @@ void ResourcePrefetchPredictor::OnNavigationComplete(
ReportAccuracyStats(results_it->second->key_type,
*(nav_it->second),
results_it->second->requests.get());
+ ReportPageLoadTimePrefetchedStats(results_it->second->key_type, plt);
+ } else {
+ ReportPageLoadTimeNotPrefetchedStats(plt);
}
} else {
scoped_ptr<ResourcePrefetcher::RequestVector> requests(
@@ -1001,7 +1104,96 @@ void ResourcePrefetchPredictor::LearnNavigation(
}
////////////////////////////////////////////////////////////////////////////////
-// Accuracy measurement.
+// Page load time and accuracy measurement.
+
+#define REPORT_PLT(name, page_load_time) \
+ UMA_HISTOGRAM_CUSTOM_TIMES( \
+ name, \
+ page_load_time, \
+ base::TimeDelta::FromMilliseconds(10), \
+ base::TimeDelta::FromSeconds(60), \
+ 100)
+
+
+void ResourcePrefetchPredictor::ReportPageLoadTimeStats(
+ base::TimeDelta plt) const {
+ bool on_cellular =
+ net::NetworkChangeNotifier::IsConnectionCellular(
+ net::NetworkChangeNotifier::GetConnectionType());
+
+ REPORT_PLT("ResourcePrefetchPredictor.PLT", plt);
+ REPORT_PLT("ResourcePrefetchPredictor.PLT." + GetNetworkTypeString(), plt);
+ if (on_cellular)
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.Cellular", plt);
+}
+
+void ResourcePrefetchPredictor::ReportPageLoadTimePrefetchedStats(
+ PrefetchKeyType key_type,
+ base::TimeDelta plt) const {
+ bool on_cellular =
+ net::NetworkChangeNotifier::IsConnectionCellular(
+ net::NetworkChangeNotifier::GetConnectionType());
+
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PagePrefetchedNetworkType",
+ PAGE_PREFETCHED_NETWORK_TYPE_ALL,
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT);
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PagePrefetchedNetworkType",
+ GetPagePrefetchedNetworkType(),
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT);
+ if (on_cellular) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PagePrefetchedNetworkType",
+ PAGE_PREFETCHED_NETWORK_TYPE_CELLULAR,
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT);
+ }
+
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched", plt);
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched."
+ + GetNetworkTypeString(), plt);
+ if (on_cellular)
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched.Cellular", plt);
+
+ std::string histogram_type = key_type == PREFETCH_KEY_TYPE_HOST ? "Host" :
+ "Url";
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched." + histogram_type,
tburkard 2014/10/08 07:58:29 see comment below, this shouldn't work.
Zhen Wang 2014/10/14 04:12:12 Done.
+ plt);
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched." + histogram_type
tburkard 2014/10/08 07:58:29 ditto
Zhen Wang 2014/10/14 04:12:12 Done.
+ + "." + GetNetworkTypeString(), plt);
+ if (on_cellular) {
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PagePrefetched." + histogram_type
+ + ".Cellular", plt);
+ }
+}
+
+void ResourcePrefetchPredictor::ReportPageLoadTimeNotPrefetchedStats(
+ base::TimeDelta plt) const {
+ bool on_cellular =
+ net::NetworkChangeNotifier::IsConnectionCellular(
+ net::NetworkChangeNotifier::GetConnectionType());
+
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PageNotPrefetchedNetworkType",
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_ALL,
+ PAGE_NOT_PREFETCHED_NETWORK_TYPE_COUNT);
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PageNotPrefetchedNetworkType",
+ GetPageNotPrefetchedNetworkType(),
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT);
+ if (on_cellular) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourcePrefetchPredictor.PagePrefetchedNetworkType",
+ PAGE_PREFETCHED_NETWORK_TYPE_CELLULAR,
+ PAGE_PREFETCHED_NETWORK_TYPE_COUNT);
+ }
+
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PageNotPrefetched", plt);
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PageNotPrefetched."
+ + GetNetworkTypeString(), plt);
tburkard 2014/10/08 07:58:29 This should not work, if the user switches network
Zhen Wang 2014/10/14 04:12:12 I see. I duplicate the UMA calls now.
+ if (on_cellular)
+ REPORT_PLT("ResourcePrefetchPredictor.PLT.PageNotPrefetched.Cellular", plt);
+}
void ResourcePrefetchPredictor::ReportAccuracyStats(
PrefetchKeyType key_type,
« no previous file with comments | « chrome/browser/predictors/resource_prefetch_predictor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698