OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_STATS
_H_ | 5 #ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_STATS
_H_ |
6 #define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_STATS
_H_ | 6 #define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_STATS
_H_ |
7 | 7 |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "base/prefs/pref_member.h" | 10 #include "base/prefs/pref_member.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 // Given |data_reduction_proxy_enabled|, a |request|, and the | 58 // Given |data_reduction_proxy_enabled|, a |request|, and the |
59 // |data_reduction_proxy_config| records the number of bypassed bytes for that | 59 // |data_reduction_proxy_config| records the number of bypassed bytes for that |
60 // |request| into UMAs based on bypass type. |data_reduction_proxy_enabled| | 60 // |request| into UMAs based on bypass type. |data_reduction_proxy_enabled| |
61 // tells us the state of the kDataReductionProxyEnabled preference. | 61 // tells us the state of the kDataReductionProxyEnabled preference. |
62 void RecordBypassedBytesHistograms( | 62 void RecordBypassedBytesHistograms( |
63 net::URLRequest& request, | 63 net::URLRequest& request, |
64 const BooleanPrefMember& data_reduction_proxy_enabled, | 64 const BooleanPrefMember& data_reduction_proxy_enabled, |
65 const net::ProxyConfig& data_reduction_proxy_config); | 65 const net::ProxyConfig& data_reduction_proxy_config); |
66 | 66 |
67 void RecordBypassEventHistograms(const net::ProxyServer& bypassed_proxy, | 67 // Called by |ChromeNetworkDelegate| when a proxy is put into the bad proxy |
68 int net_error) const; | 68 // list. Used to track when the data reduction proxy falls back. |
| 69 void OnProxyFallback(const net::ProxyServer& bypassed_proxy, |
| 70 int net_error); |
69 | 71 |
70 private: | 72 private: |
71 enum BypassedBytesType { | 73 enum BypassedBytesType { |
72 NOT_BYPASSED = 0, /* Not bypassed. */ | 74 NOT_BYPASSED = 0, /* Not bypassed. */ |
73 SSL, /* Bypass due to SSL. */ | 75 SSL, /* Bypass due to SSL. */ |
74 LOCAL_BYPASS_RULES, /* Bypass due to client-side bypass rules. */ | 76 LOCAL_BYPASS_RULES, /* Bypass due to client-side bypass rules. */ |
75 MANAGED_PROXY_CONFIG, /* Bypass due to managed config. */ | 77 MANAGED_PROXY_CONFIG, /* Bypass due to managed config. */ |
76 AUDIO_VIDEO, /* Audio/Video bypass. */ | 78 AUDIO_VIDEO, /* Audio/Video bypass. */ |
77 TRIGGERING_REQUEST, /* Triggering request bypass. */ | 79 TRIGGERING_REQUEST, /* Triggering request bypass. */ |
78 NETWORK_ERROR, /* Network error. */ | 80 NETWORK_ERROR, /* Network error. */ |
79 BYPASSED_BYTES_TYPE_MAX /* This must always be last.*/ | 81 BYPASSED_BYTES_TYPE_MAX /* This must always be last.*/ |
80 }; | 82 }; |
81 | 83 |
82 // NetworkChangeNotifier::NetworkChangeObserver: | 84 // NetworkChangeNotifier::NetworkChangeObserver: |
83 virtual void OnNetworkChanged( | 85 virtual void OnNetworkChanged( |
84 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; | 86 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; |
85 | 87 |
86 // Counts requests that went through the data reduction proxy and counts | 88 // Called when request counts change. Resets counts if they exceed thresholds, |
87 // requests that were eligible to go through the proxy. | 89 // and calls MaybeNotifyUnavailability otherwise. |
88 void IncrementRequestCounts(bool actual); | 90 void OnRequestCountChanged(); |
| 91 |
| 92 // Clears request counts unconditionally. |
89 void ClearRequestCounts(); | 93 void ClearRequestCounts(); |
90 | 94 |
91 // Checks if the availability status of the data reduction proxy has changed, | 95 // Checks if the availability status of the data reduction proxy has changed, |
92 // and notifies the UIThread via NotifyUnavailabilityOnUIThread if so. The | 96 // and notifies the UIThread via NotifyUnavailabilityOnUIThread if so. The |
93 // data reduction proxy is considered unavailable if and only if no requests | 97 // data reduction proxy is considered unavailable if and only if no requests |
94 // went through the proxy but some eligible requests were service by other | 98 // went through the proxy but some eligible requests were service by other |
95 // routes. | 99 // routes. |
96 void MaybeNotifyUnavailability(); | 100 void NotifyUnavailabilityIfChanged(); |
97 void NotifyUnavailabilityOnUIThread(bool unavailable); | 101 void NotifyUnavailabilityOnUIThread(bool unavailable); |
98 | 102 |
99 DataReductionProxyParams* data_reduction_proxy_params_; | 103 DataReductionProxyParams* data_reduction_proxy_params_; |
100 // The last reason for bypass as determined by | 104 // The last reason for bypass as determined by |
101 // MaybeBypassProxyAndPrepareToRetry | 105 // MaybeBypassProxyAndPrepareToRetry |
102 DataReductionProxyBypassType last_bypass_type_; | 106 DataReductionProxyBypassType last_bypass_type_; |
103 // True if the last request triggered the current bypass. | 107 // True if the last request triggered the current bypass. |
104 bool triggering_request_; | 108 bool triggering_request_; |
105 base::MessageLoopProxy* ui_thread_proxy_; | 109 base::MessageLoopProxy* ui_thread_proxy_; |
106 | 110 |
107 // The following 2 fields are used to determine if data reduction proxy is | 111 // The following 2 fields are used to determine if data reduction proxy is |
108 // unreachable. We keep a count of requests which should go through | 112 // unreachable. We keep a count of requests which should go through |
109 // data request proxy, as well as those which actually do. The proxy is | 113 // data request proxy, as well as those which actually do. The proxy is |
110 // unreachable if no successful requests are made through it despite a | 114 // unreachable if no successful requests are made through it despite a |
111 // non-zero number of requests being eligible. | 115 // non-zero number of requests being eligible. |
112 | 116 |
113 // Count of requests which will be tried to be sent through data reduction | 117 // Count of successful requests through the data reduction proxy. |
114 // proxy. The count is only based on the config and not the bad proxy list. | 118 unsigned long successful_requests_through_proxy_count_; |
115 // Explicit bypasses are not part of this count. This is the desired behavior | |
116 // since otherwise both counts would be identical. | |
117 unsigned long eligible_num_requests_through_proxy_; | |
118 | 119 |
119 // Count of successful requests through data reduction proxy. | 120 // Count of network errors encountered when connecting to a data reduction |
120 unsigned long actual_num_requests_through_proxy_; | 121 // proxy. |
| 122 unsigned long proxy_net_errors_count_; |
121 | 123 |
122 // Whether or not the data reduction proxy is unavailable. | 124 // Whether or not the data reduction proxy is unavailable. |
123 bool unavailable_; | 125 bool unavailable_; |
124 | 126 |
125 base::ThreadChecker thread_checker_; | 127 base::ThreadChecker thread_checker_; |
126 | 128 |
127 void RecordBypassedBytes( | 129 void RecordBypassedBytes( |
128 DataReductionProxyBypassType bypass_type, | 130 DataReductionProxyBypassType bypass_type, |
129 BypassedBytesType bypassed_bytes_type, | 131 BypassedBytesType bypassed_bytes_type, |
130 int64 content_length); | 132 int64 content_length); |
131 | 133 |
132 // Called when the unavailability status has changed. Runs on the UI thread. | 134 // Called when the unavailability status has changed. Runs on the UI thread. |
133 base::Callback<void(bool)> unavailable_callback_; | 135 base::Callback<void(bool)> unavailable_callback_; |
134 | 136 |
135 DISALLOW_COPY_AND_ASSIGN(DataReductionProxyUsageStats); | 137 DISALLOW_COPY_AND_ASSIGN(DataReductionProxyUsageStats); |
136 }; | 138 }; |
137 | 139 |
138 } // namespace data_reduction_proxy | 140 } // namespace data_reduction_proxy |
139 | 141 |
140 #endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_ST
ATS_H_ | 142 #endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_USAGE_ST
ATS_H_ |
OLD | NEW |