Chromium Code Reviews| Index: chrome/browser/net/resource_prefetch_predictor_observer.cc |
| diff --git a/chrome/browser/net/resource_prefetch_predictor_observer.cc b/chrome/browser/net/resource_prefetch_predictor_observer.cc |
| index 3ea85dce301159ffc72706fdb0c78a88f8339b13..fedd8bc2b5915e0e8ee730dd6cd7c0634862e5c4 100644 |
| --- a/chrome/browser/net/resource_prefetch_predictor_observer.cc |
| +++ b/chrome/browser/net/resource_prefetch_predictor_observer.cc |
| @@ -6,6 +6,7 @@ |
| #include <string> |
| +#include "base/metrics/histogram.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/resource_request_info.h" |
| #include "googleurl/src/gurl.h" |
| @@ -16,18 +17,36 @@ using predictors::ResourcePrefetchPredictor; |
| namespace { |
| +// Enum for measuring navigation statistics. The "PROCESSED" values refers to |
| +// the ones that are handled by the predictor. |
| +enum NavigationStats { |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_REQUESTS = 0, |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REQUESTS = 1, |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_REDIRECTS = 2, |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REDIRECTS = 3, |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_RESPONSES = 4, |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_RESPONSES = 5, |
| + NAVIGATION_STATS_TOTAL_SUBRESOURCE_RESPONSES = 6, |
| + NAVIGATION_STATS_PROCESSED_SUBRESOURCE_RESPONSES = 7, |
| + NAVIGATION_STATS_MAX = 8, |
| +}; |
| + |
| + |
| bool SummarizeResponse(net::URLRequest* request, |
| ResourcePrefetchPredictor::URLRequestSummary* summary) { |
| const content::ResourceRequestInfo* info = |
| content::ResourceRequestInfo::ForRequest(request); |
| if (!info) { |
| - LOG(ERROR) << "No ResourceRequestInfo in request"; |
| + 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.
|
| + true); |
| return false; |
| } |
| int render_process_id, render_view_id; |
| if (!info->GetAssociatedRenderView(&render_process_id, &render_view_id)) { |
| - LOG(ERROR) << "Could not get RenderViewId from request info."; |
| + UMA_HISTOGRAM_BOOLEAN( |
|
dominich
2012/08/29 22:29:29
as above
Shishir
2012/08/29 22:51:06
as above :)
|
| + "ResourcePrefetchPredictor.NoRenderViewIdFromrResourceRequestInfo", |
|
dominich
2012/08/29 22:29:29
typo: FromrResource ?
Shishir
2012/08/29 22:51:06
Fixed.
|
| + true); |
| return false; |
| } |
| @@ -73,6 +92,12 @@ void ResourcePrefetchPredictorObserver::OnRequestStarted( |
| int route_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + if (resource_type == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_REQUESTS, |
| + NAVIGATION_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type)) |
| return; |
| @@ -89,6 +114,12 @@ void ResourcePrefetchPredictorObserver::OnRequestStarted( |
| base::Bind(&ResourcePrefetchPredictor::RecordURLRequest, |
| predictor_, |
| summary)); |
| + |
| + if (resource_type == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REQUESTS, |
| + NAVIGATION_STATS_MAX); |
| + } |
| } |
| void ResourcePrefetchPredictorObserver::OnRequestRedirected( |
| @@ -96,6 +127,15 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected( |
| net::URLRequest* request) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + const content::ResourceRequestInfo* request_info = |
| + content::ResourceRequestInfo::ForRequest(request); |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_REDIRECTS, |
| + NAVIGATION_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request)) |
| return; |
| @@ -111,12 +151,32 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected( |
| base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect, |
| predictor_, |
| summary)); |
| + |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_REDIRECTS, |
| + NAVIGATION_STATS_MAX); |
| + } |
| } |
| void ResourcePrefetchPredictorObserver::OnResponseStarted( |
| net::URLRequest* request) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + const content::ResourceRequestInfo* request_info = |
| + content::ResourceRequestInfo::ForRequest(request); |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_TOTAL_MAIN_FRAME_RESPONSES, |
| + NAVIGATION_STATS_MAX); |
| + } else { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_TOTAL_SUBRESOURCE_RESPONSES, |
| + NAVIGATION_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordResponse(request)) |
| return; |
| ResourcePrefetchPredictor::URLRequestSummary summary; |
| @@ -129,6 +189,17 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted( |
| base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse, |
| predictor_, |
| summary)); |
| + |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_PROCESSED_MAIN_FRAME_RESPONSES, |
| + NAVIGATION_STATS_MAX); |
| + } else { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.NavigationStats", |
| + NAVIGATION_STATS_PROCESSED_SUBRESOURCE_RESPONSES, |
| + NAVIGATION_STATS_MAX); |
| + } |
| } |
| } // namespace chrome_browser_net |