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

Side by Side Diff: chrome/browser/net/resource_prefetch_predictor_observer.cc

Issue 10900037: Adding more histograms to ResourcePrefetchPredictor. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Addressing Matt's comments. Created 8 years, 3 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
« no previous file with comments | « no previous file | chrome/browser/predictors/predictor_database.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/resource_prefetch_predictor_observer.h" 5 #include "chrome/browser/net/resource_prefetch_predictor_observer.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/metrics/histogram.h"
9 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/resource_request_info.h" 11 #include "content/public/browser/resource_request_info.h"
11 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
12 #include "net/url_request/url_request.h" 13 #include "net/url_request/url_request.h"
13 14
14 using content::BrowserThread; 15 using content::BrowserThread;
15 using predictors::ResourcePrefetchPredictor; 16 using predictors::ResourcePrefetchPredictor;
16 17
17 namespace { 18 namespace {
18 19
20 // Enum for measuring statistics pertaining to observed request, responses and
21 // redirects.
22 enum RequestStats {
23 REQUEST_STATS_TOTAL_RESPONSES = 0,
24 REQUEST_STATS_TOTAL_PROCESSED_RESPONSES = 1,
25 REQUEST_STATS_NO_RESOURCE_REQUEST_INFO = 2,
26 REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO = 3,
27 REQUEST_STATS_MAX = 4,
28 };
29
30 // Specific to main frame requests.
31 enum MainFrameRequestStats {
32 MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS = 0,
33 MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS = 1,
34 MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS = 2,
35 MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS = 3,
36 MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES = 4,
37 MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES = 5,
38 MAIN_FRAME_REQUEST_STATS_MAX = 6,
39 };
40
41 void ReportRequestStats(RequestStats stat) {
mmenke 2012/09/04 18:14:01 These should be in an anonymous namespace.
Shishir 2012/09/04 19:15:19 It already is :)
mmenke 2012/09/04 19:16:41 Umm...Erm... Of course I knew that! I was just m
42 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
43 stat,
44 REQUEST_STATS_MAX);
45 }
46
47 void ReportMainFrameRequestStats(MainFrameRequestStats stat) {
48 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
49 stat,
50 MAIN_FRAME_REQUEST_STATS_MAX);
51 }
52
19 bool SummarizeResponse(net::URLRequest* request, 53 bool SummarizeResponse(net::URLRequest* request,
20 ResourcePrefetchPredictor::URLRequestSummary* summary) { 54 ResourcePrefetchPredictor::URLRequestSummary* summary) {
21 const content::ResourceRequestInfo* info = 55 const content::ResourceRequestInfo* info =
22 content::ResourceRequestInfo::ForRequest(request); 56 content::ResourceRequestInfo::ForRequest(request);
23 if (!info) { 57 if (!info) {
24 LOG(ERROR) << "No ResourceRequestInfo in request"; 58 ReportRequestStats(REQUEST_STATS_NO_RESOURCE_REQUEST_INFO);
25 return false; 59 return false;
26 } 60 }
27 61
28 int render_process_id, render_view_id; 62 int render_process_id, render_view_id;
29 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) { 63 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) {
30 LOG(ERROR) << "Could not get RenderViewId from request info."; 64 ReportRequestStats(REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO);
31 return false; 65 return false;
32 } 66 }
33 67
34 summary->navigation_id.render_process_id = render_process_id; 68 summary->navigation_id.render_process_id = render_process_id;
35 summary->navigation_id.render_view_id = render_view_id; 69 summary->navigation_id.render_view_id = render_view_id;
36 summary->navigation_id.main_frame_url = request->first_party_for_cookies(); 70 summary->navigation_id.main_frame_url = request->first_party_for_cookies();
37 summary->navigation_id.creation_time = request->creation_time(); 71 summary->navigation_id.creation_time = request->creation_time();
38 summary->resource_url = request->original_url(); 72 summary->resource_url = request->original_url();
39 summary->resource_type = info->GetResourceType(); 73 summary->resource_type = info->GetResourceType();
40 request->GetMimeType(&summary->mime_type); 74 request->GetMimeType(&summary->mime_type);
(...skipping 25 matching lines...) Expand all
66 BrowserThread::CurrentlyOn(BrowserThread::IO)); 100 BrowserThread::CurrentlyOn(BrowserThread::IO));
67 } 101 }
68 102
69 void ResourcePrefetchPredictorObserver::OnRequestStarted( 103 void ResourcePrefetchPredictorObserver::OnRequestStarted(
70 net::URLRequest* request, 104 net::URLRequest* request,
71 ResourceType::Type resource_type, 105 ResourceType::Type resource_type,
72 int child_id, 106 int child_id,
73 int route_id) { 107 int route_id) {
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
75 109
110 if (resource_type == ResourceType::MAIN_FRAME)
111 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS);
112
76 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type)) 113 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
77 return; 114 return;
78 115
79 ResourcePrefetchPredictor::URLRequestSummary summary; 116 ResourcePrefetchPredictor::URLRequestSummary summary;
80 summary.navigation_id.render_process_id = child_id; 117 summary.navigation_id.render_process_id = child_id;
81 summary.navigation_id.render_view_id = route_id; 118 summary.navigation_id.render_view_id = route_id;
82 summary.navigation_id.main_frame_url = request->first_party_for_cookies(); 119 summary.navigation_id.main_frame_url = request->first_party_for_cookies();
83 summary.resource_url = request->original_url(); 120 summary.resource_url = request->original_url();
84 summary.resource_type = resource_type; 121 summary.resource_type = resource_type;
85 122
86 BrowserThread::PostTask( 123 BrowserThread::PostTask(
87 BrowserThread::UI, 124 BrowserThread::UI,
88 FROM_HERE, 125 FROM_HERE,
89 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest, 126 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest,
90 predictor_, 127 predictor_,
91 summary)); 128 summary));
129
130 if (resource_type == ResourceType::MAIN_FRAME)
131 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS);
92 } 132 }
93 133
94 void ResourcePrefetchPredictorObserver::OnRequestRedirected( 134 void ResourcePrefetchPredictorObserver::OnRequestRedirected(
95 const GURL& redirect_url, 135 const GURL& redirect_url,
96 net::URLRequest* request) { 136 net::URLRequest* request) {
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
98 138
139 const content::ResourceRequestInfo* request_info =
140 content::ResourceRequestInfo::ForRequest(request);
141 if (request_info &&
142 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
143 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS);
144 }
145
99 if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request)) 146 if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
100 return; 147 return;
101 148
102 ResourcePrefetchPredictor::URLRequestSummary summary; 149 ResourcePrefetchPredictor::URLRequestSummary summary;
103 if (!SummarizeResponse(request, &summary)) 150 if (!SummarizeResponse(request, &summary))
104 return; 151 return;
105 152
106 summary.redirect_url = redirect_url; 153 summary.redirect_url = redirect_url;
107 154
108 BrowserThread::PostTask( 155 BrowserThread::PostTask(
109 BrowserThread::UI, 156 BrowserThread::UI,
110 FROM_HERE, 157 FROM_HERE,
111 base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect, 158 base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect,
112 predictor_, 159 predictor_,
113 summary)); 160 summary));
161
162 if (request_info &&
163 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
164 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS);
165 }
114 } 166 }
115 167
116 void ResourcePrefetchPredictorObserver::OnResponseStarted( 168 void ResourcePrefetchPredictorObserver::OnResponseStarted(
117 net::URLRequest* request) { 169 net::URLRequest* request) {
118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
119 171
172 ReportRequestStats(REQUEST_STATS_TOTAL_RESPONSES);
173
174 const content::ResourceRequestInfo* request_info =
175 content::ResourceRequestInfo::ForRequest(request);
176 if (request_info &&
177 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
178 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES);
179 }
180
120 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request)) 181 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
121 return; 182 return;
122 ResourcePrefetchPredictor::URLRequestSummary summary; 183 ResourcePrefetchPredictor::URLRequestSummary summary;
123 if (!SummarizeResponse(request, &summary)) 184 if (!SummarizeResponse(request, &summary))
124 return; 185 return;
125 186
126 BrowserThread::PostTask( 187 BrowserThread::PostTask(
127 BrowserThread::UI, 188 BrowserThread::UI,
128 FROM_HERE, 189 FROM_HERE,
129 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse, 190 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse,
130 predictor_, 191 predictor_,
131 summary)); 192 summary));
193
194 ReportRequestStats(REQUEST_STATS_TOTAL_PROCESSED_RESPONSES);
195 if (request_info &&
196 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
197 ReportMainFrameRequestStats(MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES);
198 }
132 } 199 }
133 200
134 } // namespace chrome_browser_net 201 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/predictors/predictor_database.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698