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

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: Adding macros to avoid having to use STATIC_HISTOGRAM_POINTER_BLOCK. 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
19 bool SummarizeResponse(net::URLRequest* request, 41 bool SummarizeResponse(net::URLRequest* request,
20 ResourcePrefetchPredictor::URLRequestSummary* summary) { 42 ResourcePrefetchPredictor::URLRequestSummary* summary) {
21 const content::ResourceRequestInfo* info = 43 const content::ResourceRequestInfo* info =
22 content::ResourceRequestInfo::ForRequest(request); 44 content::ResourceRequestInfo::ForRequest(request);
23 if (!info) { 45 if (!info) {
24 LOG(ERROR) << "No ResourceRequestInfo in request"; 46 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
47 REQUEST_STATS_NO_RESOURCE_REQUEST_INFO,
48 REQUEST_STATS_MAX);
25 return false; 49 return false;
26 } 50 }
27 51
28 int render_process_id, render_view_id; 52 int render_process_id, render_view_id;
29 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) { 53 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) {
30 LOG(ERROR) << "Could not get RenderViewId from request info."; 54 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
mmenke 2012/09/04 17:19:46 Rather than duplicate these two strings all over t
Shishir 2012/09/04 17:30:55 This would be hard to do efficiently. The histogra
55 REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO,
56 REQUEST_STATS_MAX);
31 return false; 57 return false;
32 } 58 }
33 59
34 summary->navigation_id.render_process_id = render_process_id; 60 summary->navigation_id.render_process_id = render_process_id;
35 summary->navigation_id.render_view_id = render_view_id; 61 summary->navigation_id.render_view_id = render_view_id;
36 summary->navigation_id.main_frame_url = request->first_party_for_cookies(); 62 summary->navigation_id.main_frame_url = request->first_party_for_cookies();
37 summary->navigation_id.creation_time = request->creation_time(); 63 summary->navigation_id.creation_time = request->creation_time();
38 summary->resource_url = request->original_url(); 64 summary->resource_url = request->original_url();
39 summary->resource_type = info->GetResourceType(); 65 summary->resource_type = info->GetResourceType();
40 request->GetMimeType(&summary->mime_type); 66 request->GetMimeType(&summary->mime_type);
(...skipping 25 matching lines...) Expand all
66 BrowserThread::CurrentlyOn(BrowserThread::IO)); 92 BrowserThread::CurrentlyOn(BrowserThread::IO));
67 } 93 }
68 94
69 void ResourcePrefetchPredictorObserver::OnRequestStarted( 95 void ResourcePrefetchPredictorObserver::OnRequestStarted(
70 net::URLRequest* request, 96 net::URLRequest* request,
71 ResourceType::Type resource_type, 97 ResourceType::Type resource_type,
72 int child_id, 98 int child_id,
73 int route_id) { 99 int route_id) {
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
75 101
102 if (resource_type == ResourceType::MAIN_FRAME) {
103 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
104 MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS,
105 MAIN_FRAME_REQUEST_STATS_MAX);
106 }
107
76 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type)) 108 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
77 return; 109 return;
78 110
79 ResourcePrefetchPredictor::URLRequestSummary summary; 111 ResourcePrefetchPredictor::URLRequestSummary summary;
80 summary.navigation_id.render_process_id = child_id; 112 summary.navigation_id.render_process_id = child_id;
81 summary.navigation_id.render_view_id = route_id; 113 summary.navigation_id.render_view_id = route_id;
82 summary.navigation_id.main_frame_url = request->first_party_for_cookies(); 114 summary.navigation_id.main_frame_url = request->first_party_for_cookies();
83 summary.resource_url = request->original_url(); 115 summary.resource_url = request->original_url();
84 summary.resource_type = resource_type; 116 summary.resource_type = resource_type;
85 117
86 BrowserThread::PostTask( 118 BrowserThread::PostTask(
87 BrowserThread::UI, 119 BrowserThread::UI,
88 FROM_HERE, 120 FROM_HERE,
89 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest, 121 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest,
90 predictor_, 122 predictor_,
91 summary)); 123 summary));
124
125 if (resource_type == ResourceType::MAIN_FRAME) {
126 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
127 MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS,
128 MAIN_FRAME_REQUEST_STATS_MAX);
129 }
92 } 130 }
93 131
94 void ResourcePrefetchPredictorObserver::OnRequestRedirected( 132 void ResourcePrefetchPredictorObserver::OnRequestRedirected(
95 const GURL& redirect_url, 133 const GURL& redirect_url,
96 net::URLRequest* request) { 134 net::URLRequest* request) {
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
98 136
137 const content::ResourceRequestInfo* request_info =
138 content::ResourceRequestInfo::ForRequest(request);
139 if (request_info &&
140 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
141 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
142 MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS,
143 MAIN_FRAME_REQUEST_STATS_MAX);
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 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
165 MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS,
166 MAIN_FRAME_REQUEST_STATS_MAX);
167 }
114 } 168 }
115 169
116 void ResourcePrefetchPredictorObserver::OnResponseStarted( 170 void ResourcePrefetchPredictorObserver::OnResponseStarted(
117 net::URLRequest* request) { 171 net::URLRequest* request) {
118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
119 173
174 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
175 REQUEST_STATS_TOTAL_RESPONSES,
176 REQUEST_STATS_MAX);
177
178 const content::ResourceRequestInfo* request_info =
179 content::ResourceRequestInfo::ForRequest(request);
180 if (request_info &&
181 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
182 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats",
183 MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES,
184 MAIN_FRAME_REQUEST_STATS_MAX);
185 }
186
120 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request)) 187 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
121 return; 188 return;
122 ResourcePrefetchPredictor::URLRequestSummary summary; 189 ResourcePrefetchPredictor::URLRequestSummary summary;
123 if (!SummarizeResponse(request, &summary)) 190 if (!SummarizeResponse(request, &summary))
124 return; 191 return;
125 192
126 BrowserThread::PostTask( 193 BrowserThread::PostTask(
127 BrowserThread::UI, 194 BrowserThread::UI,
128 FROM_HERE, 195 FROM_HERE,
129 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse, 196 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse,
130 predictor_, 197 predictor_,
131 summary)); 198 summary));
199
200 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats",
201 REQUEST_STATS_TOTAL_PROCESSED_RESPONSES,
202 REQUEST_STATS_MAX);
203 if (request_info &&
204 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
205 UMA_HISTOGRAM_ENUMERATION(
206 "ResourcePrefetchPredictor.NavigationStatsMainFrame",
207 MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES,
208 MAIN_FRAME_REQUEST_STATS_MAX);
209 }
132 } 210 }
133 211
134 } // namespace chrome_browser_net 212 } // 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