Index: net/nqe/network_quality_estimator.cc |
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc |
index 7750e2faff832b75c6063e3551e24aa924905d94..67693ca70836f99e18e5a85aa14f6fe8814b1b4d 100644 |
--- a/net/nqe/network_quality_estimator.cc |
+++ b/net/nqe/network_quality_estimator.cc |
@@ -254,9 +254,9 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
effective_connection_type_recomputation_interval_( |
base::TimeDelta::FromSeconds(15)), |
last_connection_change_(tick_clock_->NowTicks()), |
- current_network_id_( |
- NetworkID(NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, |
- std::string())), |
+ current_network_id_(nqe::internal::NetworkID( |
+ NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, |
+ std::string())), |
downstream_throughput_kbps_observations_(weight_multiplier_per_second_), |
rtt_observations_(weight_multiplier_per_second_), |
effective_connection_type_at_last_main_frame_( |
@@ -268,12 +268,6 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
weak_ptr_factory_(this) { |
static_assert(kDefaultHalfLifeSeconds > 0, |
"Default half life duration must be > 0"); |
- static_assert(kMaximumNetworkQualityCacheSize > 0, |
- "Size of the network quality cache must be > 0"); |
- // This limit should not be increased unless the logic for removing the |
- // oldest cache entry is rewritten to use a doubly-linked-list LRU queue. |
- static_assert(kMaximumNetworkQualityCacheSize <= 10, |
- "Size of the network quality cache must <= 10"); |
// None of the algorithms can have an empty name. |
DCHECK(algorithm_name_to_enum_.end() == |
algorithm_name_to_enum_.find(std::string())); |
@@ -762,7 +756,10 @@ void NetworkQualityEstimator::OnConnectionTypeChanged( |
RecordMetricsOnConnectionTypeChanged(); |
// Write the estimates of the previous network to the cache. |
- CacheNetworkQualityEstimate(); |
+ network_qualities_manager_.CacheNetworkQualityEstimate( |
+ current_network_id_, nqe::internal::CachedNetworkQuality( |
+ last_effective_connection_type_computation_, |
+ estimated_quality_at_last_main_frame_)); |
// Clear the local state. |
last_connection_change_ = tick_clock_->NowTicks(); |
@@ -980,7 +977,7 @@ NetworkQualityEstimator::GetRecentEffectiveConnectionTypeUsingMetrics( |
// If the device is currently offline, then return |
// EFFECTIVE_CONNECTION_TYPE_OFFLINE. |
- if (GetCurrentNetworkID().type == NetworkChangeNotifier::CONNECTION_NONE) |
+ if (current_network_id_.type == NetworkChangeNotifier::CONNECTION_NONE) |
return EFFECTIVE_CONNECTION_TYPE_OFFLINE; |
base::TimeDelta http_rtt = nqe::internal::InvalidRTT(); |
@@ -1165,8 +1162,7 @@ int32_t NetworkQualityEstimator::GetDownlinkThroughputKbpsEstimateInternal( |
return kbps; |
} |
-NetworkQualityEstimator::NetworkID |
-NetworkQualityEstimator::GetCurrentNetworkID() const { |
+nqe::internal::NetworkID NetworkQualityEstimator::GetCurrentNetworkID() const { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// TODO(tbansal): crbug.com/498068 Add NetworkQualityEstimatorAndroid class |
@@ -1179,7 +1175,7 @@ NetworkQualityEstimator::GetCurrentNetworkID() const { |
// capture majority of cases, and should not significantly affect estimates |
// (that are approximate to begin with). |
while (true) { |
- NetworkQualityEstimator::NetworkID network_id( |
+ nqe::internal::NetworkID network_id( |
NetworkChangeNotifier::GetConnectionType(), std::string()); |
switch (network_id.type) { |
@@ -1215,42 +1211,36 @@ NetworkQualityEstimator::GetCurrentNetworkID() const { |
bool NetworkQualityEstimator::ReadCachedNetworkQualityEstimate() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- // If the network name is unavailable, caching should not be performed. |
- if (current_network_id_.id.empty()) |
- return false; |
- |
- CachedNetworkQualities::const_iterator it = |
- cached_network_qualities_.find(current_network_id_); |
+ nqe::internal::CachedNetworkQuality cached_network_quality; |
- if (it == cached_network_qualities_.end()) |
+ if (!network_qualities_manager_.GetCachedNetworkQualityEstimate( |
+ current_network_id_, &cached_network_quality)) { |
+ UMA_HISTOGRAM_BOOLEAN("NQE.CachedNetworkQualityAvailable", false); |
RyanSturm
2016/07/12 18:45:38
Can you combine the two NQE.CacheNetworkQualityAva
tbansal1
2016/07/12 19:40:19
Done.
|
return false; |
- |
- nqe::internal::NetworkQuality network_quality(it->second.network_quality()); |
+ } |
const base::TimeTicks now = tick_clock_->NowTicks(); |
- bool read_cached_estimate = false; |
- if (network_quality.downstream_throughput_kbps() != |
+ if (cached_network_quality.network_quality().downstream_throughput_kbps() != |
nqe::internal::kInvalidThroughput) { |
- read_cached_estimate = true; |
ThroughputObservation througphput_observation( |
- network_quality.downstream_throughput_kbps(), now, |
- NETWORK_QUALITY_OBSERVATION_SOURCE_CACHED_ESTIMATE); |
+ cached_network_quality.network_quality().downstream_throughput_kbps(), |
+ now, NETWORK_QUALITY_OBSERVATION_SOURCE_CACHED_ESTIMATE); |
downstream_throughput_kbps_observations_.AddObservation( |
througphput_observation); |
NotifyObserversOfThroughput(througphput_observation); |
} |
- if (network_quality.http_rtt() != nqe::internal::InvalidRTT()) { |
- read_cached_estimate = true; |
+ if (cached_network_quality.network_quality().http_rtt() != |
+ nqe::internal::InvalidRTT()) { |
RttObservation rtt_observation( |
- network_quality.http_rtt(), now, |
+ cached_network_quality.network_quality().http_rtt(), now, |
NETWORK_QUALITY_OBSERVATION_SOURCE_CACHED_ESTIMATE); |
rtt_observations_.AddObservation(rtt_observation); |
NotifyObserversOfRTT(rtt_observation); |
} |
- |
- return read_cached_estimate; |
+ UMA_HISTOGRAM_BOOLEAN("NQE.CachedNetworkQualityAvailable", true); |
+ return true; |
} |
void NetworkQualityEstimator::OnUpdatedEstimateAvailable( |
@@ -1337,51 +1327,6 @@ void NetworkQualityEstimator::SetTickClockForTesting( |
tick_clock_ = std::move(tick_clock); |
} |
-void NetworkQualityEstimator::CacheNetworkQualityEstimate() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK_LE(cached_network_qualities_.size(), |
- static_cast<size_t>(kMaximumNetworkQualityCacheSize)); |
- |
- // If the network name is unavailable, caching should not be performed. |
- if (current_network_id_.id.empty()) |
- return; |
- |
- base::TimeDelta http_rtt = nqe::internal::InvalidRTT(); |
- int32_t downlink_throughput_kbps = nqe::internal::kInvalidThroughput; |
- |
- if (!GetHttpRTTEstimate(&http_rtt) || |
- !GetDownlinkThroughputKbpsEstimate(&downlink_throughput_kbps)) { |
- return; |
- } |
- |
- // |transport_rtt| is currently not cached. |
- nqe::internal::NetworkQuality network_quality = nqe::internal::NetworkQuality( |
- http_rtt, nqe::internal::InvalidRTT() /* transport_rtt */, |
- downlink_throughput_kbps); |
- |
- if (cached_network_qualities_.size() == kMaximumNetworkQualityCacheSize) { |
- // Remove the oldest entry. |
- CachedNetworkQualities::iterator oldest_entry_iterator = |
- cached_network_qualities_.begin(); |
- |
- for (CachedNetworkQualities::iterator it = |
- cached_network_qualities_.begin(); |
- it != cached_network_qualities_.end(); ++it) { |
- if ((it->second).OlderThan(oldest_entry_iterator->second)) |
- oldest_entry_iterator = it; |
- } |
- cached_network_qualities_.erase(oldest_entry_iterator); |
- } |
- DCHECK_LT(cached_network_qualities_.size(), |
- static_cast<size_t>(kMaximumNetworkQualityCacheSize)); |
- |
- cached_network_qualities_.insert( |
- std::make_pair(current_network_id_, |
- nqe::internal::CachedNetworkQuality(network_quality))); |
- DCHECK_LE(cached_network_qualities_.size(), |
- static_cast<size_t>(kMaximumNetworkQualityCacheSize)); |
-} |
- |
void NetworkQualityEstimator::OnUpdatedRTTAvailable( |
SocketPerformanceWatcherFactory::Protocol protocol, |
const base::TimeDelta& rtt) { |