| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/congestion_control/tcp_cubic_sender_packets.h" | 5 #include "net/quic/congestion_control/tcp_cubic_sender_packets.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 expected_send_window += kDefaultTCPMSS; | 236 expected_send_window += kDefaultTCPMSS; |
| 237 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); | 237 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); |
| 238 | 238 |
| 239 // Now RTO and ensure slow start gets reset. | 239 // Now RTO and ensure slow start gets reset. |
| 240 EXPECT_TRUE(sender_->hybrid_slow_start().started()); | 240 EXPECT_TRUE(sender_->hybrid_slow_start().started()); |
| 241 sender_->OnRetransmissionTimeout(true); | 241 sender_->OnRetransmissionTimeout(true); |
| 242 EXPECT_FALSE(sender_->hybrid_slow_start().started()); | 242 EXPECT_FALSE(sender_->hybrid_slow_start().started()); |
| 243 } | 243 } |
| 244 | 244 |
| 245 TEST_F(TcpCubicSenderPacketsTest, SlowStartPacketLossWithLargeReduction) { | 245 TEST_F(TcpCubicSenderPacketsTest, SlowStartPacketLossWithLargeReduction) { |
| 246 FLAGS_quic_sslr_limit_reduction = true; | |
| 247 QuicConfig config; | 246 QuicConfig config; |
| 248 QuicTagVector options; | 247 QuicTagVector options; |
| 249 options.push_back(kSSLR); | 248 options.push_back(kSSLR); |
| 250 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 249 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 251 sender_->SetFromConfig(config, Perspective::IS_SERVER); | 250 sender_->SetFromConfig(config, Perspective::IS_SERVER); |
| 252 | 251 |
| 253 sender_->SetNumEmulatedConnections(1); | 252 sender_->SetNumEmulatedConnections(1); |
| 254 const int kNumberOfAcks = (kDefaultWindowTCP / (2 * kDefaultTCPMSS)) - 1; | 253 const int kNumberOfAcks = (kDefaultWindowTCP / (2 * kDefaultTCPMSS)) - 1; |
| 255 for (int i = 0; i < kNumberOfAcks; ++i) { | 254 for (int i = 0; i < kNumberOfAcks; ++i) { |
| 256 // Send our full send window. | 255 // Send our full send window. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); | 330 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); |
| 332 | 331 |
| 333 // Lose 10 packets in recovery and verify that congestion window is reduced | 332 // Lose 10 packets in recovery and verify that congestion window is reduced |
| 334 // by 5 packets. | 333 // by 5 packets. |
| 335 LoseNPackets(10, kDefaultTCPMSS / 2); | 334 LoseNPackets(10, kDefaultTCPMSS / 2); |
| 336 expected_send_window -= 5 * kDefaultTCPMSS; | 335 expected_send_window -= 5 * kDefaultTCPMSS; |
| 337 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); | 336 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); |
| 338 } | 337 } |
| 339 | 338 |
| 340 TEST_F(TcpCubicSenderPacketsTest, SlowStartPacketLossWithMaxHalfReduction) { | 339 TEST_F(TcpCubicSenderPacketsTest, SlowStartPacketLossWithMaxHalfReduction) { |
| 341 FLAGS_quic_sslr_limit_reduction = true; | |
| 342 QuicConfig config; | 340 QuicConfig config; |
| 343 QuicTagVector options; | 341 QuicTagVector options; |
| 344 options.push_back(kSSLR); | 342 options.push_back(kSSLR); |
| 345 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 343 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 346 sender_->SetFromConfig(config, Perspective::IS_SERVER); | 344 sender_->SetFromConfig(config, Perspective::IS_SERVER); |
| 347 | 345 |
| 348 sender_->SetNumEmulatedConnections(1); | 346 sender_->SetNumEmulatedConnections(1); |
| 349 const int kNumberOfAcks = kInitialCongestionWindowPackets / 2; | 347 const int kNumberOfAcks = kInitialCongestionWindowPackets / 2; |
| 350 for (int i = 0; i < kNumberOfAcks; ++i) { | 348 for (int i = 0; i < kNumberOfAcks; ++i) { |
| 351 // Send our full send window. | 349 // Send our full send window. |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 sender_->slowstart_threshold()); | 1019 sender_->slowstart_threshold()); |
| 1022 | 1020 |
| 1023 // Resets cwnd and slow start threshold on connection migrations. | 1021 // Resets cwnd and slow start threshold on connection migrations. |
| 1024 sender_->OnConnectionMigration(); | 1022 sender_->OnConnectionMigration(); |
| 1025 EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow()); | 1023 EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow()); |
| 1026 EXPECT_EQ(kMaxCongestionWindowPackets, sender_->slowstart_threshold()); | 1024 EXPECT_EQ(kMaxCongestionWindowPackets, sender_->slowstart_threshold()); |
| 1027 EXPECT_FALSE(sender_->hybrid_slow_start().started()); | 1025 EXPECT_FALSE(sender_->hybrid_slow_start().started()); |
| 1028 } | 1026 } |
| 1029 | 1027 |
| 1030 TEST_F(TcpCubicSenderPacketsTest, DefaultMaxCwnd) { | 1028 TEST_F(TcpCubicSenderPacketsTest, DefaultMaxCwnd) { |
| 1031 ValueRestore<bool> old_flag(&FLAGS_quic_ignore_srbf, true); | |
| 1032 RttStats rtt_stats; | 1029 RttStats rtt_stats; |
| 1033 QuicConnectionStats stats; | 1030 QuicConnectionStats stats; |
| 1034 std::unique_ptr<SendAlgorithmInterface> sender(SendAlgorithmInterface::Create( | 1031 std::unique_ptr<SendAlgorithmInterface> sender(SendAlgorithmInterface::Create( |
| 1035 &clock_, &rtt_stats, kCubic, &stats, kInitialCongestionWindow)); | 1032 &clock_, &rtt_stats, kCubic, &stats, kInitialCongestionWindow)); |
| 1036 | 1033 |
| 1037 SendAlgorithmInterface::CongestionVector acked_packets; | 1034 SendAlgorithmInterface::CongestionVector acked_packets; |
| 1038 SendAlgorithmInterface::CongestionVector missing_packets; | 1035 SendAlgorithmInterface::CongestionVector missing_packets; |
| 1039 for (uint64_t i = 1; i < kDefaultMaxCongestionWindowPackets; ++i) { | 1036 for (uint64_t i = 1; i < kDefaultMaxCongestionWindowPackets; ++i) { |
| 1040 acked_packets.clear(); | 1037 acked_packets.clear(); |
| 1041 acked_packets.push_back(std::make_pair(i, 1350)); | 1038 acked_packets.push_back(std::make_pair(i, 1350)); |
| 1042 sender->OnCongestionEvent(true, sender->GetCongestionWindow(), | 1039 sender->OnCongestionEvent(true, sender->GetCongestionWindow(), |
| 1043 acked_packets, missing_packets); | 1040 acked_packets, missing_packets); |
| 1044 } | 1041 } |
| 1045 EXPECT_EQ(kDefaultMaxCongestionWindowPackets, | 1042 EXPECT_EQ(kDefaultMaxCongestionWindowPackets, |
| 1046 sender->GetCongestionWindow() / kDefaultTCPMSS); | 1043 sender->GetCongestionWindow() / kDefaultTCPMSS); |
| 1047 } | 1044 } |
| 1048 | 1045 |
| 1049 } // namespace test | 1046 } // namespace test |
| 1050 } // namespace net | 1047 } // namespace net |
| OLD | NEW |