| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/test_tools/quic_config_peer.h" | 9 #include "net/quic/test_tools/quic_config_peer.h" |
| 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| (...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 } | 792 } |
| 793 | 793 |
| 794 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { | 794 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { |
| 795 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 795 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 796 | 796 |
| 797 // Send 100 packets. | 797 // Send 100 packets. |
| 798 const size_t kNumSentPackets = 100; | 798 const size_t kNumSentPackets = 100; |
| 799 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 799 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 800 SendDataPacket(i); | 800 SendDataPacket(i); |
| 801 } | 801 } |
| 802 QuicTime rto_packet_time = clock_.Now(); |
| 803 // Advance the time. |
| 804 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 802 | 805 |
| 803 // The first tail loss probe retransmits 1 packet. | 806 // The first tail loss probe retransmits 1 packet. |
| 804 manager_.OnRetransmissionTimeout(); | 807 manager_.OnRetransmissionTimeout(); |
| 805 EXPECT_EQ(QuicTime::Delta::Zero(), | 808 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 806 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 809 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 807 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 810 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 808 manager_.MaybeRetransmitTailLossProbe(); | 811 manager_.MaybeRetransmitTailLossProbe(); |
| 809 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 812 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 810 RetransmitNextPacket(101); | 813 RetransmitNextPacket(101); |
| 811 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( | 814 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 812 QuicTime::Delta::Infinite())); | 815 QuicTime::Delta::Infinite())); |
| 813 EXPECT_EQ(QuicTime::Delta::Infinite(), | 816 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 814 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 817 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 815 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 818 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 819 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 816 | 820 |
| 817 // The second tail loss probe retransmits 1 packet. | 821 // The second tail loss probe retransmits 1 packet. |
| 818 manager_.OnRetransmissionTimeout(); | 822 manager_.OnRetransmissionTimeout(); |
| 819 EXPECT_EQ(QuicTime::Delta::Zero(), | 823 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 820 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 824 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 821 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 825 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 822 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 826 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 823 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 827 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 824 RetransmitNextPacket(102); | 828 RetransmitNextPacket(102); |
| 825 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( | 829 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 826 QuicTime::Delta::Infinite())); | 830 QuicTime::Delta::Infinite())); |
| 827 EXPECT_EQ(QuicTime::Delta::Infinite(), | 831 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 828 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 832 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 829 | 833 |
| 834 // Ensure the RTO is set based on the correct packet. |
| 835 if (FLAGS_quic_rto_uses_last_sent) { |
| 836 rto_packet_time = clock_.Now(); |
| 837 } |
| 838 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 839 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); |
| 840 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), |
| 841 manager_.GetRetransmissionTime()); |
| 842 |
| 830 // Advance the time enough to ensure all packets are RTO'd. | 843 // Advance the time enough to ensure all packets are RTO'd. |
| 831 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 844 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| 832 | 845 |
| 833 // The final RTO abandons all of them. | 846 // The final RTO abandons all of them. |
| 834 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 847 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 835 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 848 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 836 manager_.OnRetransmissionTimeout(); | 849 manager_.OnRetransmissionTimeout(); |
| 837 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 850 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 838 EXPECT_EQ(2u, stats_.tlp_count); | 851 EXPECT_EQ(2u, stats_.tlp_count); |
| 839 EXPECT_EQ(1u, stats_.rto_count); | 852 EXPECT_EQ(1u, stats_.rto_count); |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1490 | 1503 |
| 1491 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); | 1504 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_)); |
| 1492 manager_.ResumeConnectionState(cached_network_params); | 1505 manager_.ResumeConnectionState(cached_network_params); |
| 1493 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, | 1506 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, |
| 1494 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); | 1507 static_cast<uint64>(manager_.GetRttStats()->initial_rtt_us())); |
| 1495 } | 1508 } |
| 1496 | 1509 |
| 1497 } // namespace | 1510 } // namespace |
| 1498 } // namespace test | 1511 } // namespace test |
| 1499 } // namespace net | 1512 } // namespace net |
| OLD | NEW |