| Index: net/quic/congestion_control/tcp_cubic_sender_test.cc
|
| diff --git a/net/quic/congestion_control/tcp_cubic_sender_test.cc b/net/quic/congestion_control/tcp_cubic_sender_test.cc
|
| index e6e9e8bd383e964dfc4a215fecd7afcc14f226eb..83f97620ae3aef7f599a339c68ec14dd901c999c 100644
|
| --- a/net/quic/congestion_control/tcp_cubic_sender_test.cc
|
| +++ b/net/quic/congestion_control/tcp_cubic_sender_test.cc
|
| @@ -29,13 +29,13 @@ class TcpCubicSenderPeer : public TcpCubicSender {
|
| TcpCubicSenderPeer(const QuicClock* clock,
|
| bool reno,
|
| QuicTcpCongestionWindow max_tcp_congestion_window)
|
| - : TcpCubicSender(
|
| - clock, &rtt_stats_, reno, max_tcp_congestion_window, &stats_) {
|
| - }
|
| + : TcpCubicSender(clock,
|
| + &rtt_stats_,
|
| + reno,
|
| + max_tcp_congestion_window,
|
| + &stats_) {}
|
|
|
| - QuicTcpCongestionWindow congestion_window() {
|
| - return congestion_window_;
|
| - }
|
| + QuicTcpCongestionWindow congestion_window() { return congestion_window_; }
|
|
|
| const HybridSlowStart& hybrid_slow_start() const {
|
| return hybrid_slow_start_;
|
| @@ -52,24 +52,26 @@ class TcpCubicSenderTest : public ::testing::Test {
|
| protected:
|
| TcpCubicSenderTest()
|
| : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
|
| - sender_(new TcpCubicSenderPeer(&clock_, true,
|
| + sender_(new TcpCubicSenderPeer(&clock_,
|
| + true,
|
| kDefaultMaxCongestionWindowTCP)),
|
| receiver_(new TcpReceiver()),
|
| sequence_number_(1),
|
| - acked_sequence_number_(0) {
|
| - }
|
| + acked_sequence_number_(0) {}
|
|
|
| int SendAvailableSendWindow() {
|
| // Send as long as TimeUntilSend returns Zero.
|
| int packets_sent = 0;
|
| - bool can_send = sender_->TimeUntilSend(
|
| - clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero();
|
| + bool can_send =
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero();
|
| while (can_send) {
|
| - sender_->OnPacketSent(clock_.Now(), sequence_number_++, kDefaultTCPMSS,
|
| + sender_->OnPacketSent(clock_.Now(),
|
| + sequence_number_++,
|
| + kDefaultTCPMSS,
|
| HAS_RETRANSMITTABLE_DATA);
|
| ++packets_sent;
|
| - can_send = sender_->TimeUntilSend(
|
| - clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero();
|
| + can_send = sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)
|
| + .IsZero();
|
| }
|
| return packets_sent;
|
| }
|
| @@ -111,41 +113,41 @@ TEST_F(TcpCubicSenderTest, SimpleSender) {
|
| EXPECT_EQ(kDefaultWindowTCP, sender_->AvailableSendWindow());
|
| EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow());
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
|
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // And that window is un-affected.
|
| EXPECT_EQ(kDefaultWindowTCP, sender_->AvailableSendWindow());
|
| EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow());
|
|
|
| // There is available window, so we should be able to send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| // Fill the send window with data, then verify that we can't send.
|
| SendAvailableSendWindow();
|
| - EXPECT_FALSE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_FALSE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| }
|
|
|
| TEST_F(TcpCubicSenderTest, ExponentialSlowStart) {
|
| const int kNumberOfAcks = 20;
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| for (int i = 0; i < kNumberOfAcks; ++i) {
|
| // Send our full send window.
|
| @@ -166,14 +168,14 @@ TEST_F(TcpCubicSenderTest, SlowStartAckTrain) {
|
| const int kNumberOfAcks = 65;
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| for (int i = 0; i < kNumberOfAcks; ++i) {
|
| // Send our full send window.
|
| @@ -209,14 +211,14 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLoss) {
|
| // Make sure that we fall out of slow start when we encounter a packet loss.
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| const int kNumberOfAcks = 10;
|
| for (int i = 0; i < kNumberOfAcks; ++i) {
|
| @@ -225,16 +227,16 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLoss) {
|
| AckNPackets(2);
|
| }
|
| SendAvailableSendWindow();
|
| - QuicByteCount expected_send_window = kDefaultWindowTCP +
|
| - (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| + QuicByteCount expected_send_window =
|
| + kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
|
|
| sender_->OnPacketLost(acked_sequence_number_ + 1, clock_.Now());
|
| ++acked_sequence_number_;
|
|
|
| // Make sure that we can send right now due to limited transmit.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| // We should now have fallen out of slow start.
|
| // We expect window to be cut in half by Reno.
|
| @@ -277,8 +279,8 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
|
| // Make sure that we fall out of slow start when we encounter a packet loss.
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| @@ -291,8 +293,8 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
|
| AckNPackets(2);
|
| }
|
| SendAvailableSendWindow();
|
| - QuicByteCount expected_send_window = kDefaultWindowTCP +
|
| - (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| + QuicByteCount expected_send_window =
|
| + kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
|
|
| LoseNPackets(1);
|
| @@ -303,8 +305,8 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
|
|
| // Send 1 packet to simulate limited transmit.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| EXPECT_EQ(1, SendAvailableSendWindow());
|
|
|
| // Testing TCP proportional rate reduction.
|
| @@ -316,8 +318,8 @@ TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
|
| size_t remaining_packets_in_recovery = number_of_packets_in_window * 2 - 1;
|
| for (size_t i = 0; i < remaining_packets_in_recovery - 1; i += 2) {
|
| AckNPackets(2);
|
| - EXPECT_TRUE(sender_->TimeUntilSend(
|
| - clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)
|
| + .IsZero());
|
| EXPECT_EQ(0u, sender_->AvailableSendWindow());
|
| EXPECT_EQ(1, SendAvailableSendWindow());
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
| @@ -346,8 +348,8 @@ TEST_F(TcpCubicSenderTest, SlowStartBurstPacketLossPRR) {
|
| // Make sure that we fall out of slow start when we encounter a packet loss.
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| @@ -360,8 +362,8 @@ TEST_F(TcpCubicSenderTest, SlowStartBurstPacketLossPRR) {
|
| AckNPackets(2);
|
| }
|
| SendAvailableSendWindow();
|
| - QuicByteCount expected_send_window = kDefaultWindowTCP +
|
| - (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| + QuicByteCount expected_send_window =
|
| + kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
|
|
| // Ack a packet with a 15 packet gap, losing 13 of them due to FACK.
|
| @@ -448,10 +450,10 @@ TEST_F(TcpCubicSenderTest, RetransmissionDelay) {
|
| EXPECT_NEAR(expected_delay.ToMilliseconds(),
|
| sender_->RetransmissionDelay().ToMilliseconds(),
|
| 1);
|
| - EXPECT_EQ(static_cast<int64>(
|
| - sender_->GetCongestionWindow() * kNumMicrosPerSecond /
|
| - sender_->rtt_stats_.SmoothedRtt().ToMicroseconds()),
|
| - sender_->BandwidthEstimate().ToBytesPerSecond());
|
| + EXPECT_EQ(
|
| + static_cast<int64>(sender_->GetCongestionWindow() * kNumMicrosPerSecond /
|
| + sender_->rtt_stats_.SmoothedRtt().ToMicroseconds()),
|
| + sender_->BandwidthEstimate().ToBytesPerSecond());
|
| }
|
|
|
| TEST_F(TcpCubicSenderTest, SlowStartMaxSendWindow) {
|
| @@ -462,42 +464,39 @@ TEST_F(TcpCubicSenderTest, SlowStartMaxSendWindow) {
|
|
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| for (int i = 0; i < kNumberOfAcks; ++i) {
|
| // Send our full send window.
|
| SendAvailableSendWindow();
|
| AckNPackets(2);
|
| }
|
| - QuicByteCount expected_send_window =
|
| - kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| + QuicByteCount expected_send_window = kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
| }
|
|
|
| TEST_F(TcpCubicSenderTest, TcpRenoMaxCongestionWindow) {
|
| const QuicTcpCongestionWindow kMaxCongestionWindowTCP = 50;
|
| const int kNumberOfAcks = 1000;
|
| - sender_.reset(
|
| - new TcpCubicSenderPeer(&clock_, true, kMaxCongestionWindowTCP));
|
| + sender_.reset(new TcpCubicSenderPeer(&clock_, true, kMaxCongestionWindowTCP));
|
|
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| -
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| SendAvailableSendWindow();
|
| AckNPackets(2);
|
| @@ -510,8 +509,7 @@ TEST_F(TcpCubicSenderTest, TcpRenoMaxCongestionWindow) {
|
| AckNPackets(2);
|
| }
|
|
|
| - QuicByteCount expected_send_window =
|
| - kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| + QuicByteCount expected_send_window = kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
| }
|
|
|
| @@ -525,14 +523,14 @@ TEST_F(TcpCubicSenderTest, TcpCubicMaxCongestionWindow) {
|
|
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| // Make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
|
|
| SendAvailableSendWindow();
|
| AckNPackets(2);
|
| @@ -545,8 +543,7 @@ TEST_F(TcpCubicSenderTest, TcpCubicMaxCongestionWindow) {
|
| AckNPackets(2);
|
| }
|
|
|
| - QuicByteCount expected_send_window =
|
| - kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| + QuicByteCount expected_send_window = kMaxCongestionWindowTCP * kDefaultTCPMSS;
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
| }
|
|
|
| @@ -572,13 +569,17 @@ TEST_F(TcpCubicSenderTest, SendWindowNotAffectedByAcks) {
|
| // Send a packet with no retransmittable data, and ensure that the congestion
|
| // window doesn't change.
|
| QuicByteCount bytes_in_packet = min(kDefaultTCPMSS, send_window);
|
| - sender_->OnPacketSent(clock_.Now(), sequence_number_++, bytes_in_packet,
|
| + sender_->OnPacketSent(clock_.Now(),
|
| + sequence_number_++,
|
| + bytes_in_packet,
|
| NO_RETRANSMITTABLE_DATA);
|
| EXPECT_EQ(send_window, sender_->AvailableSendWindow());
|
|
|
| // Send a data packet with retransmittable data, and ensure that the
|
| // congestion window has shrunk.
|
| - sender_->OnPacketSent(clock_.Now(), sequence_number_++, bytes_in_packet,
|
| + sender_->OnPacketSent(clock_.Now(),
|
| + sequence_number_++,
|
| + bytes_in_packet,
|
| HAS_RETRANSMITTABLE_DATA);
|
| EXPECT_GT(send_window, sender_->AvailableSendWindow());
|
| }
|
| @@ -596,8 +597,8 @@ TEST_F(TcpCubicSenderTest, CongestionAvoidanceAtEndOfRecovery) {
|
| // Make sure that we fall out of slow start when we encounter a packet loss.
|
| QuicCongestionFeedbackFrame feedback;
|
| // At startup make sure we can send.
|
| - EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(),
|
| - HAS_RETRANSMITTABLE_DATA).IsZero());
|
| + EXPECT_TRUE(
|
| + sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero());
|
| // Get default QuicCongestionFeedbackFrame from receiver.
|
| ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
|
| sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
|
| @@ -609,8 +610,8 @@ TEST_F(TcpCubicSenderTest, CongestionAvoidanceAtEndOfRecovery) {
|
| AckNPackets(2);
|
| }
|
| SendAvailableSendWindow();
|
| - QuicByteCount expected_send_window = kDefaultWindowTCP +
|
| - (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| + QuicByteCount expected_send_window =
|
| + kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAcks);
|
| EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
|
|
|
| LoseNPackets(1);
|
|
|