| 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..7dd4534ab730fa2ffd8399ef7367422ef2e2b525 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,9 +282,6 @@ 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),
|
| - min_signal_strength_since_connection_change_(INT32_MAX),
|
| - max_signal_strength_since_connection_change_(INT32_MIN),
|
| correlation_uma_logging_probability_(
|
| nqe::internal::correlation_uma_logging_probability(variation_params)),
|
| forced_effective_connection_type_set_(
|
| @@ -318,6 +316,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 +497,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,25 +860,25 @@ 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",
|
| - min_signal_strength_since_connection_change_ != INT32_MAX &&
|
| - max_signal_strength_since_connection_change_ != INT32_MIN);
|
| + bool signal_strength_available =
|
| + min_signal_strength_since_connection_change_ &&
|
| + max_signal_strength_since_connection_change_;
|
| + UMA_HISTOGRAM_BOOLEAN("NQE.CellularSignalStrength.LevelAvailable",
|
| + signal_strength_available);
|
|
|
| - if (min_signal_strength_since_connection_change_ != INT32_MAX &&
|
| - max_signal_strength_since_connection_change_ != INT32_MIN) {
|
| + if (signal_strength_available) {
|
| UMA_HISTOGRAM_COUNTS_100(
|
| - "NQE.CellularSignalStrengthDifference",
|
| - max_signal_strength_since_connection_change_ -
|
| - min_signal_strength_since_connection_change_);
|
| + "NQE.CellularSignalStrength.LevelDifference",
|
| + max_signal_strength_since_connection_change_.value() -
|
| + min_signal_strength_since_connection_change_.value());
|
| }
|
| }
|
| #endif // OS_ANDROID
|
| - signal_strength_dbm_ = INT32_MIN;
|
| - min_signal_strength_since_connection_change_ = INT32_MAX;
|
| - max_signal_strength_since_connection_change_ = INT32_MIN;
|
| + signal_strength_.reset();
|
| + min_signal_strength_since_connection_change_.reset();
|
| + max_signal_strength_since_connection_change_.reset();
|
| network_quality_ = nqe::internal::NetworkQuality();
|
| effective_connection_type_ = EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
|
| effective_connection_type_at_last_main_frame_ =
|
| @@ -917,17 +921,26 @@ void NetworkQualityEstimator::MaybeQueryExternalEstimateProvider() const {
|
| }
|
|
|
| void NetworkQualityEstimator::UpdateSignalStrength() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + signal_strength_.reset();
|
| #if defined(OS_ANDROID)
|
| - if (weight_multiplier_per_dbm_ >= 1.0 ||
|
| - !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_);
|
| + if (!cellular_signal_strength_)
|
| + return;
|
| + if (!NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type))
|
| + return;
|
| +
|
| + signal_strength_ = cellular_signal_strength_->GetSignalStrengthLevel();
|
| +
|
| + if (!signal_strength_)
|
| + return;
|
| +
|
| + min_signal_strength_since_connection_change_ =
|
| + std::min(min_signal_strength_since_connection_change_.value_or(INT32_MAX),
|
| + signal_strength_.value());
|
| + max_signal_strength_since_connection_change_ =
|
| + std::max(max_signal_strength_since_connection_change_.value_or(INT32_MIN),
|
| + signal_strength_.value());
|
| #endif // OS_ANDROID
|
| }
|
|
|
| @@ -1380,7 +1393,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 +1406,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 +1433,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 +1556,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 +1569,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 +1595,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 +1654,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);
|
|
|