Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Unified Diff: net/nqe/network_quality_estimator.cc

Issue 2763853002: Use Android callback API to obtain cellular signal strength (Closed)
Patch Set: ps Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698