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

Unified Diff: net/nqe/network_quality_estimator.cc

Issue 2487883002: NQE: Use cached estimates (Closed)
Patch Set: Rebase, handle comment Created 4 years 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
« no previous file with comments | « net/nqe/network_quality_estimator.h ('k') | net/nqe/network_quality_estimator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/nqe/network_quality_estimator.cc
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc
index 8551bc64ef0367b81dec142000186f442bf8b6bb..b7340c4115252a099e27d46d3f3868de8ce46a06 100644
--- a/net/nqe/network_quality_estimator.cc
+++ b/net/nqe/network_quality_estimator.cc
@@ -782,6 +782,8 @@ void NetworkQualityEstimator::OnConnectionTypeChanged(
effective_connection_type_ = EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
effective_connection_type_at_last_main_frame_ =
EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
+ rtt_observations_size_at_last_ect_computation_ = 0;
+ throughput_observations_size_at_last_ect_computation_ = 0;
// Update the local state as part of preparation for the new connection.
current_network_id_ = GetCurrentNetworkID();
@@ -1384,6 +1386,15 @@ bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() {
rtt_observations_.AddObservation(rtt_observation);
NotifyObserversOfRTT(rtt_observation);
}
+
+ if (cached_network_quality.network_quality().transport_rtt() !=
+ nqe::internal::InvalidRTT()) {
+ RttObservation rtt_observation(
+ cached_network_quality.network_quality().transport_rtt(), now,
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE);
+ rtt_observations_.AddObservation(rtt_observation);
+ NotifyObserversOfRTT(rtt_observation);
+ }
return true;
}
@@ -1594,9 +1605,74 @@ void NetworkQualityEstimator::OnPrefsRead(
const std::map<nqe::internal::NetworkID,
nqe::internal::CachedNetworkQuality> read_prefs) {
DCHECK(thread_checker_.CalledOnValidThread());
+
UMA_HISTOGRAM_COUNTS("NQE.Prefs.ReadSize", read_prefs.size());
- // TODO(tbansal): crbug.com/490870. Incorporate the network quality into the
- // current estimates.
+ for (auto& it : read_prefs) {
+ EffectiveConnectionType effective_connection_type =
+ it.second.effective_connection_type();
+ if (effective_connection_type == EFFECTIVE_CONNECTION_TYPE_UNKNOWN ||
+ effective_connection_type == EFFECTIVE_CONNECTION_TYPE_OFFLINE) {
+ continue;
+ }
+
+ // RTT and throughput values are not set in the prefs.
+ DCHECK_EQ(nqe::internal::InvalidRTT(),
+ it.second.network_quality().http_rtt());
+ DCHECK_EQ(nqe::internal::InvalidRTT(),
+ it.second.network_quality().transport_rtt());
+ DCHECK_EQ(nqe::internal::kInvalidThroughput,
+ it.second.network_quality().downstream_throughput_kbps());
+
+ nqe::internal::NetworkQuality network_quality(
+ typical_network_quality_[effective_connection_type].http_rtt(),
+ typical_network_quality_[effective_connection_type].transport_rtt(),
+ typical_network_quality_[effective_connection_type]
+ .downstream_throughput_kbps());
+
+ nqe::internal::CachedNetworkQuality cached_network_quality(
+ base::TimeTicks::Now(), network_quality, effective_connection_type);
+
+ network_quality_store_->Add(it.first, cached_network_quality);
+ MaybeUpdateNetworkQualityFromCache(it.first, cached_network_quality);
+ }
+}
+
+void NetworkQualityEstimator::MaybeUpdateNetworkQualityFromCache(
+ const nqe::internal::NetworkID& network_id,
+ const nqe::internal::CachedNetworkQuality& cached_network_quality) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ if (network_id != current_network_id_)
+ return;
+
+ // Since the cached network quality is for the current network, add it to
+ // the current observations.
+ RttObservation http_rtt_observation(
+ cached_network_quality.network_quality().http_rtt(),
+ base::TimeTicks::Now(),
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE);
+ rtt_observations_.AddObservation(http_rtt_observation);
+ NotifyObserversOfRTT(http_rtt_observation);
+
+ RttObservation transport_rtt_observation(
+ cached_network_quality.network_quality().transport_rtt(),
+ base::TimeTicks::Now(),
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE);
+ rtt_observations_.AddObservation(transport_rtt_observation);
+ NotifyObserversOfRTT(transport_rtt_observation);
+
+ // TODO(tbansal): crbug.com/673977: Remove this check.
+ if (cached_network_quality.network_quality().downstream_throughput_kbps() !=
+ nqe::internal::kInvalidThroughput) {
+ ThroughputObservation throughput_observation(
+ cached_network_quality.network_quality().downstream_throughput_kbps(),
+ base::TimeTicks::Now(),
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE);
+ downstream_throughput_kbps_observations_.AddObservation(
+ throughput_observation);
+ NotifyObserversOfThroughput(throughput_observation);
+ }
+
+ ComputeEffectiveConnectionType();
}
} // namespace net
« no previous file with comments | « net/nqe/network_quality_estimator.h ('k') | net/nqe/network_quality_estimator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698