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 3c5da2843d3839f01c2209d332ad2a1c35925aa5..e20ba57defd47cf09679ba46bc74bd5234b9b0d6 100644 |
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc |
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc |
@@ -120,6 +120,38 @@ void GetUrlVisitCountTask::DoneRunOnMainThread() { |
GetUrlVisitCountTask::~GetUrlVisitCountTask() {} |
+void ReportPredictionAccuracy( |
+ const std::vector<GURL>& predicted_urls, |
+ const ResourcePrefetchPredictor::PageRequestSummary& summary) { |
+ DCHECK(!predicted_urls.empty()); |
+ |
+ if (predicted_urls.empty() || summary.subresource_requests.empty()) |
+ return; |
+ |
+ std::set<GURL> predicted_urls_set(predicted_urls.begin(), |
+ predicted_urls.end()); |
+ std::set<GURL> actual_urls_set; |
+ for (const auto& request_summary : summary.subresource_requests) |
+ actual_urls_set.insert(request_summary.resource_url); |
+ |
+ size_t correctly_predicted_count = 0; |
+ for (const GURL& predicted_url : predicted_urls_set) { |
+ if (actual_urls_set.find(predicted_url) != actual_urls_set.end()) |
+ correctly_predicted_count++; |
+ } |
+ |
+ size_t precision_percentage = |
+ (100 * correctly_predicted_count) / predicted_urls_set.size(); |
+ size_t recall_percentage = |
+ (100 * correctly_predicted_count) / actual_urls_set.size(); |
+ |
+ UMA_HISTOGRAM_PERCENTAGE( |
+ internal::kResourcePrefetchPredictorPrecisionHistogram, |
+ precision_percentage); |
+ UMA_HISTOGRAM_PERCENTAGE(internal::kResourcePrefetchPredictorRecallHistogram, |
+ recall_percentage); |
+} |
+ |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
@@ -602,6 +634,12 @@ void ResourcePrefetchPredictor::OnNavigationComplete( |
std::unique_ptr<PageRequestSummary> summary = std::move(nav_it->second); |
inflight_navigations_.erase(nav_it); |
+ std::vector<GURL> predicted_urls; |
+ bool has_data = GetPrefetchData(nav_id_without_timing_info.main_frame_url, |
+ &predicted_urls); |
+ if (has_data) |
+ ReportPredictionAccuracy(predicted_urls, *summary); |
+ |
// Kick off history lookup to determine if we should record the URL. |
history::HistoryService* history_service = |
HistoryServiceFactory::GetForProfile(profile_, |