Chromium Code Reviews| Index: net/nqe/network_quality_estimator.cc |
| diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc |
| index ded544753f0048f6968e87444b62e2a86ba35db9..064fa02112c11ef52e781f67a39a397cce25791b 100644 |
| --- a/net/nqe/network_quality_estimator.cc |
| +++ b/net/nqe/network_quality_estimator.cc |
| @@ -42,7 +42,6 @@ |
| #include "url/gurl.h" |
| #if defined(OS_ANDROID) |
| -#include "net/android/cellular_signal_strength.h" |
| #include "net/android/network_library.h" |
| #endif // OS_ANDROID |
| @@ -253,8 +252,9 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
| add_default_platform_observations_(add_default_platform_observations), |
| weight_multiplier_per_second_( |
| nqe::internal::GetWeightMultiplierPerSecond(variation_params)), |
| - weight_multiplier_per_dbm_( |
| - nqe::internal::GetWeightMultiplierPerDbm(variation_params)), |
| + weight_multiplier_per_signal_strength_level_( |
| + nqe::internal::GetWeightMultiplierPerSignalStrengthLevel( |
| + variation_params)), |
| effective_connection_type_algorithm_( |
| algorithm_name_to_enum_.find( |
| nqe::internal::GetEffectiveConnectionTypeAlgorithm( |
| @@ -269,10 +269,11 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
| current_network_id_(nqe::internal::NetworkID( |
| NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, |
| std::string())), |
| - downstream_throughput_kbps_observations_(weight_multiplier_per_second_, |
| - weight_multiplier_per_dbm_), |
| + downstream_throughput_kbps_observations_( |
| + weight_multiplier_per_second_, |
| + weight_multiplier_per_signal_strength_level_), |
| rtt_observations_(weight_multiplier_per_second_, |
| - weight_multiplier_per_dbm_), |
| + weight_multiplier_per_signal_strength_level_), |
| effective_connection_type_at_last_main_frame_( |
| EFFECTIVE_CONNECTION_TYPE_UNKNOWN), |
| external_estimate_provider_(std::move(external_estimates_provider)), |
| @@ -281,7 +282,7 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
| rtt_observations_size_at_last_ect_computation_(0), |
| throughput_observations_size_at_last_ect_computation_(0), |
| effective_connection_type_(EFFECTIVE_CONNECTION_TYPE_UNKNOWN), |
| - signal_strength_dbm_(INT32_MIN), |
| + signal_strength_(INT32_MIN), |
| min_signal_strength_since_connection_change_(INT32_MAX), |
| max_signal_strength_since_connection_change_(INT32_MIN), |
| correlation_uma_logging_probability_( |
| @@ -318,6 +319,12 @@ NetworkQualityEstimator::NetworkQualityEstimator( |
| network_quality_store_.reset(new nqe::internal::NetworkQualityStore()); |
| ObtainOperatingParams(variation_params); |
| + |
| +#if defined(OS_ANDROID) |
| + if (weight_multiplier_per_signal_strength_level_ < 1.0) |
| + cellular_signal_strength_.reset(new android::CellularSignalStrength()); |
| +#endif // OS_ANDROID |
| + |
| NetworkChangeNotifier::AddConnectionTypeObserver(this); |
| if (external_estimate_provider_) { |
| RecordExternalEstimateProviderMetrics( |
| @@ -493,9 +500,9 @@ void NetworkQualityEstimator::NotifyHeadersReceived(const URLRequest& request) { |
| peak_network_quality_.downstream_throughput_kbps()); |
| } |
| - RttObservation http_rtt_observation( |
| - observed_http_rtt, tick_clock_->NowTicks(), signal_strength_dbm_, |
| - NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP); |
| + RttObservation http_rtt_observation(observed_http_rtt, |
| + tick_clock_->NowTicks(), signal_strength_, |
| + NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP); |
| rtt_observations_.AddObservation(http_rtt_observation); |
| NotifyObserversOfRTT(http_rtt_observation); |
| } |
| @@ -856,23 +863,23 @@ void NetworkQualityEstimator::OnConnectionTypeChanged( |
| rtt_observations_.Clear(); |
| #if defined(OS_ANDROID) |
| - if (weight_multiplier_per_dbm_ < 1.0 && |
| + if (cellular_signal_strength_ && |
| NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) { |
| UMA_HISTOGRAM_BOOLEAN( |
| - "NQE.CellularSignalStrengthAvailable", |
| + "NQE.CellularSignalStrength.LevelAvailable", |
| min_signal_strength_since_connection_change_ != INT32_MAX && |
| max_signal_strength_since_connection_change_ != INT32_MIN); |
| if (min_signal_strength_since_connection_change_ != INT32_MAX && |
| max_signal_strength_since_connection_change_ != INT32_MIN) { |
| UMA_HISTOGRAM_COUNTS_100( |
| - "NQE.CellularSignalStrengthDifference", |
| + "NQE.CellularSignalStrength.LevelDifference", |
| max_signal_strength_since_connection_change_ - |
| min_signal_strength_since_connection_change_); |
| } |
| } |
| #endif // OS_ANDROID |
| - signal_strength_dbm_ = INT32_MIN; |
| + signal_strength_ = INT32_MIN; |
|
RyanSturm
2017/03/22 21:51:08
Is this the right bound (would 0 and 6 work for mi
tbansal1
2017/03/23 18:28:53
I have changed these to base::Optional.
|
| min_signal_strength_since_connection_change_ = INT32_MAX; |
| max_signal_strength_since_connection_change_ = INT32_MIN; |
| network_quality_ = nqe::internal::NetworkQuality(); |
| @@ -917,17 +924,18 @@ void NetworkQualityEstimator::MaybeQueryExternalEstimateProvider() const { |
| } |
| void NetworkQualityEstimator::UpdateSignalStrength() { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + |
| #if defined(OS_ANDROID) |
| - if (weight_multiplier_per_dbm_ >= 1.0 || |
| + if (!cellular_signal_strength_ || |
| !NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type) || |
| - !android::cellular_signal_strength::GetSignalStrengthDbm( |
| - &signal_strength_dbm_)) { |
| - signal_strength_dbm_ = INT32_MIN; |
| - } |
| - min_signal_strength_since_connection_change_ = std::min( |
| - min_signal_strength_since_connection_change_, signal_strength_dbm_); |
| - max_signal_strength_since_connection_change_ = std::max( |
| - max_signal_strength_since_connection_change_, signal_strength_dbm_); |
| + !cellular_signal_strength_->GetSignalStrengthLevel(&signal_strength_)) { |
| + signal_strength_ = INT32_MIN; |
| + } |
| + min_signal_strength_since_connection_change_ = |
| + std::min(min_signal_strength_since_connection_change_, signal_strength_); |
| + max_signal_strength_since_connection_change_ = |
| + std::max(max_signal_strength_since_connection_change_, signal_strength_); |
| #endif // OS_ANDROID |
| } |
| @@ -1380,7 +1388,7 @@ base::TimeDelta NetworkQualityEstimator::GetRTTEstimateInternal( |
| if (!statistic) { |
| // Use default statistic algorithm. |
| - if (!rtt_observations_.GetPercentile(start_time, signal_strength_dbm_, &rtt, |
| + if (!rtt_observations_.GetPercentile(start_time, signal_strength_, &rtt, |
| percentile, |
| disallowed_observation_sources)) { |
| return nqe::internal::InvalidRTT(); |
| @@ -1393,15 +1401,15 @@ base::TimeDelta NetworkQualityEstimator::GetRTTEstimateInternal( |
| NOTREACHED(); |
| return nqe::internal::InvalidRTT(); |
| case STATISTIC_WEIGHTED_AVERAGE: |
| - if (!rtt_observations_.GetWeightedAverage( |
| - start_time, signal_strength_dbm_, disallowed_observation_sources, |
| - &rtt)) { |
| + if (!rtt_observations_.GetWeightedAverage(start_time, signal_strength_, |
| + disallowed_observation_sources, |
| + &rtt)) { |
| return nqe::internal::InvalidRTT(); |
| } |
| return rtt; |
| case STATISTIC_UNWEIGHTED_AVERAGE: |
| if (!rtt_observations_.GetUnweightedAverage( |
| - start_time, signal_strength_dbm_, disallowed_observation_sources, |
| + start_time, signal_strength_, disallowed_observation_sources, |
| &rtt)) { |
| return nqe::internal::InvalidRTT(); |
| } |
| @@ -1420,7 +1428,7 @@ int32_t NetworkQualityEstimator::GetDownlinkThroughputKbpsEstimateInternal( |
| // thus a higher percentile throughput will be faster than a lower one. |
| int32_t kbps = nqe::internal::kInvalidThroughput; |
| if (!downstream_throughput_kbps_observations_.GetPercentile( |
| - start_time, signal_strength_dbm_, &kbps, 100 - percentile, |
| + start_time, signal_strength_, &kbps, 100 - percentile, |
| std::vector<NetworkQualityObservationSource>())) { |
| return nqe::internal::kInvalidThroughput; |
| } |
| @@ -1543,7 +1551,7 @@ void NetworkQualityEstimator::OnUpdatedEstimateAvailable( |
| EXTERNAL_ESTIMATE_PROVIDER_STATUS_RTT_AVAILABLE); |
| UMA_HISTOGRAM_TIMES("NQE.ExternalEstimateProvider.RTT", rtt); |
| RttObservation rtt_observation( |
| - rtt, tick_clock_->NowTicks(), signal_strength_dbm_, |
| + rtt, tick_clock_->NowTicks(), signal_strength_, |
| NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE); |
| rtt_observations_.AddObservation(rtt_observation); |
| external_estimate_provider_quality_.set_http_rtt(rtt); |
| @@ -1556,8 +1564,7 @@ void NetworkQualityEstimator::OnUpdatedEstimateAvailable( |
| UMA_HISTOGRAM_COUNTS("NQE.ExternalEstimateProvider.DownlinkBandwidth", |
| downstream_throughput_kbps); |
| ThroughputObservation throughput_observation( |
| - downstream_throughput_kbps, tick_clock_->NowTicks(), |
| - signal_strength_dbm_, |
| + downstream_throughput_kbps, tick_clock_->NowTicks(), signal_strength_, |
| NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE); |
| downstream_throughput_kbps_observations_.AddObservation( |
| throughput_observation); |
| @@ -1583,7 +1590,7 @@ void NetworkQualityEstimator::OnUpdatedRTTAvailable( |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK_NE(nqe::internal::InvalidRTT(), rtt); |
| - RttObservation observation(rtt, tick_clock_->NowTicks(), signal_strength_dbm_, |
| + RttObservation observation(rtt, tick_clock_->NowTicks(), signal_strength_, |
| ProtocolSourceToObservationSource(protocol)); |
| NotifyObserversOfRTT(observation); |
| rtt_observations_.AddObservation(observation); |
| @@ -1642,7 +1649,7 @@ void NetworkQualityEstimator::OnNewThroughputObservationAvailable( |
| downstream_kbps); |
| } |
| ThroughputObservation throughput_observation( |
| - downstream_kbps, tick_clock_->NowTicks(), signal_strength_dbm_, |
| + downstream_kbps, tick_clock_->NowTicks(), signal_strength_, |
| NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP); |
| downstream_throughput_kbps_observations_.AddObservation( |
| throughput_observation); |