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

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: 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
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 navigation statistics. The "PROCESSED" values refers to
21 // the ones that are handled by the predictor.
22 enum NavigationStats {
23 NAVIGATION_STATS_TOTAL_MAIN_FRAME_REQUESTS = 0,
24 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REQUESTS = 1,
25 NAVIGATION_STATS_TOTAL_MAIN_FRAME_REDIRECTS = 2,
26 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REDIRECTS = 3,
27 NAVIGATION_STATS_TOTAL_MAIN_FRAME_RESPONSES = 4,
28 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_RESPONSES = 5,
29 NAVIGATION_STATS_TOTAL_SUBRESOURCE_RESPONSES = 6,
30 NAVIGATION_STATS_PROCESSED_SUBRESOURCE_RESPONSES = 7,
31 NAVIGATION_STATS_MAX = 8,
32 };
33
34
19 bool SummarizeResponse(net::URLRequest* request, 35 bool SummarizeResponse(net::URLRequest* request,
20 ResourcePrefetchPredictor::URLRequestSummary* summary) { 36 ResourcePrefetchPredictor::URLRequestSummary* summary) {
21 const content::ResourceRequestInfo* info = 37 const content::ResourceRequestInfo* info =
22 content::ResourceRequestInfo::ForRequest(request); 38 content::ResourceRequestInfo::ForRequest(request);
23 if (!info) { 39 if (!info) {
24 LOG(ERROR) << "No ResourceRequestInfo in request"; 40 UMA_HISTOGRAM_BOOLEAN("ResourcePrefetchPredictor.NoResourceRequestInfo",
dominich 2012/08/29 22:29:29 you can also use HISTOGRAM_ENUMERATION with the pa
Shishir 2012/08/29 22:51:06 Since this corner case happens rarely (I assume),
dominich 2012/08/29 23:16:49 but without that how do you know if it's a signifi
Shishir 2012/08/30 03:58:36 Redid this so we have base.
41 true);
25 return false; 42 return false;
26 } 43 }
27 44
28 int render_process_id, render_view_id; 45 int render_process_id, render_view_id;
29 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) { 46 if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) {
30 LOG(ERROR) << "Could not get RenderViewId from request info."; 47 UMA_HISTOGRAM_BOOLEAN(
dominich 2012/08/29 22:29:29 as above
Shishir 2012/08/29 22:51:06 as above :)
48 "ResourcePrefetchPredictor.NoRenderViewIdFromrResourceRequestInfo",
dominich 2012/08/29 22:29:29 typo: FromrResource ?
Shishir 2012/08/29 22:51:06 Fixed.
49 true);
31 return false; 50 return false;
32 } 51 }
33 52
34 summary->navigation_id.render_process_id = render_process_id; 53 summary->navigation_id.render_process_id = render_process_id;
35 summary->navigation_id.render_view_id = render_view_id; 54 summary->navigation_id.render_view_id = render_view_id;
36 summary->navigation_id.main_frame_url = request->first_party_for_cookies(); 55 summary->navigation_id.main_frame_url = request->first_party_for_cookies();
37 summary->navigation_id.creation_time = request->creation_time(); 56 summary->navigation_id.creation_time = request->creation_time();
38 summary->resource_url = request->original_url(); 57 summary->resource_url = request->original_url();
39 summary->resource_type = info->GetResourceType(); 58 summary->resource_type = info->GetResourceType();
40 request->GetMimeType(&summary->mime_type); 59 request->GetMimeType(&summary->mime_type);
(...skipping 25 matching lines...) Expand all
66 BrowserThread::CurrentlyOn(BrowserThread::IO)); 85 BrowserThread::CurrentlyOn(BrowserThread::IO));
67 } 86 }
68 87
69 void ResourcePrefetchPredictorObserver::OnRequestStarted( 88 void ResourcePrefetchPredictorObserver::OnRequestStarted(
70 net::URLRequest* request, 89 net::URLRequest* request,
71 ResourceType::Type resource_type, 90 ResourceType::Type resource_type,
72 int child_id, 91 int child_id,
73 int route_id) { 92 int route_id) {
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 93 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
75 94
95 if (resource_type == ResourceType::MAIN_FRAME) {
96 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
97 NAVIGATION_STATS_TOTAL_MAIN_FRAME_REQUESTS,
98 NAVIGATION_STATS_MAX);
99 }
100
76 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type)) 101 if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type))
77 return; 102 return;
78 103
79 ResourcePrefetchPredictor::URLRequestSummary summary; 104 ResourcePrefetchPredictor::URLRequestSummary summary;
80 summary.navigation_id.render_process_id = child_id; 105 summary.navigation_id.render_process_id = child_id;
81 summary.navigation_id.render_view_id = route_id; 106 summary.navigation_id.render_view_id = route_id;
82 summary.navigation_id.main_frame_url = request->first_party_for_cookies(); 107 summary.navigation_id.main_frame_url = request->first_party_for_cookies();
83 summary.resource_url = request->original_url(); 108 summary.resource_url = request->original_url();
84 summary.resource_type = resource_type; 109 summary.resource_type = resource_type;
85 110
86 BrowserThread::PostTask( 111 BrowserThread::PostTask(
87 BrowserThread::UI, 112 BrowserThread::UI,
88 FROM_HERE, 113 FROM_HERE,
89 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest, 114 base::Bind(&ResourcePrefetchPredictor::RecordURLRequest,
90 predictor_, 115 predictor_,
91 summary)); 116 summary));
117
118 if (resource_type == ResourceType::MAIN_FRAME) {
119 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
120 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REQUESTS,
121 NAVIGATION_STATS_MAX);
122 }
92 } 123 }
93 124
94 void ResourcePrefetchPredictorObserver::OnRequestRedirected( 125 void ResourcePrefetchPredictorObserver::OnRequestRedirected(
95 const GURL& redirect_url, 126 const GURL& redirect_url,
96 net::URLRequest* request) { 127 net::URLRequest* request) {
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 128 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
98 129
130 const content::ResourceRequestInfo* request_info =
131 content::ResourceRequestInfo::ForRequest(request);
132 if (request_info &&
133 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
134 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
135 NAVIGATION_STATS_TOTAL_MAIN_FRAME_REDIRECTS,
136 NAVIGATION_STATS_MAX);
137 }
138
99 if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request)) 139 if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request))
100 return; 140 return;
101 141
102 ResourcePrefetchPredictor::URLRequestSummary summary; 142 ResourcePrefetchPredictor::URLRequestSummary summary;
103 if (!SummarizeResponse(request, &summary)) 143 if (!SummarizeResponse(request, &summary))
104 return; 144 return;
105 145
106 summary.redirect_url = redirect_url; 146 summary.redirect_url = redirect_url;
107 147
108 BrowserThread::PostTask( 148 BrowserThread::PostTask(
109 BrowserThread::UI, 149 BrowserThread::UI,
110 FROM_HERE, 150 FROM_HERE,
111 base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect, 151 base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect,
112 predictor_, 152 predictor_,
113 summary)); 153 summary));
154
155 if (request_info &&
156 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
157 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
158 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REDIRECTS,
159 NAVIGATION_STATS_MAX);
160 }
114 } 161 }
115 162
116 void ResourcePrefetchPredictorObserver::OnResponseStarted( 163 void ResourcePrefetchPredictorObserver::OnResponseStarted(
117 net::URLRequest* request) { 164 net::URLRequest* request) {
118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 165 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
119 166
167 const content::ResourceRequestInfo* request_info =
168 content::ResourceRequestInfo::ForRequest(request);
169 if (request_info &&
170 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
171 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
172 NAVIGATION_STATS_TOTAL_MAIN_FRAME_RESPONSES,
173 NAVIGATION_STATS_MAX);
174 } else {
175 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
176 NAVIGATION_STATS_TOTAL_SUBRESOURCE_RESPONSES,
177 NAVIGATION_STATS_MAX);
178 }
179
120 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request)) 180 if (!ResourcePrefetchPredictor::ShouldRecordResponse(request))
121 return; 181 return;
122 ResourcePrefetchPredictor::URLRequestSummary summary; 182 ResourcePrefetchPredictor::URLRequestSummary summary;
123 if (!SummarizeResponse(request, &summary)) 183 if (!SummarizeResponse(request, &summary))
124 return; 184 return;
125 185
126 BrowserThread::PostTask( 186 BrowserThread::PostTask(
127 BrowserThread::UI, 187 BrowserThread::UI,
128 FROM_HERE, 188 FROM_HERE,
129 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse, 189 base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse,
130 predictor_, 190 predictor_,
131 summary)); 191 summary));
192
193 if (request_info &&
194 request_info->GetResourceType() == ResourceType::MAIN_FRAME) {
195 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
196 NAVIGATION_STATS_PROCESSED_MAIN_FRAME_RESPONSES,
197 NAVIGATION_STATS_MAX);
198 } else {
199 UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats",
200 NAVIGATION_STATS_PROCESSED_SUBRESOURCE_RESPONSES,
201 NAVIGATION_STATS_MAX);
202 }
132 } 203 }
133 204
134 } // namespace chrome_browser_net 205 } // namespace chrome_browser_net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698