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

Side by Side Diff: net/nqe/network_quality_estimator.cc

Issue 2763853002: Use Android callback API to obtain cellular signal strength (Closed)
Patch Set: comments Created 3 years, 5 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 unified diff | Download patch
« no previous file with comments | « net/nqe/network_quality_estimator.h ('k') | net/nqe/network_quality_estimator_params.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/nqe/network_quality_estimator.h" 5 #include "net/nqe/network_quality_estimator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <utility> 10 #include <utility>
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 use_small_responses_(use_smaller_responses_for_tests), 238 use_small_responses_(use_smaller_responses_for_tests),
239 disable_offline_check_(false), 239 disable_offline_check_(false),
240 add_default_platform_observations_(add_default_platform_observations), 240 add_default_platform_observations_(add_default_platform_observations),
241 tick_clock_(new base::DefaultTickClock()), 241 tick_clock_(new base::DefaultTickClock()),
242 last_connection_change_(tick_clock_->NowTicks()), 242 last_connection_change_(tick_clock_->NowTicks()),
243 current_network_id_(nqe::internal::NetworkID( 243 current_network_id_(nqe::internal::NetworkID(
244 NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN, 244 NetworkChangeNotifier::ConnectionType::CONNECTION_UNKNOWN,
245 std::string())), 245 std::string())),
246 downstream_throughput_kbps_observations_( 246 downstream_throughput_kbps_observations_(
247 params_->weight_multiplier_per_second(), 247 params_->weight_multiplier_per_second(),
248 params_->weight_multiplier_per_dbm()), 248 params_->weight_multiplier_per_signal_strength_level()),
249 rtt_observations_(params_->weight_multiplier_per_second(), 249 rtt_observations_(params_->weight_multiplier_per_second(),
250 params_->weight_multiplier_per_dbm()), 250 params_->weight_multiplier_per_signal_strength_level()),
251 effective_connection_type_at_last_main_frame_( 251 effective_connection_type_at_last_main_frame_(
252 EFFECTIVE_CONNECTION_TYPE_UNKNOWN), 252 EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
253 external_estimate_provider_(std::move(external_estimates_provider)), 253 external_estimate_provider_(std::move(external_estimates_provider)),
254 effective_connection_type_recomputation_interval_( 254 effective_connection_type_recomputation_interval_(
255 base::TimeDelta::FromSeconds(10)), 255 base::TimeDelta::FromSeconds(10)),
256 rtt_observations_size_at_last_ect_computation_(0), 256 rtt_observations_size_at_last_ect_computation_(0),
257 throughput_observations_size_at_last_ect_computation_(0), 257 throughput_observations_size_at_last_ect_computation_(0),
258 effective_connection_type_(EFFECTIVE_CONNECTION_TYPE_UNKNOWN), 258 effective_connection_type_(EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
259 signal_strength_dbm_(INT32_MIN),
260 min_signal_strength_since_connection_change_(INT32_MAX),
261 max_signal_strength_since_connection_change_(INT32_MIN),
262 event_creator_(net_log), 259 event_creator_(net_log),
263 disallowed_observation_sources_for_http_( 260 disallowed_observation_sources_for_http_(
264 {NETWORK_QUALITY_OBSERVATION_SOURCE_TCP, 261 {NETWORK_QUALITY_OBSERVATION_SOURCE_TCP,
265 NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC, 262 NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC,
266 NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE, 263 NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE,
267 NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM}), 264 NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM}),
268 disallowed_observation_sources_for_transport_( 265 disallowed_observation_sources_for_transport_(
269 {NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 266 {NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP,
270 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE, 267 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE,
271 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE, 268 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 base::TimeDelta observed_http_rtt = 428 base::TimeDelta observed_http_rtt =
432 load_timing_info.receive_headers_end - load_timing_info.send_start; 429 load_timing_info.receive_headers_end - load_timing_info.send_start;
433 DCHECK_GE(observed_http_rtt, base::TimeDelta()); 430 DCHECK_GE(observed_http_rtt, base::TimeDelta());
434 if (observed_http_rtt < peak_network_quality_.http_rtt() || 431 if (observed_http_rtt < peak_network_quality_.http_rtt() ||
435 peak_network_quality_.http_rtt() == nqe::internal::InvalidRTT()) { 432 peak_network_quality_.http_rtt() == nqe::internal::InvalidRTT()) {
436 peak_network_quality_ = nqe::internal::NetworkQuality( 433 peak_network_quality_ = nqe::internal::NetworkQuality(
437 observed_http_rtt, peak_network_quality_.transport_rtt(), 434 observed_http_rtt, peak_network_quality_.transport_rtt(),
438 peak_network_quality_.downstream_throughput_kbps()); 435 peak_network_quality_.downstream_throughput_kbps());
439 } 436 }
440 437
441 RttObservation http_rtt_observation( 438 RttObservation http_rtt_observation(observed_http_rtt,
442 observed_http_rtt, tick_clock_->NowTicks(), signal_strength_dbm_, 439 tick_clock_->NowTicks(), signal_strength_,
443 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP); 440 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP);
444 rtt_observations_.AddObservation(http_rtt_observation); 441 rtt_observations_.AddObservation(http_rtt_observation);
445 NotifyObserversOfRTT(http_rtt_observation); 442 NotifyObserversOfRTT(http_rtt_observation);
446 } 443 }
447 444
448 void NetworkQualityEstimator::RecordAccuracyAfterMainFrame( 445 void NetworkQualityEstimator::RecordAccuracyAfterMainFrame(
449 base::TimeDelta measuring_duration) const { 446 base::TimeDelta measuring_duration) const {
450 DCHECK(thread_checker_.CalledOnValidThread()); 447 DCHECK(thread_checker_.CalledOnValidThread());
451 DCHECK_EQ(0, measuring_duration.InMilliseconds() % 1000); 448 DCHECK_EQ(0, measuring_duration.InMilliseconds() % 1000);
452 DCHECK(ContainsValue(GetAccuracyRecordingIntervals(), measuring_duration)); 449 DCHECK(ContainsValue(GetAccuracyRecordingIntervals(), measuring_duration));
453 450
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 last_effective_connection_type_computation_, 795 last_effective_connection_type_computation_,
799 network_quality_, effective_connection_type_)); 796 network_quality_, effective_connection_type_));
800 797
801 // Clear the local state. 798 // Clear the local state.
802 last_connection_change_ = tick_clock_->NowTicks(); 799 last_connection_change_ = tick_clock_->NowTicks();
803 peak_network_quality_ = nqe::internal::NetworkQuality(); 800 peak_network_quality_ = nqe::internal::NetworkQuality();
804 downstream_throughput_kbps_observations_.Clear(); 801 downstream_throughput_kbps_observations_.Clear();
805 rtt_observations_.Clear(); 802 rtt_observations_.Clear();
806 803
807 #if defined(OS_ANDROID) 804 #if defined(OS_ANDROID)
808 if (params_->weight_multiplier_per_dbm() < 1.0 && 805 if (params_->weight_multiplier_per_signal_strength_level() < 1.0 &&
809 NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) { 806 NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type)) {
810 UMA_HISTOGRAM_BOOLEAN( 807 bool signal_strength_available =
811 "NQE.CellularSignalStrengthAvailable", 808 min_signal_strength_since_connection_change_ &&
812 min_signal_strength_since_connection_change_ != INT32_MAX && 809 max_signal_strength_since_connection_change_;
813 max_signal_strength_since_connection_change_ != INT32_MIN); 810 UMA_HISTOGRAM_BOOLEAN("NQE.CellularSignalStrength.LevelAvailable",
811 signal_strength_available);
814 812
815 if (min_signal_strength_since_connection_change_ != INT32_MAX && 813 if (signal_strength_available) {
816 max_signal_strength_since_connection_change_ != INT32_MIN) {
817 UMA_HISTOGRAM_COUNTS_100( 814 UMA_HISTOGRAM_COUNTS_100(
818 "NQE.CellularSignalStrengthDifference", 815 "NQE.CellularSignalStrength.LevelDifference",
819 max_signal_strength_since_connection_change_ - 816 max_signal_strength_since_connection_change_.value() -
820 min_signal_strength_since_connection_change_); 817 min_signal_strength_since_connection_change_.value());
821 } 818 }
822 } 819 }
823 #endif // OS_ANDROID 820 #endif // OS_ANDROID
824 signal_strength_dbm_ = INT32_MIN; 821 signal_strength_.reset();
825 min_signal_strength_since_connection_change_ = INT32_MAX; 822 min_signal_strength_since_connection_change_.reset();
826 max_signal_strength_since_connection_change_ = INT32_MIN; 823 max_signal_strength_since_connection_change_.reset();
827 network_quality_ = nqe::internal::NetworkQuality(); 824 network_quality_ = nqe::internal::NetworkQuality();
828 effective_connection_type_ = EFFECTIVE_CONNECTION_TYPE_UNKNOWN; 825 effective_connection_type_ = EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
829 effective_connection_type_at_last_main_frame_ = 826 effective_connection_type_at_last_main_frame_ =
830 EFFECTIVE_CONNECTION_TYPE_UNKNOWN; 827 EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
831 rtt_observations_size_at_last_ect_computation_ = 0; 828 rtt_observations_size_at_last_ect_computation_ = 0;
832 throughput_observations_size_at_last_ect_computation_ = 0; 829 throughput_observations_size_at_last_ect_computation_ = 0;
833 830
834 // Update the local state as part of preparation for the new connection. 831 // Update the local state as part of preparation for the new connection.
835 current_network_id_ = GetCurrentNetworkID(); 832 current_network_id_ = GetCurrentNetworkID();
836 RecordNetworkIDAvailability(); 833 RecordNetworkIDAvailability();
(...skipping 22 matching lines...) Expand all
859 current_network_id_.type != NetworkChangeNotifier::CONNECTION_UNKNOWN && 856 current_network_id_.type != NetworkChangeNotifier::CONNECTION_UNKNOWN &&
860 current_network_id_.type != NetworkChangeNotifier::CONNECTION_ETHERNET && 857 current_network_id_.type != NetworkChangeNotifier::CONNECTION_ETHERNET &&
861 current_network_id_.type != NetworkChangeNotifier::CONNECTION_BLUETOOTH) { 858 current_network_id_.type != NetworkChangeNotifier::CONNECTION_BLUETOOTH) {
862 RecordExternalEstimateProviderMetrics( 859 RecordExternalEstimateProviderMetrics(
863 EXTERNAL_ESTIMATE_PROVIDER_STATUS_QUERIED); 860 EXTERNAL_ESTIMATE_PROVIDER_STATUS_QUERIED);
864 external_estimate_provider_->Update(); 861 external_estimate_provider_->Update();
865 } 862 }
866 } 863 }
867 864
868 void NetworkQualityEstimator::UpdateSignalStrength() { 865 void NetworkQualityEstimator::UpdateSignalStrength() {
866 DCHECK(thread_checker_.CalledOnValidThread());
867
868 signal_strength_.reset();
869 #if defined(OS_ANDROID) 869 #if defined(OS_ANDROID)
870 if (params_->weight_multiplier_per_dbm() >= 1.0 || 870 if (params_->weight_multiplier_per_signal_strength_level() >= 1.0)
871 !NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type) || 871 return;
872 !android::cellular_signal_strength::GetSignalStrengthDbm( 872 if (!NetworkChangeNotifier::IsConnectionCellular(current_network_id_.type))
873 &signal_strength_dbm_)) { 873 return;
874 signal_strength_dbm_ = INT32_MIN; 874
875 } 875 signal_strength_ =
876 min_signal_strength_since_connection_change_ = std::min( 876 android::cellular_signal_strength::GetSignalStrengthLevel();
877 min_signal_strength_since_connection_change_, signal_strength_dbm_); 877
878 max_signal_strength_since_connection_change_ = std::max( 878 if (!signal_strength_)
879 max_signal_strength_since_connection_change_, signal_strength_dbm_); 879 return;
880
881 min_signal_strength_since_connection_change_ =
882 std::min(min_signal_strength_since_connection_change_.value_or(INT32_MAX),
883 signal_strength_.value());
884 max_signal_strength_since_connection_change_ =
885 std::max(max_signal_strength_since_connection_change_.value_or(INT32_MIN),
886 signal_strength_.value());
880 #endif // OS_ANDROID 887 #endif // OS_ANDROID
881 } 888 }
882 889
883 void NetworkQualityEstimator::RecordMetricsOnConnectionTypeChanged() const { 890 void NetworkQualityEstimator::RecordMetricsOnConnectionTypeChanged() const {
884 DCHECK(thread_checker_.CalledOnValidThread()); 891 DCHECK(thread_checker_.CalledOnValidThread());
885 if (peak_network_quality_.http_rtt() != nqe::internal::InvalidRTT()) { 892 if (peak_network_quality_.http_rtt() != nqe::internal::InvalidRTT()) {
886 base::HistogramBase* rtt_histogram = 893 base::HistogramBase* rtt_histogram =
887 GetHistogram("FastestRTT.", current_network_id_.type, 10 * 1000); 894 GetHistogram("FastestRTT.", current_network_id_.type, 10 * 1000);
888 rtt_histogram->Add(peak_network_quality_.http_rtt().InMilliseconds()); 895 rtt_histogram->Add(peak_network_quality_.http_rtt().InMilliseconds());
889 } 896 }
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 const base::Optional<Statistic>& statistic, 1348 const base::Optional<Statistic>& statistic,
1342 int percentile) const { 1349 int percentile) const {
1343 DCHECK(thread_checker_.CalledOnValidThread()); 1350 DCHECK(thread_checker_.CalledOnValidThread());
1344 1351
1345 // RTT observations are sorted by duration from shortest to longest, thus 1352 // RTT observations are sorted by duration from shortest to longest, thus
1346 // a higher percentile RTT will have a longer RTT than a lower percentile. 1353 // a higher percentile RTT will have a longer RTT than a lower percentile.
1347 base::TimeDelta rtt = nqe::internal::InvalidRTT(); 1354 base::TimeDelta rtt = nqe::internal::InvalidRTT();
1348 1355
1349 if (!statistic) { 1356 if (!statistic) {
1350 // Use default statistic algorithm. 1357 // Use default statistic algorithm.
1351 if (!rtt_observations_.GetPercentile(start_time, signal_strength_dbm_, &rtt, 1358 if (!rtt_observations_.GetPercentile(start_time, signal_strength_, &rtt,
1352 percentile, 1359 percentile,
1353 disallowed_observation_sources)) { 1360 disallowed_observation_sources)) {
1354 return nqe::internal::InvalidRTT(); 1361 return nqe::internal::InvalidRTT();
1355 } 1362 }
1356 return rtt; 1363 return rtt;
1357 } 1364 }
1358 1365
1359 switch (statistic.value()) { 1366 switch (statistic.value()) {
1360 case STATISTIC_LAST: 1367 case STATISTIC_LAST:
1361 NOTREACHED(); 1368 NOTREACHED();
1362 return nqe::internal::InvalidRTT(); 1369 return nqe::internal::InvalidRTT();
1363 case STATISTIC_WEIGHTED_AVERAGE: 1370 case STATISTIC_WEIGHTED_AVERAGE:
1364 if (!rtt_observations_.GetWeightedAverage( 1371 if (!rtt_observations_.GetWeightedAverage(start_time, signal_strength_,
1365 start_time, signal_strength_dbm_, disallowed_observation_sources, 1372 disallowed_observation_sources,
1366 &rtt)) { 1373 &rtt)) {
1367 return nqe::internal::InvalidRTT(); 1374 return nqe::internal::InvalidRTT();
1368 } 1375 }
1369 return rtt; 1376 return rtt;
1370 case STATISTIC_UNWEIGHTED_AVERAGE: 1377 case STATISTIC_UNWEIGHTED_AVERAGE:
1371 if (!rtt_observations_.GetUnweightedAverage( 1378 if (!rtt_observations_.GetUnweightedAverage(
1372 start_time, signal_strength_dbm_, disallowed_observation_sources, 1379 start_time, signal_strength_, disallowed_observation_sources,
1373 &rtt)) { 1380 &rtt)) {
1374 return nqe::internal::InvalidRTT(); 1381 return nqe::internal::InvalidRTT();
1375 } 1382 }
1376 return rtt; 1383 return rtt;
1377 } 1384 }
1378 NOTREACHED(); 1385 NOTREACHED();
1379 return nqe::internal::InvalidRTT(); 1386 return nqe::internal::InvalidRTT();
1380 } 1387 }
1381 1388
1382 int32_t NetworkQualityEstimator::GetDownlinkThroughputKbpsEstimateInternal( 1389 int32_t NetworkQualityEstimator::GetDownlinkThroughputKbpsEstimateInternal(
1383 const base::TimeTicks& start_time, 1390 const base::TimeTicks& start_time,
1384 int percentile) const { 1391 int percentile) const {
1385 DCHECK(thread_checker_.CalledOnValidThread()); 1392 DCHECK(thread_checker_.CalledOnValidThread());
1386 1393
1387 // Throughput observations are sorted by kbps from slowest to fastest, 1394 // Throughput observations are sorted by kbps from slowest to fastest,
1388 // thus a higher percentile throughput will be faster than a lower one. 1395 // thus a higher percentile throughput will be faster than a lower one.
1389 int32_t kbps = nqe::internal::kInvalidThroughput; 1396 int32_t kbps = nqe::internal::kInvalidThroughput;
1390 if (!downstream_throughput_kbps_observations_.GetPercentile( 1397 if (!downstream_throughput_kbps_observations_.GetPercentile(
1391 start_time, signal_strength_dbm_, &kbps, 100 - percentile, 1398 start_time, signal_strength_, &kbps, 100 - percentile,
1392 std::vector<NetworkQualityObservationSource>())) { 1399 std::vector<NetworkQualityObservationSource>())) {
1393 return nqe::internal::kInvalidThroughput; 1400 return nqe::internal::kInvalidThroughput;
1394 } 1401 }
1395 return kbps; 1402 return kbps;
1396 } 1403 }
1397 1404
1398 nqe::internal::NetworkID NetworkQualityEstimator::GetCurrentNetworkID() const { 1405 nqe::internal::NetworkID NetworkQualityEstimator::GetCurrentNetworkID() const {
1399 DCHECK(thread_checker_.CalledOnValidThread()); 1406 DCHECK(thread_checker_.CalledOnValidThread());
1400 1407
1401 // TODO(tbansal): crbug.com/498068 Add NetworkQualityEstimatorAndroid class 1408 // TODO(tbansal): crbug.com/498068 Add NetworkQualityEstimatorAndroid class
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 RecordExternalEstimateProviderMetrics( 1511 RecordExternalEstimateProviderMetrics(
1505 EXTERNAL_ESTIMATE_PROVIDER_STATUS_CALLBACK); 1512 EXTERNAL_ESTIMATE_PROVIDER_STATUS_CALLBACK);
1506 1513
1507 external_estimate_provider_quality_ = nqe::internal::NetworkQuality(); 1514 external_estimate_provider_quality_ = nqe::internal::NetworkQuality();
1508 1515
1509 if (rtt > base::TimeDelta()) { 1516 if (rtt > base::TimeDelta()) {
1510 RecordExternalEstimateProviderMetrics( 1517 RecordExternalEstimateProviderMetrics(
1511 EXTERNAL_ESTIMATE_PROVIDER_STATUS_RTT_AVAILABLE); 1518 EXTERNAL_ESTIMATE_PROVIDER_STATUS_RTT_AVAILABLE);
1512 UMA_HISTOGRAM_TIMES("NQE.ExternalEstimateProvider.RTT", rtt); 1519 UMA_HISTOGRAM_TIMES("NQE.ExternalEstimateProvider.RTT", rtt);
1513 RttObservation rtt_observation( 1520 RttObservation rtt_observation(
1514 rtt, tick_clock_->NowTicks(), signal_strength_dbm_, 1521 rtt, tick_clock_->NowTicks(), signal_strength_,
1515 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE); 1522 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE);
1516 rtt_observations_.AddObservation(rtt_observation); 1523 rtt_observations_.AddObservation(rtt_observation);
1517 external_estimate_provider_quality_.set_http_rtt(rtt); 1524 external_estimate_provider_quality_.set_http_rtt(rtt);
1518 NotifyObserversOfRTT(rtt_observation); 1525 NotifyObserversOfRTT(rtt_observation);
1519 } 1526 }
1520 1527
1521 if (downstream_throughput_kbps > 0) { 1528 if (downstream_throughput_kbps > 0) {
1522 RecordExternalEstimateProviderMetrics( 1529 RecordExternalEstimateProviderMetrics(
1523 EXTERNAL_ESTIMATE_PROVIDER_STATUS_DOWNLINK_BANDWIDTH_AVAILABLE); 1530 EXTERNAL_ESTIMATE_PROVIDER_STATUS_DOWNLINK_BANDWIDTH_AVAILABLE);
1524 UMA_HISTOGRAM_COUNTS("NQE.ExternalEstimateProvider.DownlinkBandwidth", 1531 UMA_HISTOGRAM_COUNTS("NQE.ExternalEstimateProvider.DownlinkBandwidth",
1525 downstream_throughput_kbps); 1532 downstream_throughput_kbps);
1526 ThroughputObservation throughput_observation( 1533 ThroughputObservation throughput_observation(
1527 downstream_throughput_kbps, tick_clock_->NowTicks(), 1534 downstream_throughput_kbps, tick_clock_->NowTicks(), signal_strength_,
1528 signal_strength_dbm_,
1529 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE); 1535 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE);
1530 downstream_throughput_kbps_observations_.AddObservation( 1536 downstream_throughput_kbps_observations_.AddObservation(
1531 throughput_observation); 1537 throughput_observation);
1532 external_estimate_provider_quality_.set_downstream_throughput_kbps( 1538 external_estimate_provider_quality_.set_downstream_throughput_kbps(
1533 downstream_throughput_kbps); 1539 downstream_throughput_kbps);
1534 NotifyObserversOfThroughput(throughput_observation); 1540 NotifyObserversOfThroughput(throughput_observation);
1535 } 1541 }
1536 } 1542 }
1537 1543
1538 void NetworkQualityEstimator::SetTickClockForTesting( 1544 void NetworkQualityEstimator::SetTickClockForTesting(
1539 std::unique_ptr<base::TickClock> tick_clock) { 1545 std::unique_ptr<base::TickClock> tick_clock) {
1540 DCHECK(thread_checker_.CalledOnValidThread()); 1546 DCHECK(thread_checker_.CalledOnValidThread());
1541 tick_clock_ = std::move(tick_clock); 1547 tick_clock_ = std::move(tick_clock);
1542 } 1548 }
1543 1549
1544 double NetworkQualityEstimator::RandDouble() const { 1550 double NetworkQualityEstimator::RandDouble() const {
1545 return base::RandDouble(); 1551 return base::RandDouble();
1546 } 1552 }
1547 1553
1548 void NetworkQualityEstimator::OnUpdatedRTTAvailable( 1554 void NetworkQualityEstimator::OnUpdatedRTTAvailable(
1549 SocketPerformanceWatcherFactory::Protocol protocol, 1555 SocketPerformanceWatcherFactory::Protocol protocol,
1550 const base::TimeDelta& rtt) { 1556 const base::TimeDelta& rtt) {
1551 DCHECK(thread_checker_.CalledOnValidThread()); 1557 DCHECK(thread_checker_.CalledOnValidThread());
1552 DCHECK_NE(nqe::internal::InvalidRTT(), rtt); 1558 DCHECK_NE(nqe::internal::InvalidRTT(), rtt);
1553 1559
1554 RttObservation observation(rtt, tick_clock_->NowTicks(), signal_strength_dbm_, 1560 RttObservation observation(rtt, tick_clock_->NowTicks(), signal_strength_,
1555 ProtocolSourceToObservationSource(protocol)); 1561 ProtocolSourceToObservationSource(protocol));
1556 NotifyObserversOfRTT(observation); 1562 NotifyObserversOfRTT(observation);
1557 rtt_observations_.AddObservation(observation); 1563 rtt_observations_.AddObservation(observation);
1558 } 1564 }
1559 1565
1560 void NetworkQualityEstimator::NotifyObserversOfRTT( 1566 void NetworkQualityEstimator::NotifyObserversOfRTT(
1561 const RttObservation& observation) { 1567 const RttObservation& observation) {
1562 DCHECK(thread_checker_.CalledOnValidThread()); 1568 DCHECK(thread_checker_.CalledOnValidThread());
1563 DCHECK_NE(nqe::internal::InvalidRTT(), observation.value); 1569 DCHECK_NE(nqe::internal::InvalidRTT(), observation.value);
1564 DCHECK_GT(NETWORK_QUALITY_OBSERVATION_SOURCE_MAX, observation.source); 1570 DCHECK_GT(NETWORK_QUALITY_OBSERVATION_SOURCE_MAX, observation.source);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 DCHECK_NE(nqe::internal::kInvalidThroughput, downstream_kbps); 1609 DCHECK_NE(nqe::internal::kInvalidThroughput, downstream_kbps);
1604 1610
1605 if (downstream_kbps > peak_network_quality_.downstream_throughput_kbps() || 1611 if (downstream_kbps > peak_network_quality_.downstream_throughput_kbps() ||
1606 peak_network_quality_.downstream_throughput_kbps() == 1612 peak_network_quality_.downstream_throughput_kbps() ==
1607 nqe::internal::kInvalidThroughput) { 1613 nqe::internal::kInvalidThroughput) {
1608 peak_network_quality_ = nqe::internal::NetworkQuality( 1614 peak_network_quality_ = nqe::internal::NetworkQuality(
1609 peak_network_quality_.http_rtt(), peak_network_quality_.transport_rtt(), 1615 peak_network_quality_.http_rtt(), peak_network_quality_.transport_rtt(),
1610 downstream_kbps); 1616 downstream_kbps);
1611 } 1617 }
1612 ThroughputObservation throughput_observation( 1618 ThroughputObservation throughput_observation(
1613 downstream_kbps, tick_clock_->NowTicks(), signal_strength_dbm_, 1619 downstream_kbps, tick_clock_->NowTicks(), signal_strength_,
1614 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP); 1620 NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP);
1615 downstream_throughput_kbps_observations_.AddObservation( 1621 downstream_throughput_kbps_observations_.AddObservation(
1616 throughput_observation); 1622 throughput_observation);
1617 NotifyObserversOfThroughput(throughput_observation); 1623 NotifyObserversOfThroughput(throughput_observation);
1618 } 1624 }
1619 1625
1620 void NetworkQualityEstimator::MaybeComputeEffectiveConnectionType() { 1626 void NetworkQualityEstimator::MaybeComputeEffectiveConnectionType() {
1621 DCHECK(thread_checker_.CalledOnValidThread()); 1627 DCHECK(thread_checker_.CalledOnValidThread());
1622 1628
1623 const base::TimeTicks now = tick_clock_->NowTicks(); 1629 const base::TimeTicks now = tick_clock_->NowTicks();
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 return "UnweightedAverage"; 1826 return "UnweightedAverage";
1821 case STATISTIC_LAST: 1827 case STATISTIC_LAST:
1822 NOTREACHED(); 1828 NOTREACHED();
1823 return ""; 1829 return "";
1824 } 1830 }
1825 NOTREACHED(); 1831 NOTREACHED();
1826 return ""; 1832 return "";
1827 } 1833 }
1828 1834
1829 } // namespace net 1835 } // namespace net
OLDNEW
« no previous file with comments | « net/nqe/network_quality_estimator.h ('k') | net/nqe/network_quality_estimator_params.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698