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

Side by Side Diff: chrome/browser/predictors/resource_prefetch_predictor.cc

Issue 2640343002: predictors: Add precision / recall histograms for speculative prefetch. (Closed)
Patch Set: Created 3 years, 11 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/predictors/resource_prefetch_predictor.h" 5 #include "chrome/browser/predictors/resource_prefetch_predictor.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 visit_count_ = url_row.visit_count(); 113 visit_count_ = url_row.visit_count();
114 return true; 114 return true;
115 } 115 }
116 116
117 void GetUrlVisitCountTask::DoneRunOnMainThread() { 117 void GetUrlVisitCountTask::DoneRunOnMainThread() {
118 callback_.Run(visit_count_, *summary_); 118 callback_.Run(visit_count_, *summary_);
119 } 119 }
120 120
121 GetUrlVisitCountTask::~GetUrlVisitCountTask() {} 121 GetUrlVisitCountTask::~GetUrlVisitCountTask() {}
122 122
123 void ReportPredictionAccuracy(
124 const std::vector<GURL>& predicted_urls,
125 const ResourcePrefetchPredictor::PageRequestSummary& summary) {
126 DCHECK(!predicted_urls.empty());
127
128 if (predicted_urls.empty() || summary.subresource_requests.empty())
129 return;
130
131 std::set<GURL> predicted_urls_set(predicted_urls.begin(),
132 predicted_urls.end());
133 std::set<GURL> actual_urls_set;
134 for (const auto& request_summary : summary.subresource_requests)
135 actual_urls_set.insert(request_summary.resource_url);
136
137 size_t correctly_predicted_count = 0;
138 for (const GURL& predicted_url : predicted_urls_set) {
139 if (actual_urls_set.find(predicted_url) != actual_urls_set.end())
140 correctly_predicted_count++;
141 }
142
143 size_t precision_percentage =
144 (100 * correctly_predicted_count) / predicted_urls_set.size();
145 size_t recall_percentage =
146 (100 * correctly_predicted_count) / actual_urls_set.size();
147
148 UMA_HISTOGRAM_PERCENTAGE(
149 internal::kResourcePrefetchPredictorPrecisionHistogram,
150 precision_percentage);
151 UMA_HISTOGRAM_PERCENTAGE(internal::kResourcePrefetchPredictorRecallHistogram,
152 recall_percentage);
153 }
154
123 } // namespace 155 } // namespace
124 156
125 //////////////////////////////////////////////////////////////////////////////// 157 ////////////////////////////////////////////////////////////////////////////////
126 // ResourcePrefetchPredictor static functions. 158 // ResourcePrefetchPredictor static functions.
127 159
128 // static 160 // static
129 bool ResourcePrefetchPredictor::ShouldRecordRequest( 161 bool ResourcePrefetchPredictor::ShouldRecordRequest(
130 net::URLRequest* request, 162 net::URLRequest* request,
131 content::ResourceType resource_type) { 163 content::ResourceType resource_type) {
132 const content::ResourceRequestInfo* request_info = 164 const content::ResourceRequestInfo* request_info =
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 627
596 NavigationMap::iterator nav_it = 628 NavigationMap::iterator nav_it =
597 inflight_navigations_.find(nav_id_without_timing_info); 629 inflight_navigations_.find(nav_id_without_timing_info);
598 if (nav_it == inflight_navigations_.end()) 630 if (nav_it == inflight_navigations_.end())
599 return; 631 return;
600 632
601 // Remove the navigation from the inflight navigations. 633 // Remove the navigation from the inflight navigations.
602 std::unique_ptr<PageRequestSummary> summary = std::move(nav_it->second); 634 std::unique_ptr<PageRequestSummary> summary = std::move(nav_it->second);
603 inflight_navigations_.erase(nav_it); 635 inflight_navigations_.erase(nav_it);
604 636
637 std::vector<GURL> predicted_urls;
638 bool has_data = GetPrefetchData(nav_id_without_timing_info.main_frame_url,
639 &predicted_urls);
640 if (has_data)
641 ReportPredictionAccuracy(predicted_urls, *summary);
642
605 // Kick off history lookup to determine if we should record the URL. 643 // Kick off history lookup to determine if we should record the URL.
606 history::HistoryService* history_service = 644 history::HistoryService* history_service =
607 HistoryServiceFactory::GetForProfile(profile_, 645 HistoryServiceFactory::GetForProfile(profile_,
608 ServiceAccessType::EXPLICIT_ACCESS); 646 ServiceAccessType::EXPLICIT_ACCESS);
609 DCHECK(history_service); 647 DCHECK(history_service);
610 history_service->ScheduleDBTask( 648 history_service->ScheduleDBTask(
611 std::unique_ptr<history::HistoryDBTask>(new GetUrlVisitCountTask( 649 std::unique_ptr<history::HistoryDBTask>(new GetUrlVisitCountTask(
612 std::move(summary), 650 std::move(summary),
613 base::Bind(&ResourcePrefetchPredictor::OnVisitCountLookup, 651 base::Bind(&ResourcePrefetchPredictor::OnVisitCountLookup,
614 AsWeakPtr()))), 652 AsWeakPtr()))),
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 TestObserver::~TestObserver() { 1250 TestObserver::~TestObserver() {
1213 predictor_->SetObserverForTesting(nullptr); 1251 predictor_->SetObserverForTesting(nullptr);
1214 } 1252 }
1215 1253
1216 TestObserver::TestObserver(ResourcePrefetchPredictor* predictor) 1254 TestObserver::TestObserver(ResourcePrefetchPredictor* predictor)
1217 : predictor_(predictor) { 1255 : predictor_(predictor) {
1218 predictor_->SetObserverForTesting(this); 1256 predictor_->SetObserverForTesting(this);
1219 } 1257 }
1220 1258
1221 } // namespace predictors 1259 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698