Index: chrome/renderer/page_load_histograms.cc |
diff --git a/chrome/renderer/page_load_histograms.cc b/chrome/renderer/page_load_histograms.cc |
index 8c3597c2e0b64946a1a88644cbfb3867e4b4235c..a94738e34cbaaeb4a495618ca5639b640e97c1f7 100644 |
--- a/chrome/renderer/page_load_histograms.cc |
+++ b/chrome/renderer/page_load_histograms.cc |
@@ -110,7 +110,8 @@ void PltHistogramWithGwsPreview(const char* name, |
// In addition to PLT_HISTOGRAM, add the *_DataReductionProxy variant |
// conditionally. This macro runs only in one thread. |
-#define PLT_HISTOGRAM_DRP(name, sample, data_reduction_proxy_was_used) \ |
+#define PLT_HISTOGRAM_DRP( \ |
+ name, sample, data_reduction_proxy_was_used, scheme_type) \ |
do { \ |
static base::HistogramBase* counter(NULL); \ |
static base::HistogramBase* drp_counter(NULL); \ |
@@ -123,10 +124,17 @@ void PltHistogramWithGwsPreview(const char* name, |
counter->AddTime(sample); \ |
if (!data_reduction_proxy_was_used) break; \ |
if (!drp_counter) { \ |
- drp_counter = base::Histogram::FactoryTimeGet( \ |
- std::string(name) + "_DataReductionProxy", \ |
- kPLTMin(), kPLTMax(), kPLTCount, \ |
- base::Histogram::kUmaTargetedHistogramFlag); \ |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { \ |
ppi
2014/11/03 10:49:17
Afaiu |drp_counter| is a static variable, so we'll
jeremyim
2014/11/03 18:46:16
Thanks for catching this! Updated to add a new sta
|
+ drp_counter = base::Histogram::FactoryTimeGet( \ |
+ std::string(name) + "_DataReductionProxy", \ |
+ kPLTMin(), kPLTMax(), kPLTCount, \ |
+ base::Histogram::kUmaTargetedHistogramFlag); \ |
+ } else { \ |
+ drp_counter = base::Histogram::FactoryTimeGet( \ |
+ std::string(name) + "_HTTPS_DataReductionProxy", \ |
+ kPLTMin(), kPLTMax(), kPLTCount, \ |
+ base::Histogram::kUmaTargetedHistogramFlag); \ |
+ } \ |
} \ |
drp_counter->AddTime(sample); \ |
} while (0) |
@@ -156,31 +164,6 @@ bool ViaHeaderContains(WebFrame* frame, const std::string& via_value) { |
return std::find(values.begin(), values.end(), via_value) != values.end(); |
} |
-// Returns true if the data reduction proxy was used. Note, this function will |
-// produce a false positive if a page is fetched using SPDY and using a proxy, |
-// and the data reduction proxy's via value is added to the Via header. |
-// TODO(bengr): Plumb the hostname of the proxy and check if it matches |
-// |SPDY_PROXY_AUTH_ORIGIN|. |
-bool DataReductionProxyWasUsed(WebFrame* frame) { |
- DocumentState* document_state = |
- DocumentState::FromDataSource(frame->dataSource()); |
- if (!document_state->was_fetched_via_proxy()) |
- return false; |
- |
- std::string via_header = |
- base::UTF16ToUTF8(frame->dataSource()->response().httpHeaderField("Via")); |
- |
- if (via_header.empty()) |
- return false; |
- std::string headers = "HTTP/1.1 200 OK\nVia: " + via_header + "\n\n"; |
- // Produce raw headers, expected by the |HttpResponseHeaders| constructor. |
- std::replace(headers.begin(), headers.end(), '\n', '\0'); |
- scoped_refptr<net::HttpResponseHeaders> response_headers( |
- new net::HttpResponseHeaders(headers)); |
- return data_reduction_proxy::HasDataReductionProxyViaHeader( |
- response_headers.get(), NULL); |
-} |
- |
// Returns true if the provided URL is a referrer string that came from |
// a Google Web Search results page. This is a little non-deterministic |
// because desktop and mobile websearch differ and sometimes just provide |
@@ -227,7 +210,8 @@ void DumpHistograms(const WebPerformance& performance, |
bool data_reduction_proxy_was_used, |
bool came_from_websearch, |
int websearch_chrome_joint_experiment_id, |
- bool is_preview) { |
+ bool is_preview, |
+ URLPattern::SchemeMasks scheme_type) { |
// This function records new histograms based on the Navigation Timing |
// records. As such, the histograms should not depend on the deprecated timing |
// information collected in DocumentState. However, here for some reason we |
@@ -279,61 +263,80 @@ void DumpHistograms(const WebPerformance& performance, |
document_state->set_web_timing_histograms_recorded(true); |
if (!redirect_start.is_null() && !redirect_end.is_null()) { |
- PLT_HISTOGRAM_DRP("PLT.NT_Redirect", redirect_end - redirect_start, |
- data_reduction_proxy_was_used); |
+ PLT_HISTOGRAM_DRP("PLT.NT_Redirect", |
+ redirect_end - redirect_start, |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
PLT_HISTOGRAM_DRP( |
"PLT.NT_DelayBeforeFetchRedirect", |
(fetch_start - navigation_start) - (redirect_end - redirect_start), |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} else { |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeFetch", |
fetch_start - navigation_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeDomainLookup", |
domain_lookup_start - fetch_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
PLT_HISTOGRAM_DRP("PLT.NT_DomainLookup", |
domain_lookup_end - domain_lookup_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeConnect", |
connect_start - domain_lookup_end, |
- data_reduction_proxy_was_used); |
- PLT_HISTOGRAM_DRP("PLT.NT_Connect", connect_end - connect_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
+ PLT_HISTOGRAM_DRP("PLT.NT_Connect", |
+ connect_end - connect_start, |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeRequest", |
request_start - connect_end, |
- data_reduction_proxy_was_used); |
- PLT_HISTOGRAM_DRP("PLT.NT_Request", response_start - request_start, |
- data_reduction_proxy_was_used); |
- PLT_HISTOGRAM_DRP("PLT.NT_Response", response_end - response_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
+ PLT_HISTOGRAM_DRP("PLT.NT_Request", |
+ response_start - request_start, |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
+ PLT_HISTOGRAM_DRP("PLT.NT_Response", |
+ response_end - response_start, |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
if (!dom_loading.is_null()) { |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeDomLoading", |
dom_loading - response_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
if (!dom_interactive.is_null() && !dom_loading.is_null()) { |
PLT_HISTOGRAM_DRP("PLT.NT_DomLoading", |
dom_interactive - dom_loading, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
if (!dom_content_loaded_start.is_null() && !dom_interactive.is_null()) { |
PLT_HISTOGRAM_DRP("PLT.NT_DomInteractive", |
dom_content_loaded_start - dom_interactive, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
if (!dom_content_loaded_start.is_null() && |
!dom_content_loaded_end.is_null() ) { |
PLT_HISTOGRAM_DRP("PLT.NT_DomContentLoaded", |
dom_content_loaded_end - dom_content_loaded_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
if (!dom_content_loaded_end.is_null() && !load_event_start.is_null()) { |
PLT_HISTOGRAM_DRP("PLT.NT_DelayBeforeLoadEvent", |
load_event_start - dom_content_loaded_end, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
} |
// TODO(simonjam): There is no way to distinguish between abandonment and |
@@ -356,12 +359,21 @@ void DumpHistograms(const WebPerformance& performance, |
websearch_chrome_joint_experiment_id, |
is_preview); |
if (data_reduction_proxy_was_used) { |
- PLT_HISTOGRAM("PLT.PT_BeginToFinishDoc_DataReductionProxy", |
- load_event_start - begin); |
- PLT_HISTOGRAM("PLT.PT_CommitToFinishDoc_DataReductionProxy", |
- load_event_start - response_start); |
- PLT_HISTOGRAM("PLT.PT_RequestToFinishDoc_DataReductionProxy", |
- load_event_start - navigation_start); |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { |
+ PLT_HISTOGRAM("PLT.PT_BeginToFinishDoc_DataReductionProxy", |
+ load_event_start - begin); |
+ PLT_HISTOGRAM("PLT.PT_CommitToFinishDoc_DataReductionProxy", |
+ load_event_start - response_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToFinishDoc_DataReductionProxy", |
+ load_event_start - navigation_start); |
+ } else { |
+ PLT_HISTOGRAM("PLT.PT_BeginToFinishDoc_HTTPS_DataReductionProxy", |
+ load_event_start - begin); |
+ PLT_HISTOGRAM("PLT.PT_CommitToFinishDoc_HTTPS_DataReductionProxy", |
+ load_event_start - response_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToFinishDoc_HTTPS_DataReductionProxy", |
+ load_event_start - navigation_start); |
+ } |
} |
} |
if (!load_event_end.is_null()) { |
@@ -386,14 +398,25 @@ void DumpHistograms(const WebPerformance& performance, |
websearch_chrome_joint_experiment_id, |
is_preview); |
if (data_reduction_proxy_was_used) { |
- PLT_HISTOGRAM("PLT.PT_BeginToFinish_DataReductionProxy", |
- load_event_end - begin); |
- PLT_HISTOGRAM("PLT.PT_CommitToFinish_DataReductionProxy", |
- load_event_end - response_start); |
- PLT_HISTOGRAM("PLT.PT_RequestToFinish_DataReductionProxy", |
- load_event_end - navigation_start); |
- PLT_HISTOGRAM("PLT.PT_StartToFinish_DataReductionProxy", |
- load_event_end - request_start); |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { |
+ PLT_HISTOGRAM("PLT.PT_BeginToFinish_DataReductionProxy", |
+ load_event_end - begin); |
+ PLT_HISTOGRAM("PLT.PT_CommitToFinish_DataReductionProxy", |
+ load_event_end - response_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToFinish_DataReductionProxy", |
+ load_event_end - navigation_start); |
+ PLT_HISTOGRAM("PLT.PT_StartToFinish_DataReductionProxy", |
+ load_event_end - request_start); |
+ } else { |
+ PLT_HISTOGRAM("PLT.PT_BeginToFinish_HTTPS_DataReductionProxy", |
+ load_event_end - begin); |
+ PLT_HISTOGRAM("PLT.PT_CommitToFinish_HTTPS_DataReductionProxy", |
+ load_event_end - response_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToFinish_HTTPS_DataReductionProxy", |
+ load_event_end - navigation_start); |
+ PLT_HISTOGRAM("PLT.PT_StartToFinish_HTTPS_DataReductionProxy", |
+ load_event_end - request_start); |
+ } |
} |
} |
if (!load_event_start.is_null() && !load_event_end.is_null()) { |
@@ -401,11 +424,18 @@ void DumpHistograms(const WebPerformance& performance, |
load_event_end - load_event_start); |
PLT_HISTOGRAM_DRP("PLT.NT_LoadEvent", |
load_event_end - load_event_start, |
- data_reduction_proxy_was_used); |
+ data_reduction_proxy_was_used, |
+ scheme_type); |
- if (data_reduction_proxy_was_used) |
- PLT_HISTOGRAM("PLT.PT_FinishDocToFinish_DataReductionProxy", |
- load_event_end - load_event_start); |
+ if (data_reduction_proxy_was_used) { |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { |
+ PLT_HISTOGRAM("PLT.PT_FinishDocToFinish_DataReductionProxy", |
+ load_event_end - load_event_start); |
+ } else { |
+ PLT_HISTOGRAM("PLT.PT_FinishDocToFinish_HTTPS_DataReductionProxy", |
+ load_event_end - load_event_start); |
+ } |
+ } |
} |
if (!dom_content_loaded_start.is_null()) { |
PLT_HISTOGRAM_WITH_GWS_VARIANT("PLT.PT_RequestToDomContentLoaded", |
@@ -413,9 +443,16 @@ void DumpHistograms(const WebPerformance& performance, |
came_from_websearch, |
websearch_chrome_joint_experiment_id, |
is_preview); |
- if (data_reduction_proxy_was_used) |
- PLT_HISTOGRAM("PLT.PT_RequestToDomContentLoaded_DataReductionProxy", |
- dom_content_loaded_start - navigation_start); |
+ if (data_reduction_proxy_was_used) { |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { |
+ PLT_HISTOGRAM("PLT.PT_RequestToDomContentLoaded_DataReductionProxy", |
+ dom_content_loaded_start - navigation_start); |
+ } else { |
+ PLT_HISTOGRAM( |
+ "PLT.PT_RequestToDomContentLoaded_HTTPS_DataReductionProxy", |
+ dom_content_loaded_start - navigation_start); |
+ } |
+ } |
} |
PLT_HISTOGRAM_WITH_GWS_VARIANT("PLT.PT_BeginToCommit", |
response_start - begin, |
@@ -438,14 +475,25 @@ void DumpHistograms(const WebPerformance& performance, |
websearch_chrome_joint_experiment_id, |
is_preview); |
if (data_reduction_proxy_was_used) { |
- PLT_HISTOGRAM("PLT.PT_BeginToCommit_DataReductionProxy", |
- response_start - begin); |
- PLT_HISTOGRAM("PLT.PT_RequestToStart_DataReductionProxy", |
- request_start - navigation_start); |
- PLT_HISTOGRAM("PLT.PT_StartToCommit_DataReductionProxy", |
- response_start - request_start); |
- PLT_HISTOGRAM("PLT.PT_RequestToCommit_DataReductionProxy", |
- response_start - navigation_start); |
+ if ((scheme_type & URLPattern::SCHEME_HTTPS) == 0) { |
+ PLT_HISTOGRAM("PLT.PT_BeginToCommit_DataReductionProxy", |
+ response_start - begin); |
+ PLT_HISTOGRAM("PLT.PT_RequestToStart_DataReductionProxy", |
+ request_start - navigation_start); |
+ PLT_HISTOGRAM("PLT.PT_StartToCommit_DataReductionProxy", |
+ response_start - request_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToCommit_DataReductionProxy", |
+ response_start - navigation_start); |
+ } else { |
+ PLT_HISTOGRAM("PLT.PT_BeginToCommit_HTTPS_DataReductionProxy", |
+ response_start - begin); |
+ PLT_HISTOGRAM("PLT.PT_RequestToStart_HTTPS_DataReductionProxy", |
+ request_start - navigation_start); |
+ PLT_HISTOGRAM("PLT.PT_StartToCommit_HTTPS_DataReductionProxy", |
+ response_start - request_start); |
+ PLT_HISTOGRAM("PLT.PT_RequestToCommit_HTTPS_DataReductionProxy", |
+ response_start - navigation_start); |
+ } |
} |
} |
@@ -671,7 +719,8 @@ void DumpDeprecatedHistograms(const WebPerformance& performance, |
} // namespace |
PageLoadHistograms::PageLoadHistograms(content::RenderView* render_view) |
- : content::RenderViewObserver(render_view) { |
+ : content::RenderViewObserver(render_view), |
+ data_reduction_proxy_params_(0) { |
} |
void PageLoadHistograms::Dump(WebFrame* frame) { |
@@ -693,7 +742,9 @@ void PageLoadHistograms::Dump(WebFrame* frame) { |
DocumentState* document_state = |
DocumentState::FromDataSource(frame->dataSource()); |
- bool data_reduction_proxy_was_used = DataReductionProxyWasUsed(frame); |
+ bool data_reduction_proxy_was_used = |
+ data_reduction_proxy_params_.IsDataReductionProxy( |
ppi
2014/11/03 10:49:17
I might be missing something - where |data_reducti
jeremyim
2014/11/03 18:46:16
This is set in the PLH constructor (line 723/728).
ppi
2014/11/04 16:12:42
Yup, but the flags are set to 0 there. In io_threa
jeremyim
2014/11/04 18:12:22
Updated to use the same base flags as io_thread; i
|
+ document_state->proxy_server(), NULL); |
bool came_from_websearch = |
IsFromGoogleSearchResult(frame->document().url(), |
GURL(frame->document().referrer())); |
@@ -711,7 +762,8 @@ void PageLoadHistograms::Dump(WebFrame* frame) { |
data_reduction_proxy_was_used, |
came_from_websearch, |
websearch_chrome_joint_experiment_id, |
- is_preview); |
+ is_preview, |
+ scheme_type); |
// Old metrics based on the timing information stored in DocumentState. These |
// are deprecated and should go away. |