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

Unified Diff: components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc

Issue 602503002: Adds UMA to measure when the data reduction proxy via header is missing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove DCHECKs from tests Created 6 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 side-by-side diff with in-line comments
Download patch
Index: components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc
diff --git a/components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc b/components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc
index adda1d3746ef8a2c2259d72cc08cd2877898e4ca..a7426f564aa2f52108810a20e8f119c043b35cf3 100644
--- a/components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc
+++ b/components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.cc
@@ -9,8 +9,11 @@
#include "base/message_loop/message_loop_proxy.h"
#include "base/metrics/histogram.h"
#include "base/metrics/sparse_histogram.h"
+#include "base/prefs/pref_member.h"
#include "components/data_reduction_proxy/common/data_reduction_proxy_headers.h"
#include "net/base/net_errors.h"
+#include "net/http/http_response_headers.h"
+#include "net/http/http_status_code.h"
#include "net/proxy/proxy_retry_info.h"
#include "net/proxy/proxy_server.h"
#include "net/proxy/proxy_service.h"
@@ -76,6 +79,26 @@ void DataReductionProxyUsageStats::RecordDataReductionProxyBypassInfo(
}
}
+// static
+void DataReductionProxyUsageStats::DetectAndRecordMissingViaHeaderResponseCode(
+ bool is_primary,
+ const net::HttpResponseHeaders* headers) {
+ if (HasDataReductionProxyViaHeader(headers, NULL)) {
+ // The data reduction proxy via header is present, so don't record anything.
+ return;
+ }
+
+ if (is_primary) {
+ UMA_HISTOGRAM_SPARSE_SLOWLY(
+ "DataReductionProxy.MissingViaHeader.ResponseCode.Primary",
+ headers->response_code());
+ } else {
+ UMA_HISTOGRAM_SPARSE_SLOWLY(
+ "DataReductionProxy.MissingViaHeader.ResponseCode.Fallback",
+ headers->response_code());
+ }
+}
+
DataReductionProxyUsageStats::DataReductionProxyUsageStats(
DataReductionProxyParams* params,
const scoped_refptr<MessageLoopProxy>& ui_thread_proxy)
@@ -145,22 +168,31 @@ void DataReductionProxyUsageStats::SetBypassType(
triggering_request_ = true;
}
+void DataReductionProxyUsageStats::RecordBytesHistograms(
+ net::URLRequest* request,
+ const BooleanPrefMember& data_reduction_proxy_enabled,
+ const net::ProxyConfig& data_reduction_proxy_config) {
+ RecordBypassedBytesHistograms(request, data_reduction_proxy_enabled,
+ data_reduction_proxy_config);
+ RecordMissingViaHeaderBytes(request);
+}
+
void DataReductionProxyUsageStats::RecordBypassedBytesHistograms(
- net::URLRequest& request,
+ net::URLRequest* request,
const BooleanPrefMember& data_reduction_proxy_enabled,
const net::ProxyConfig& data_reduction_proxy_config) {
- int64 content_length = request.received_response_content_length();
+ int64 content_length = request->received_response_content_length();
if (data_reduction_proxy_enabled.GetValue() &&
!data_reduction_proxy_config.Equals(
- request.context()->proxy_service()->config())) {
+ request->context()->proxy_service()->config())) {
RecordBypassedBytes(last_bypass_type_,
DataReductionProxyUsageStats::MANAGED_PROXY_CONFIG,
content_length);
return;
}
- if (data_reduction_proxy_params_->WasDataReductionProxyUsed(&request, NULL)) {
+ if (data_reduction_proxy_params_->WasDataReductionProxyUsed(request, NULL)) {
RecordBypassedBytes(last_bypass_type_,
DataReductionProxyUsageStats::NOT_BYPASSED,
content_length);
@@ -168,7 +200,7 @@ void DataReductionProxyUsageStats::RecordBypassedBytesHistograms(
}
if (data_reduction_proxy_enabled.GetValue() &&
- request.url().SchemeIs(url::kHttpsScheme)) {
+ request->url().SchemeIs(url::kHttpsScheme)) {
RecordBypassedBytes(last_bypass_type_,
DataReductionProxyUsageStats::SSL,
content_length);
@@ -177,7 +209,7 @@ void DataReductionProxyUsageStats::RecordBypassedBytesHistograms(
if (data_reduction_proxy_enabled.GetValue() &&
data_reduction_proxy_params_->IsBypassedByDataReductionProxyLocalRules(
- request, data_reduction_proxy_config)) {
+ *request, data_reduction_proxy_config)) {
RecordBypassedBytes(last_bypass_type_,
DataReductionProxyUsageStats::LOCAL_BYPASS_RULES,
content_length);
@@ -191,7 +223,7 @@ void DataReductionProxyUsageStats::RecordBypassedBytesHistograms(
last_bypass_type_ == BYPASS_EVENT_TYPE_MEDIUM ||
last_bypass_type_ == BYPASS_EVENT_TYPE_LONG)) {
std::string mime_type;
- request.GetMimeType(&mime_type);
+ request->GetMimeType(&mime_type);
// MIME types are named by <media-type>/<subtype>. Check to see if the
// media type is audio or video. Only record when triggered by short bypass,
// there isn't an audio or video bucket for medium or long bypasses.
@@ -218,7 +250,7 @@ void DataReductionProxyUsageStats::RecordBypassedBytesHistograms(
return;
}
- if (data_reduction_proxy_params_->AreDataReductionProxiesBypassed(request,
+ if (data_reduction_proxy_params_->AreDataReductionProxiesBypassed(*request,
NULL)) {
RecordBypassedBytes(last_bypass_type_,
DataReductionProxyUsageStats::NETWORK_ERROR,
@@ -378,6 +410,30 @@ void DataReductionProxyUsageStats::RecordBypassedBytes(
}
}
+void DataReductionProxyUsageStats::RecordMissingViaHeaderBytes(
+ URLRequest* request) {
+ // Responses that were served from cache should have been filtered out
+ // already.
+ DCHECK(!request->was_cached());
+
+ if (!data_reduction_proxy_params_->WasDataReductionProxyUsed(request, NULL) ||
+ HasDataReductionProxyViaHeader(request->response_headers(), NULL)) {
+ // Only track requests that used the data reduction proxy and had responses
+ // that were missing the data reduction proxy via header.
+ return;
+ }
+
+ if (request->GetResponseCode() >= net::HTTP_BAD_REQUEST &&
+ request->GetResponseCode() < net::HTTP_INTERNAL_SERVER_ERROR) {
+ // Track 4xx responses that are missing via headers separately.
+ UMA_HISTOGRAM_COUNTS("DataReductionProxy.MissingViaHeader.Bytes.4xx",
+ request->received_response_content_length());
+ } else {
+ UMA_HISTOGRAM_COUNTS("DataReductionProxy.MissingViaHeader.Bytes.Other",
+ request->received_response_content_length());
+ }
+}
+
} // namespace data_reduction_proxy

Powered by Google App Engine
This is Rietveld 408576698