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..83c2c37931d64a794a41df69ede749b7d5bba8c2 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,43 @@ using predictors::ResourcePrefetchPredictor; |
| namespace { |
| +// Enum for measuring statistics pertaining to observed request, responses and |
| +// redirects. |
| +enum RequestStats { |
| + REQUEST_STATS_TOTAL_RESPONSES = 0, |
| + REQUEST_STATS_TOTAL_PROCESSED_RESPONSES = 1, |
| + REQUEST_STATS_NO_RESOURCE_REQUEST_INFO = 2, |
| + REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO = 3, |
| + REQUEST_STATS_MAX = 4, |
| +}; |
| + |
| +// Specific to main frame requests. |
| +enum MainFrameRequestStats { |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS = 0, |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS = 1, |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS = 2, |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS = 3, |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES = 4, |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES = 5, |
| + MAIN_FRAME_REQUEST_STATS_MAX = 6, |
| +}; |
| + |
| 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_ENUMERATION("ResourcePrefetchPredictor.RequestStats", |
| + REQUEST_STATS_NO_RESOURCE_REQUEST_INFO, |
| + REQUEST_STATS_MAX); |
| 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_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
|
| + REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO, |
| + REQUEST_STATS_MAX); |
| return false; |
| } |
| @@ -73,6 +99,12 @@ void ResourcePrefetchPredictorObserver::OnRequestStarted( |
| int route_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + if (resource_type == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats", |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordRequest(request, resource_type)) |
| return; |
| @@ -89,6 +121,12 @@ void ResourcePrefetchPredictorObserver::OnRequestStarted( |
| base::Bind(&ResourcePrefetchPredictor::RecordURLRequest, |
| predictor_, |
| summary)); |
| + |
| + if (resource_type == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats", |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| } |
| void ResourcePrefetchPredictorObserver::OnRequestRedirected( |
| @@ -96,6 +134,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.MainFrameRequestStats", |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordRedirect(request)) |
| return; |
| @@ -111,12 +158,32 @@ void ResourcePrefetchPredictorObserver::OnRequestRedirected( |
| base::Bind(&ResourcePrefetchPredictor::RecordUrlRedirect, |
| predictor_, |
| summary)); |
| + |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats", |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| } |
| void ResourcePrefetchPredictorObserver::OnResponseStarted( |
| net::URLRequest* request) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats", |
| + REQUEST_STATS_TOTAL_RESPONSES, |
| + REQUEST_STATS_MAX); |
| + |
| + const content::ResourceRequestInfo* request_info = |
| + content::ResourceRequestInfo::ForRequest(request); |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.MainFrameRequestStats", |
| + MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| + |
| if (!ResourcePrefetchPredictor::ShouldRecordResponse(request)) |
| return; |
| ResourcePrefetchPredictor::URLRequestSummary summary; |
| @@ -129,6 +196,17 @@ void ResourcePrefetchPredictorObserver::OnResponseStarted( |
| base::Bind(&ResourcePrefetchPredictor::RecordUrlResponse, |
| predictor_, |
| summary)); |
| + |
| + UMA_HISTOGRAM_ENUMERATION("ResourcePrefetchPredictor.RequestStats", |
| + REQUEST_STATS_TOTAL_PROCESSED_RESPONSES, |
| + REQUEST_STATS_MAX); |
| + if (request_info && |
| + request_info->GetResourceType() == ResourceType::MAIN_FRAME) { |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "ResourcePrefetchPredictor.NavigationStatsMainFrame", |
| + MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES, |
| + MAIN_FRAME_REQUEST_STATS_MAX); |
| + } |
| } |
| } // namespace chrome_browser_net |