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