Index: components/metrics/net/network_metrics_provider.cc |
diff --git a/components/metrics/net/network_metrics_provider.cc b/components/metrics/net/network_metrics_provider.cc |
index 07cdf57a7af5a3e2d9e11cb0c3a5d6703cfa19ff..925408939847bfd6c67e5555a1a6a9c962b44c88 100644 |
--- a/components/metrics/net/network_metrics_provider.cc |
+++ b/components/metrics/net/network_metrics_provider.cc |
@@ -10,11 +10,14 @@ |
#include <vector> |
#include "base/compiler_specific.h" |
+#include "base/metrics/histogram_macros.h" |
+#include "base/metrics/sparse_histogram.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/task_runner_util.h" |
#include "build/build_config.h" |
+#include "net/base/net_errors.h" |
#if defined(OS_CHROMEOS) |
#include "components/metrics/net/wifi_access_point_info_provider_chromeos.h" |
@@ -22,12 +25,13 @@ |
namespace metrics { |
-NetworkMetricsProvider::NetworkMetricsProvider( |
- base::TaskRunner* io_task_runner) |
+NetworkMetricsProvider::NetworkMetricsProvider(base::TaskRunner* io_task_runner) |
: io_task_runner_(io_task_runner), |
connection_type_is_ambiguous_(false), |
wifi_phy_layer_protocol_is_ambiguous_(false), |
wifi_phy_layer_protocol_(net::WIFI_PHY_LAYER_PROTOCOL_UNKNOWN), |
+ total_aborts_(0), |
+ total_codes_(0), |
weak_ptr_factory_(this) { |
net::NetworkChangeNotifier::AddConnectionTypeObserver(this); |
connection_type_ = net::NetworkChangeNotifier::GetConnectionType(); |
@@ -43,6 +47,7 @@ void NetworkMetricsProvider::ProvideGeneralMetrics( |
// ProvideGeneralMetrics is called on the main thread, at the time a metrics |
// record is being finalized. |
net::NetworkChangeNotifier::FinalizingMetricsLogRecord(); |
+ LogAggregatedMetrics(); |
} |
void NetworkMetricsProvider::ProvideSystemProfileMetrics( |
@@ -240,4 +245,21 @@ void NetworkMetricsProvider::WriteWifiAccessPointProto( |
} |
} |
+void NetworkMetricsProvider::LogAggregatedMetrics() { |
+ base::HistogramBase* error_codes = base::SparseHistogram::FactoryGet( |
+ "Net.ErrorCodesForMainFrame3", |
+ base::HistogramBase::kUmaTargetedHistogramFlag); |
+ scoped_ptr<base::HistogramSamples> samples = error_codes->SnapshotSamples(); |
+ base::HistogramBase::Count new_aborts = |
+ samples->GetCount(-net::ERR_ABORTED) - total_aborts_; |
+ base::HistogramBase::Count new_codes = samples->TotalCount() - total_codes_; |
+ if (new_codes > 0) { |
+ UMA_HISTOGRAM_COUNTS("Net.ErrAborted.CountPerUpload", new_aborts); |
+ UMA_HISTOGRAM_PERCENTAGE("Net.ErrAborted.ProportionPerUpload", |
+ (100 * new_aborts) / new_codes); |
+ total_codes_ += new_codes; |
+ total_aborts_ += new_aborts; |
+ } |
+} |
+ |
} // namespace metrics |