| 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
|
|
|