| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/quic/core/congestion_control/bbr_sender.h" | 5 #include "net/quic/core/congestion_control/bbr_sender.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| 11 #include "base/logging.h" | |
| 12 #include "net/quic/core/congestion_control/rtt_stats.h" | 11 #include "net/quic/core/congestion_control/rtt_stats.h" |
| 13 #include "net/quic/core/quic_packets.h" | 12 #include "net/quic/core/quic_packets.h" |
| 14 #include "net/quic/core/quic_utils.h" | 13 #include "net/quic/core/quic_utils.h" |
| 14 #include "net/quic/platform/api/quic_logging.h" |
| 15 #include "net/quic/test_tools/mock_clock.h" | 15 #include "net/quic/test_tools/mock_clock.h" |
| 16 #include "net/quic/test_tools/quic_config_peer.h" | 16 #include "net/quic/test_tools/quic_config_peer.h" |
| 17 #include "net/quic/test_tools/quic_connection_peer.h" | 17 #include "net/quic/test_tools/quic_connection_peer.h" |
| 18 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 18 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 19 #include "net/quic/test_tools/quic_test_utils.h" | 19 #include "net/quic/test_tools/quic_test_utils.h" |
| 20 #include "net/quic/test_tools/simulator/quic_endpoint.h" | 20 #include "net/quic/test_tools/simulator/quic_endpoint.h" |
| 21 #include "net/quic/test_tools/simulator/simulator.h" | 21 #include "net/quic/test_tools/simulator/simulator.h" |
| 22 #include "net/quic/test_tools/simulator/switch.h" | 22 #include "net/quic/test_tools/simulator/switch.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 24 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 kInitialCongestionWindowPackets, | 88 kInitialCongestionWindowPackets, |
| 89 kDefaultMaxCongestionWindowPackets, &random_); | 89 kDefaultMaxCongestionWindowPackets, &random_); |
| 90 QuicConnectionPeer::SetSendAlgorithm(bbr_sender_.connection(), | 90 QuicConnectionPeer::SetSendAlgorithm(bbr_sender_.connection(), |
| 91 kDefaultPathId, sender_); | 91 kDefaultPathId, sender_); |
| 92 | 92 |
| 93 clock_ = simulator_.GetClock(); | 93 clock_ = simulator_.GetClock(); |
| 94 simulator_.set_random_generator(&random_); | 94 simulator_.set_random_generator(&random_); |
| 95 | 95 |
| 96 uint64_t seed = QuicRandom::GetInstance()->RandUint64(); | 96 uint64_t seed = QuicRandom::GetInstance()->RandUint64(); |
| 97 random_.set_seed(seed); | 97 random_.set_seed(seed); |
| 98 VLOG(1) << "BbrSenderTest simulator set up. Seed: " << seed; | 98 QUIC_LOG(INFO) << "BbrSenderTest simulator set up. Seed: " << seed; |
| 99 } | 99 } |
| 100 | 100 |
| 101 simulator::Simulator simulator_; | 101 simulator::Simulator simulator_; |
| 102 simulator::QuicEndpoint bbr_sender_; | 102 simulator::QuicEndpoint bbr_sender_; |
| 103 simulator::QuicEndpoint receiver_; | 103 simulator::QuicEndpoint receiver_; |
| 104 std::unique_ptr<simulator::Switch> switch_; | 104 std::unique_ptr<simulator::Switch> switch_; |
| 105 std::unique_ptr<simulator::SymmetricLink> bbr_sender_link_; | 105 std::unique_ptr<simulator::SymmetricLink> bbr_sender_link_; |
| 106 std::unique_ptr<simulator::SymmetricLink> receiver_link_; | 106 std::unique_ptr<simulator::SymmetricLink> receiver_link_; |
| 107 | 107 |
| 108 SimpleRandom random_; | 108 SimpleRandom random_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 139 kTestPropagationDelay)); | 139 kTestPropagationDelay)); |
| 140 } | 140 } |
| 141 | 141 |
| 142 void DoSimpleTransfer(QuicByteCount transfer_size, QuicTime::Delta deadline) { | 142 void DoSimpleTransfer(QuicByteCount transfer_size, QuicTime::Delta deadline) { |
| 143 bbr_sender_.AddBytesToTransfer(transfer_size); | 143 bbr_sender_.AddBytesToTransfer(transfer_size); |
| 144 bool simulator_result = simulator_.RunUntilOrTimeout( | 144 bool simulator_result = simulator_.RunUntilOrTimeout( |
| 145 [this]() { return bbr_sender_.bytes_to_transfer() == 0; }, deadline); | 145 [this]() { return bbr_sender_.bytes_to_transfer() == 0; }, deadline); |
| 146 EXPECT_TRUE(simulator_result) | 146 EXPECT_TRUE(simulator_result) |
| 147 << "Simple transfer failed. Bytes remaining: " | 147 << "Simple transfer failed. Bytes remaining: " |
| 148 << bbr_sender_.bytes_to_transfer(); | 148 << bbr_sender_.bytes_to_transfer(); |
| 149 VLOG(1) << "Simple transfer state: " << sender_->ExportDebugState(); | 149 QUIC_LOG(INFO) << "Simple transfer state: " << sender_->ExportDebugState(); |
| 150 } | 150 } |
| 151 | 151 |
| 152 // Drive the simulator by sending enough data to enter PROBE_BW. | 152 // Drive the simulator by sending enough data to enter PROBE_BW. |
| 153 void DriveOutOfStartup() { | 153 void DriveOutOfStartup() { |
| 154 ASSERT_FALSE(sender_->ExportDebugState().is_at_full_bandwidth); | 154 ASSERT_FALSE(sender_->ExportDebugState().is_at_full_bandwidth); |
| 155 DoSimpleTransfer(1024 * 1024, QuicTime::Delta::FromSeconds(15)); | 155 DoSimpleTransfer(1024 * 1024, QuicTime::Delta::FromSeconds(15)); |
| 156 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode); | 156 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode); |
| 157 ExpectApproxEq(kTestLinkBandwidth, | 157 ExpectApproxEq(kTestLinkBandwidth, |
| 158 sender_->ExportDebugState().max_bandwidth, 0.01f); | 158 sender_->ExportDebugState().max_bandwidth, 0.01f); |
| 159 } | 159 } |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 // Send another packet. | 459 // Send another packet. |
| 460 bbr_sender_.AddBytesToTransfer(1000); | 460 bbr_sender_.AddBytesToTransfer(1000); |
| 461 simulator_result = simulator_.RunUntilOrTimeout( | 461 simulator_result = simulator_.RunUntilOrTimeout( |
| 462 [this]() { return receiver_.bytes_received() == 2000; }, timeout); | 462 [this]() { return receiver_.bytes_received() == 2000; }, timeout); |
| 463 ASSERT_TRUE(simulator_result); | 463 ASSERT_TRUE(simulator_result); |
| 464 EXPECT_GE(sender_->PacingRate(0), initial_rate); | 464 EXPECT_GE(sender_->PacingRate(0), initial_rate); |
| 465 } | 465 } |
| 466 | 466 |
| 467 } // namespace test | 467 } // namespace test |
| 468 } // namespace net | 468 } // namespace net |
| OLD | NEW |