[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
gunsch | 043f360 | 2014-09-11 21:05:03 | [diff] [blame] | 5 | #ifndef COMPONENTS_METRICS_NET_NETWORK_METRICS_PROVIDER_H_ |
6 | #define COMPONENTS_METRICS_NET_NETWORK_METRICS_PROVIDER_H_ | ||||
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 7 | |
avi | 2606292 | 2015-12-26 00:14:18 | [diff] [blame] | 8 | #include "base/macros.h" |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 9 | #include "base/memory/scoped_ptr.h" |
10 | #include "base/memory/weak_ptr.h" | ||||
csharrison | 305ab90 | 2016-03-17 19:51:27 | [diff] [blame^] | 11 | #include "base/metrics/histogram_base.h" |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 12 | #include "components/metrics/metrics_provider.h" |
gunsch | 043f360 | 2014-09-11 21:05:03 | [diff] [blame] | 13 | #include "components/metrics/net/wifi_access_point_info_provider.h" |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 14 | #include "components/metrics/proto/system_profile.pb.h" |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 15 | #include "net/base/network_change_notifier.h" |
olli.raula | 80a44be | 2015-09-01 07:41:53 | [diff] [blame] | 16 | #include "net/base/network_interfaces.h" |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 17 | |
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 18 | namespace metrics { |
19 | |||||
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 20 | // Registers as observer with net::NetworkChangeNotifier and keeps track of |
21 | // the network environment. | ||||
22 | class NetworkMetricsProvider | ||||
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 23 | : public MetricsProvider, |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 24 | public net::NetworkChangeNotifier::ConnectionTypeObserver { |
25 | public: | ||||
gunsch | 043f360 | 2014-09-11 21:05:03 | [diff] [blame] | 26 | // Creates a NetworkMetricsProvider, where |io_task_runner| is used to post |
27 | // network info collection tasks. | ||||
28 | explicit NetworkMetricsProvider(base::TaskRunner* io_task_runner); | ||||
dcheng | 00ea022b | 2014-10-21 11:24:56 | [diff] [blame] | 29 | ~NetworkMetricsProvider() override; |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 30 | |
asvitkine | bbde62b | 2014-09-03 16:33:21 | [diff] [blame] | 31 | private: |
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 32 | // MetricsProvider: |
bmcquade | 3f55de79 | 2016-02-26 22:10:37 | [diff] [blame] | 33 | void ProvideGeneralMetrics(ChromeUserMetricsExtension* uma_proto) override; |
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 34 | void ProvideSystemProfileMetrics(SystemProfileProto* system_profile) override; |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 35 | |
36 | // ConnectionTypeObserver: | ||||
dcheng | 00ea022b | 2014-10-21 11:24:56 | [diff] [blame] | 37 | void OnConnectionTypeChanged( |
mostynb | fe59f48 | 2014-10-06 15:04:46 | [diff] [blame] | 38 | net::NetworkChangeNotifier::ConnectionType type) override; |
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 39 | |
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 40 | SystemProfileProto::Network::ConnectionType GetConnectionType() const; |
41 | SystemProfileProto::Network::WifiPHYLayerProtocol GetWifiPHYLayerProtocol() | ||||
42 | const; | ||||
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 43 | |
44 | // Posts a call to net::GetWifiPHYLayerProtocol on the blocking pool. | ||||
45 | void ProbeWifiPHYLayerProtocol(); | ||||
46 | // Callback from the blocking pool with the result of | ||||
47 | // net::GetWifiPHYLayerProtocol. | ||||
48 | void OnWifiPHYLayerProtocolResult(net::WifiPHYLayerProtocol mode); | ||||
49 | |||||
[email protected] | 2434789 | 2014-08-18 20:12:07 | [diff] [blame] | 50 | // Writes info about the wireless access points that this system is |
51 | // connected to. | ||||
52 | void WriteWifiAccessPointProto( | ||||
53 | const WifiAccessPointInfoProvider::WifiAccessPointInfo& info, | ||||
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 54 | SystemProfileProto::Network* network_proto); |
[email protected] | 2434789 | 2014-08-18 20:12:07 | [diff] [blame] | 55 | |
csharrison | 305ab90 | 2016-03-17 19:51:27 | [diff] [blame^] | 56 | // Logs metrics that are functions of other metrics being uploaded. |
57 | void LogAggregatedMetrics(); | ||||
58 | |||||
gunsch | 043f360 | 2014-09-11 21:05:03 | [diff] [blame] | 59 | // Task runner used for blocking file I/O. |
60 | base::TaskRunner* io_task_runner_; | ||||
61 | |||||
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 62 | // True if |connection_type_| changed during the lifetime of the log. |
63 | bool connection_type_is_ambiguous_; | ||||
64 | // The connection type according to net::NetworkChangeNotifier. | ||||
65 | net::NetworkChangeNotifier::ConnectionType connection_type_; | ||||
66 | |||||
67 | // True if |wifi_phy_layer_protocol_| changed during the lifetime of the log. | ||||
68 | bool wifi_phy_layer_protocol_is_ambiguous_; | ||||
69 | // The PHY mode of the currently associated access point obtained via | ||||
70 | // net::GetWifiPHYLayerProtocol. | ||||
71 | net::WifiPHYLayerProtocol wifi_phy_layer_protocol_; | ||||
72 | |||||
[email protected] | 2434789 | 2014-08-18 20:12:07 | [diff] [blame] | 73 | // Helper object for retrieving connected wifi access point information. |
74 | scoped_ptr<WifiAccessPointInfoProvider> wifi_access_point_info_provider_; | ||||
75 | |||||
csharrison | 305ab90 | 2016-03-17 19:51:27 | [diff] [blame^] | 76 | // These metrics track histogram totals for the Net.ErrorCodesForMainFrame3 |
77 | // histogram. They are used to compute deltas at upload time. | ||||
78 | base::HistogramBase::Count total_aborts_; | ||||
79 | base::HistogramBase::Count total_codes_; | ||||
80 | |||||
anujk.sharma | 59b96827 | 2014-09-16 16:52:38 | [diff] [blame] | 81 | base::WeakPtrFactory<NetworkMetricsProvider> weak_ptr_factory_; |
82 | |||||
[email protected] | 536324e | 2014-05-22 18:50:19 | [diff] [blame] | 83 | DISALLOW_COPY_AND_ASSIGN(NetworkMetricsProvider); |
84 | }; | ||||
85 | |||||
asvitkine | a63d19e | 2014-10-24 16:19:39 | [diff] [blame] | 86 | } // namespace metrics |
87 | |||||
gunsch | 043f360 | 2014-09-11 21:05:03 | [diff] [blame] | 88 | #endif // COMPONENTS_METRICS_NET_NETWORK_METRICS_PROVIDER_H_ |