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

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc

Issue 1153543016: Trigger LoFi based on NQE and use hysteresis to prevent frequent changes in network quality (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change in connection type triggers change in network quality despite hysteresis. Created 5 years, 6 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/core/browser/data_reduction_proxy_config.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
index 6beee3cf6ce6f509c9b0ebae0bf41df0b7958cbc..090940e648b25d5e362bb762760b1ca046f69c4f 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
@@ -196,9 +196,12 @@ DataReductionProxyConfig::DataReductionProxyConfig(
net_log_(net_log),
configurator_(configurator),
event_creator_(event_creator),
- auto_lofi_minimum_rtt_(base::TimeDelta()),
- auto_lofi_maximum_kbps_(0),
- auto_lofi_hysteresis_(base::TimeDelta()),
+ auto_lofi_minimum_rtt_(base::TimeDelta::Max()),
+ auto_lofi_maximum_kbps_(UINT64_MAX),
+ auto_lofi_hysteresis_(base::TimeDelta::Max()),
+ network_quality_last_updated_(base::TimeTicks()),
+ network_prohibitively_slow_(false),
+ connection_type_(net::NetworkChangeNotifier::GetConnectionType()),
lofi_status_(LOFI_STATUS_TEMPORARILY_OFF) {
DCHECK(configurator);
DCHECK(event_creator);
@@ -370,19 +373,46 @@ bool DataReductionProxyConfig::AreProxiesBypassed(
}
bool DataReductionProxyConfig::IsNetworkQualityProhibitivelySlow(
- const net::NetworkQualityEstimator* network_quality_estimator) const {
+ const net::NetworkQualityEstimator* network_quality_estimator) {
DCHECK(thread_checker_.CalledOnValidThread());
if (!network_quality_estimator)
return false;
+ // True iff network type changed since the last call to
+ // IsNetworkQualityProhibitivelySlow(). This call happens only on main frame
+ // requests.
+ bool network_type_changed = false;
+ if (net::NetworkChangeNotifier::GetConnectionType() != connection_type_) {
+ connection_type_ = net::NetworkChangeNotifier::GetConnectionType();
+ network_type_changed = true;
+ }
+ // Return the cached entry if the last update was within the hysteresis
+ // duration and if the connection type has not changed.
+ if (!network_type_changed && !network_quality_last_updated_.is_null() &&
+ base::TimeTicks::Now() - network_quality_last_updated_ <=
+ auto_lofi_hysteresis_) {
+ return network_prohibitively_slow_;
+ }
+
+ network_quality_last_updated_ = base::TimeTicks::Now();
+
net::NetworkQuality network_quality =
network_quality_estimator->GetEstimate();
// TODO(tbansal): Set |network_prohibitively_slow| based on medians
// provided by NetworkQualityEstimator API and field trial parameters.
- // Also, ensure that state of network is not changed more than once within
- // the hysteresis period.
- return false;
+
+ // Network is prohibitvely slow if either the downlink bandwidth is too low
+ // or the RTT is too high.
+ if ((network_quality.peak_throughput_kbps > 0 &&
+ network_quality.peak_throughput_kbps <= auto_lofi_maximum_kbps_) ||
+ (network_quality.fastest_rtt > base::TimeDelta() &&
+ network_quality.fastest_rtt >= auto_lofi_minimum_rtt_)) {
+ network_prohibitively_slow_ = true;
+ } else {
+ network_prohibitively_slow_ = false;
+ }
+ return network_prohibitively_slow_;
}
bool DataReductionProxyConfig::IsIncludedInLoFiEnabledFieldTrial() const {

Powered by Google App Engine
This is Rietveld 408576698