| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <limits> | 10 #include <limits> |
| 11 #include <map> | 11 #include <map> |
| 12 #include <memory> | 12 #include <memory> |
| 13 #include <string> | 13 #include <string> |
| 14 #include <utility> | 14 #include <utility> |
| 15 #include <vector> | 15 #include <vector> |
| 16 | 16 |
| 17 #include "base/logging.h" | 17 #include "base/logging.h" |
| 18 #include "base/macros.h" | 18 #include "base/macros.h" |
| 19 #include "base/memory/ptr_util.h" |
| 19 #include "base/metrics/histogram_samples.h" | 20 #include "base/metrics/histogram_samples.h" |
| 20 #include "base/run_loop.h" | 21 #include "base/run_loop.h" |
| 21 #include "base/strings/string_number_conversions.h" | 22 #include "base/strings/string_number_conversions.h" |
| 22 #include "base/test/histogram_tester.h" | 23 #include "base/test/histogram_tester.h" |
| 23 #include "base/test/simple_test_tick_clock.h" | 24 #include "base/test/simple_test_tick_clock.h" |
| 24 #include "base/threading/platform_thread.h" | 25 #include "base/threading/platform_thread.h" |
| 25 #include "base/time/time.h" | 26 #include "base/time/time.h" |
| 26 #include "build/build_config.h" | 27 #include "build/build_config.h" |
| 27 #include "net/base/load_flags.h" | 28 #include "net/base/load_flags.h" |
| 28 #include "net/base/network_change_notifier.h" | 29 #include "net/base/network_change_notifier.h" |
| 29 #include "net/http/http_response_headers.h" | 30 #include "net/http/http_response_headers.h" |
| 30 #include "net/http/http_response_info.h" | 31 #include "net/http/http_response_info.h" |
| 31 #include "net/http/http_status_code.h" | 32 #include "net/http/http_status_code.h" |
| 33 #include "net/log/test_net_log.h" |
| 32 #include "net/nqe/effective_connection_type.h" | 34 #include "net/nqe/effective_connection_type.h" |
| 33 #include "net/nqe/external_estimate_provider.h" | 35 #include "net/nqe/external_estimate_provider.h" |
| 34 #include "net/nqe/network_quality_estimator_test_util.h" | 36 #include "net/nqe/network_quality_estimator_test_util.h" |
| 35 #include "net/nqe/network_quality_observation.h" | 37 #include "net/nqe/network_quality_observation.h" |
| 36 #include "net/nqe/network_quality_observation_source.h" | 38 #include "net/nqe/network_quality_observation_source.h" |
| 37 #include "net/nqe/observation_buffer.h" | 39 #include "net/nqe/observation_buffer.h" |
| 38 #include "net/socket/socket_performance_watcher.h" | 40 #include "net/socket/socket_performance_watcher.h" |
| 39 #include "net/socket/socket_performance_watcher_factory.h" | 41 #include "net/socket/socket_performance_watcher_factory.h" |
| 40 #include "net/url_request/url_request.h" | 42 #include "net/url_request/url_request.h" |
| 41 #include "net/url_request/url_request_test_util.h" | 43 #include "net/url_request/url_request_test_util.h" |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME_DEPRECATED); | 190 request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME_DEPRECATED); |
| 189 request->Start(); | 191 request->Start(); |
| 190 base::RunLoop().Run(); | 192 base::RunLoop().Run(); |
| 191 | 193 |
| 192 // Both RTT and downstream throughput should be updated. | 194 // Both RTT and downstream throughput should be updated. |
| 193 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); | 195 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); |
| 194 EXPECT_TRUE( | 196 EXPECT_TRUE( |
| 195 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); | 197 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); |
| 196 EXPECT_FALSE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); | 198 EXPECT_FALSE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); |
| 197 | 199 |
| 200 EXPECT_EQ( |
| 201 1, estimator.GetEntriesCount(NetLogEventType::NETWORK_QUALITY_CHANGED)); |
| 202 |
| 198 // Check UMA histograms. | 203 // Check UMA histograms. |
| 199 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 0); | 204 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 0); |
| 200 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 0); | 205 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 0); |
| 201 histogram_tester.ExpectUniqueSample( | 206 histogram_tester.ExpectUniqueSample( |
| 202 "NQE.MainFrame.EffectiveConnectionType", | 207 "NQE.MainFrame.EffectiveConnectionType", |
| 203 EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); | 208 EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); |
| 204 histogram_tester.ExpectUniqueSample( | 209 histogram_tester.ExpectUniqueSample( |
| 205 "NQE.MainFrame.EffectiveConnectionType.Unknown", | 210 "NQE.MainFrame.EffectiveConnectionType.Unknown", |
| 206 EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); | 211 EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1); |
| 207 histogram_tester.ExpectUniqueSample("NQE.EstimateAvailable.MainFrame.RTT", 0, | 212 histogram_tester.ExpectUniqueSample("NQE.EstimateAvailable.MainFrame.RTT", 0, |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 TestEffectiveConnectionTypeObserver observer; | 353 TestEffectiveConnectionTypeObserver observer; |
| 349 estimator.AddEffectiveConnectionTypeObserver(&observer); | 354 estimator.AddEffectiveConnectionTypeObserver(&observer); |
| 350 TestRTTObserver rtt_observer; | 355 TestRTTObserver rtt_observer; |
| 351 estimator.AddRTTObserver(&rtt_observer); | 356 estimator.AddRTTObserver(&rtt_observer); |
| 352 TestThroughputObserver throughput_observer; | 357 TestThroughputObserver throughput_observer; |
| 353 estimator.AddThroughputObserver(&throughput_observer); | 358 estimator.AddThroughputObserver(&throughput_observer); |
| 354 | 359 |
| 355 // |observer| should be notified as soon as it is added. | 360 // |observer| should be notified as soon as it is added. |
| 356 base::RunLoop().RunUntilIdle(); | 361 base::RunLoop().RunUntilIdle(); |
| 357 EXPECT_EQ(1U, observer.effective_connection_types().size()); | 362 EXPECT_EQ(1U, observer.effective_connection_types().size()); |
| 363 EXPECT_EQ( |
| 364 1, estimator.GetEntriesCount(NetLogEventType::NETWORK_QUALITY_CHANGED)); |
| 358 | 365 |
| 359 estimator.SimulateNetworkChange( | 366 estimator.SimulateNetworkChange( |
| 360 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); | 367 NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test"); |
| 368 |
| 369 EXPECT_LE( |
| 370 2, estimator.GetEntriesCount(NetLogEventType::NETWORK_QUALITY_CHANGED)); |
| 361 histogram_tester.ExpectBucketCount("NQE.CachedNetworkQualityAvailable", true, | 371 histogram_tester.ExpectBucketCount("NQE.CachedNetworkQualityAvailable", true, |
| 362 1); | 372 1); |
| 363 histogram_tester.ExpectTotalCount("NQE.CachedNetworkQualityAvailable", 2); | 373 histogram_tester.ExpectTotalCount("NQE.CachedNetworkQualityAvailable", 2); |
| 364 base::RunLoop().RunUntilIdle(); | 374 base::RunLoop().RunUntilIdle(); |
| 365 | 375 |
| 366 // Verify that the cached network quality was read, and observers were | 376 // Verify that the cached network quality was read, and observers were |
| 367 // notified. |observer| must be notified once right after it was added, and | 377 // notified. |observer| must be notified once right after it was added, and |
| 368 // once again after the cached network quality was read. | 378 // once again after the cached network quality was read. |
| 369 EXPECT_LE(2U, observer.effective_connection_types().size()); | 379 EXPECT_LE(2U, observer.effective_connection_types().size()); |
| 370 EXPECT_EQ(estimator.GetEffectiveConnectionType(), | 380 EXPECT_EQ(estimator.GetEffectiveConnectionType(), |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 // Verifies that the observers receive the notifications when default estimates | 477 // Verifies that the observers receive the notifications when default estimates |
| 468 // are added to the observations. | 478 // are added to the observations. |
| 469 TEST(NetworkQualityEstimatorTest, DefaultObservations) { | 479 TEST(NetworkQualityEstimatorTest, DefaultObservations) { |
| 470 TestEffectiveConnectionTypeObserver effective_connection_type_observer; | 480 TestEffectiveConnectionTypeObserver effective_connection_type_observer; |
| 471 TestRTTAndThroughputEstimatesObserver rtt_throughput_estimates_observer; | 481 TestRTTAndThroughputEstimatesObserver rtt_throughput_estimates_observer; |
| 472 TestRTTObserver rtt_observer; | 482 TestRTTObserver rtt_observer; |
| 473 TestThroughputObserver throughput_observer; | 483 TestThroughputObserver throughput_observer; |
| 474 std::map<std::string, std::string> variation_params; | 484 std::map<std::string, std::string> variation_params; |
| 475 TestNetworkQualityEstimator estimator( | 485 TestNetworkQualityEstimator estimator( |
| 476 nullptr, variation_params, false, false, | 486 nullptr, variation_params, false, false, |
| 477 true /* add_default_platform_observations */); | 487 true /* add_default_platform_observations */, |
| 488 base::MakeUnique<BoundTestNetLog>()); |
| 478 base::TimeDelta rtt; | 489 base::TimeDelta rtt; |
| 479 int32_t kbps; | 490 int32_t kbps; |
| 480 | 491 |
| 481 // Default estimates should be available. | 492 // Default estimates should be available. |
| 482 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); | 493 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); |
| 483 EXPECT_EQ(base::TimeDelta::FromMilliseconds(115), rtt); | 494 EXPECT_EQ(base::TimeDelta::FromMilliseconds(115), rtt); |
| 484 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); | 495 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); |
| 485 EXPECT_EQ(base::TimeDelta::FromMilliseconds(55), rtt); | 496 EXPECT_EQ(base::TimeDelta::FromMilliseconds(55), rtt); |
| 486 EXPECT_TRUE( | 497 EXPECT_TRUE( |
| 487 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); | 498 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 507 EXPECT_EQ(749, kbps); | 518 EXPECT_EQ(749, kbps); |
| 508 | 519 |
| 509 EXPECT_NE(EFFECTIVE_CONNECTION_TYPE_UNKNOWN, | 520 EXPECT_NE(EFFECTIVE_CONNECTION_TYPE_UNKNOWN, |
| 510 estimator.GetEffectiveConnectionType()); | 521 estimator.GetEffectiveConnectionType()); |
| 511 EXPECT_EQ( | 522 EXPECT_EQ( |
| 512 1U, | 523 1U, |
| 513 effective_connection_type_observer.effective_connection_types().size()); | 524 effective_connection_type_observer.effective_connection_types().size()); |
| 514 EXPECT_NE( | 525 EXPECT_NE( |
| 515 EFFECTIVE_CONNECTION_TYPE_UNKNOWN, | 526 EFFECTIVE_CONNECTION_TYPE_UNKNOWN, |
| 516 effective_connection_type_observer.effective_connection_types().front()); | 527 effective_connection_type_observer.effective_connection_types().front()); |
| 528 EXPECT_EQ( |
| 529 2, estimator.GetEntriesCount(NetLogEventType::NETWORK_QUALITY_CHANGED)); |
| 517 | 530 |
| 518 EXPECT_EQ(3, rtt_throughput_estimates_observer.notifications_received()); | 531 EXPECT_EQ(3, rtt_throughput_estimates_observer.notifications_received()); |
| 519 EXPECT_EQ(base::TimeDelta::FromMilliseconds(272), | 532 EXPECT_EQ(base::TimeDelta::FromMilliseconds(272), |
| 520 rtt_throughput_estimates_observer.http_rtt()); | 533 rtt_throughput_estimates_observer.http_rtt()); |
| 521 EXPECT_EQ(base::TimeDelta::FromMilliseconds(209), | 534 EXPECT_EQ(base::TimeDelta::FromMilliseconds(209), |
| 522 rtt_throughput_estimates_observer.transport_rtt()); | 535 rtt_throughput_estimates_observer.transport_rtt()); |
| 523 EXPECT_EQ(749, | 536 EXPECT_EQ(749, |
| 524 rtt_throughput_estimates_observer.downstream_throughput_kbps()); | 537 rtt_throughput_estimates_observer.downstream_throughput_kbps()); |
| 525 | 538 |
| 526 EXPECT_EQ(2U, rtt_observer.observations().size()); | 539 EXPECT_EQ(2U, rtt_observer.observations().size()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 551 // Negative variation value should not be used. | 564 // Negative variation value should not be used. |
| 552 variation_params["2G.DefaultMedianRTTMsec"] = "-5"; | 565 variation_params["2G.DefaultMedianRTTMsec"] = "-5"; |
| 553 | 566 |
| 554 variation_params["Unknown.DefaultMedianTransportRTTMsec"] = "500"; | 567 variation_params["Unknown.DefaultMedianTransportRTTMsec"] = "500"; |
| 555 variation_params["WiFi.DefaultMedianTransportRTTMsec"] = "1000"; | 568 variation_params["WiFi.DefaultMedianTransportRTTMsec"] = "1000"; |
| 556 // Negative variation value should not be used. | 569 // Negative variation value should not be used. |
| 557 variation_params["2G.DefaultMedianTransportRTTMsec"] = "-5"; | 570 variation_params["2G.DefaultMedianTransportRTTMsec"] = "-5"; |
| 558 | 571 |
| 559 TestNetworkQualityEstimator estimator( | 572 TestNetworkQualityEstimator estimator( |
| 560 nullptr, variation_params, false, false, | 573 nullptr, variation_params, false, false, |
| 561 true /* add_default_platform_observations */); | 574 true /* add_default_platform_observations */, |
| 575 base::MakeUnique<BoundTestNetLog>()); |
| 562 | 576 |
| 563 base::TimeDelta rtt; | 577 base::TimeDelta rtt; |
| 564 int32_t kbps; | 578 int32_t kbps; |
| 565 | 579 |
| 566 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); | 580 EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); |
| 567 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), rtt); | 581 EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000), rtt); |
| 568 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); | 582 EXPECT_TRUE(estimator.GetRecentTransportRTT(base::TimeTicks(), &rtt)); |
| 569 EXPECT_EQ(base::TimeDelta::FromMilliseconds(500), rtt); | 583 EXPECT_EQ(base::TimeDelta::FromMilliseconds(500), rtt); |
| 570 EXPECT_TRUE( | 584 EXPECT_TRUE( |
| 571 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); | 585 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); |
| (...skipping 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1444 }, | 1458 }, |
| 1445 { | 1459 { |
| 1446 true, | 1460 true, |
| 1447 }, | 1461 }, |
| 1448 }; | 1462 }; |
| 1449 | 1463 |
| 1450 for (const auto& test : tests) { | 1464 for (const auto& test : tests) { |
| 1451 TestNetworkQualityEstimator estimator( | 1465 TestNetworkQualityEstimator estimator( |
| 1452 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params, | 1466 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params, |
| 1453 test.allow_small_localhost_requests, | 1467 test.allow_small_localhost_requests, |
| 1454 test.allow_small_localhost_requests, false); | 1468 test.allow_small_localhost_requests, false, |
| 1469 base::MakeUnique<BoundTestNetLog>()); |
| 1455 | 1470 |
| 1456 base::TimeDelta rtt; | 1471 base::TimeDelta rtt; |
| 1457 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); | 1472 EXPECT_FALSE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt)); |
| 1458 int32_t kbps; | 1473 int32_t kbps; |
| 1459 EXPECT_FALSE( | 1474 EXPECT_FALSE( |
| 1460 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); | 1475 estimator.GetRecentDownlinkThroughputKbps(base::TimeTicks(), &kbps)); |
| 1461 | 1476 |
| 1462 TestDelegate test_delegate; | 1477 TestDelegate test_delegate; |
| 1463 TestURLRequestContext context(true); | 1478 TestURLRequestContext context(true); |
| 1464 context.set_network_quality_estimator(&estimator); | 1479 context.set_network_quality_estimator(&estimator); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 estimator.set_start_time_null_downlink_throughput_kbps(100000); | 1527 estimator.set_start_time_null_downlink_throughput_kbps(100000); |
| 1513 | 1528 |
| 1514 tick_clock_ptr->Advance(base::TimeDelta::FromMinutes(60)); | 1529 tick_clock_ptr->Advance(base::TimeDelta::FromMinutes(60)); |
| 1515 | 1530 |
| 1516 std::unique_ptr<URLRequest> request(context.CreateRequest( | 1531 std::unique_ptr<URLRequest> request(context.CreateRequest( |
| 1517 estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); | 1532 estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); |
| 1518 request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME_DEPRECATED); | 1533 request->SetLoadFlags(request->load_flags() | LOAD_MAIN_FRAME_DEPRECATED); |
| 1519 request->Start(); | 1534 request->Start(); |
| 1520 base::RunLoop().Run(); | 1535 base::RunLoop().Run(); |
| 1521 EXPECT_EQ(1U, observer.effective_connection_types().size()); | 1536 EXPECT_EQ(1U, observer.effective_connection_types().size()); |
| 1537 EXPECT_EQ( |
| 1538 1, estimator.GetEntriesCount(NetLogEventType::NETWORK_QUALITY_CHANGED)); |
| 1522 histogram_tester.ExpectUniqueSample("NQE.MainFrame.EffectiveConnectionType", | 1539 histogram_tester.ExpectUniqueSample("NQE.MainFrame.EffectiveConnectionType", |
| 1523 EFFECTIVE_CONNECTION_TYPE_2G, 1); | 1540 EFFECTIVE_CONNECTION_TYPE_2G, 1); |
| 1524 histogram_tester.ExpectUniqueSample( | 1541 histogram_tester.ExpectUniqueSample( |
| 1525 "NQE.MainFrame.EffectiveConnectionType.Unknown", | 1542 "NQE.MainFrame.EffectiveConnectionType.Unknown", |
| 1526 EFFECTIVE_CONNECTION_TYPE_2G, 1); | 1543 EFFECTIVE_CONNECTION_TYPE_2G, 1); |
| 1527 | 1544 |
| 1528 // Next request should not trigger recomputation of effective connection type | 1545 // Next request should not trigger recomputation of effective connection type |
| 1529 // since there has been no change in the clock. | 1546 // since there has been no change in the clock. |
| 1530 std::unique_ptr<URLRequest> request2(context.CreateRequest( | 1547 std::unique_ptr<URLRequest> request2(context.CreateRequest( |
| 1531 estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); | 1548 estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate)); |
| (...skipping 1070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2602 "test_ect_4g")] = | 2619 "test_ect_4g")] = |
| 2603 nqe::internal::CachedNetworkQuality(EFFECTIVE_CONNECTION_TYPE_4G); | 2620 nqe::internal::CachedNetworkQuality(EFFECTIVE_CONNECTION_TYPE_4G); |
| 2604 | 2621 |
| 2605 std::map<std::string, std::string> variation_params; | 2622 std::map<std::string, std::string> variation_params; |
| 2606 variation_params["effective_connection_type_algorithm"] = | 2623 variation_params["effective_connection_type_algorithm"] = |
| 2607 "TransportRTTOrDownstreamThroughput"; | 2624 "TransportRTTOrDownstreamThroughput"; |
| 2608 // Disable default platform values so that the effect of cached estimates | 2625 // Disable default platform values so that the effect of cached estimates |
| 2609 // at the time of startup can be studied in isolation. | 2626 // at the time of startup can be studied in isolation. |
| 2610 TestNetworkQualityEstimator estimator( | 2627 TestNetworkQualityEstimator estimator( |
| 2611 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params, true, | 2628 std::unique_ptr<net::ExternalEstimateProvider>(), variation_params, true, |
| 2612 true, false /* use_default_platform_values */); | 2629 true, false /* use_default_platform_values */, |
| 2630 base::MakeUnique<BoundTestNetLog>()); |
| 2613 | 2631 |
| 2614 // Add observers. | 2632 // Add observers. |
| 2615 TestRTTObserver rtt_observer; | 2633 TestRTTObserver rtt_observer; |
| 2616 TestThroughputObserver throughput_observer; | 2634 TestThroughputObserver throughput_observer; |
| 2617 TestRTTAndThroughputEstimatesObserver rtt_throughput_observer; | 2635 TestRTTAndThroughputEstimatesObserver rtt_throughput_observer; |
| 2618 TestEffectiveConnectionTypeObserver effective_connection_type_observer; | 2636 TestEffectiveConnectionTypeObserver effective_connection_type_observer; |
| 2619 estimator.AddRTTObserver(&rtt_observer); | 2637 estimator.AddRTTObserver(&rtt_observer); |
| 2620 estimator.AddThroughputObserver(&throughput_observer); | 2638 estimator.AddThroughputObserver(&throughput_observer); |
| 2621 estimator.AddRTTAndThroughputEstimatesObserver(&rtt_throughput_observer); | 2639 estimator.AddRTTAndThroughputEstimatesObserver(&rtt_throughput_observer); |
| 2622 estimator.AddEffectiveConnectionTypeObserver( | 2640 estimator.AddEffectiveConnectionTypeObserver( |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2689 | 2707 |
| 2690 // Cleanup. | 2708 // Cleanup. |
| 2691 estimator.RemoveRTTObserver(&rtt_observer); | 2709 estimator.RemoveRTTObserver(&rtt_observer); |
| 2692 estimator.RemoveThroughputObserver(&throughput_observer); | 2710 estimator.RemoveThroughputObserver(&throughput_observer); |
| 2693 estimator.RemoveRTTAndThroughputEstimatesObserver(&rtt_throughput_observer); | 2711 estimator.RemoveRTTAndThroughputEstimatesObserver(&rtt_throughput_observer); |
| 2694 estimator.RemoveEffectiveConnectionTypeObserver( | 2712 estimator.RemoveEffectiveConnectionTypeObserver( |
| 2695 &effective_connection_type_observer); | 2713 &effective_connection_type_observer); |
| 2696 } | 2714 } |
| 2697 | 2715 |
| 2698 } // namespace net | 2716 } // namespace net |
| OLD | NEW |