Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: net/quic/quic_sent_packet_manager_test.cc

Issue 327383002: Change the QUIC TLP to send new data instead of retransmitting old data (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/test_tools/quic_config_peer.h" 8 #include "net/quic/test_tools/quic_config_peer.h"
9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
10 #include "net/quic/test_tools/quic_test_utils.h" 10 #include "net/quic/test_tools/quic_test_utils.h"
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 778
779 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { 779 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) {
780 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 780 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
781 781
782 // Send 1 packet. 782 // Send 1 packet.
783 QuicPacketSequenceNumber sequence_number = 1; 783 QuicPacketSequenceNumber sequence_number = 1;
784 SendDataPacket(sequence_number); 784 SendDataPacket(sequence_number);
785 785
786 // The first tail loss probe retransmits 1 packet. 786 // The first tail loss probe retransmits 1 packet.
787 manager_.OnRetransmissionTimeout(); 787 manager_.OnRetransmissionTimeout();
788 EXPECT_EQ(QuicTime::Delta::Zero(),
789 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
790 EXPECT_FALSE(manager_.HasPendingRetransmissions());
791 manager_.MaybeRetransmitTailLossProbe();
792 EXPECT_TRUE(manager_.HasPendingRetransmissions());
788 RetransmitNextPacket(2); 793 RetransmitNextPacket(2);
789 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 794 EXPECT_FALSE(manager_.HasPendingRetransmissions());
790 795
791 // The second tail loss probe retransmits 1 packet. 796 // The second tail loss probe retransmits 1 packet.
792 manager_.OnRetransmissionTimeout(); 797 manager_.OnRetransmissionTimeout();
798 EXPECT_EQ(QuicTime::Delta::Zero(),
799 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
800 EXPECT_FALSE(manager_.HasPendingRetransmissions());
801 manager_.MaybeRetransmitTailLossProbe();
802 EXPECT_TRUE(manager_.HasPendingRetransmissions());
793 RetransmitNextPacket(3); 803 RetransmitNextPacket(3);
804 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
805 QuicTime::Delta::Infinite()));
806 EXPECT_EQ(QuicTime::Delta::Infinite(),
807 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
794 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 808 EXPECT_FALSE(manager_.HasPendingRetransmissions());
795 809
796 // Ack the third and ensure the first two are still pending. 810 // Ack the third and ensure the first two are still pending.
797 ExpectAck(3); 811 ExpectAck(3);
798 ReceivedPacketInfo received_info; 812 ReceivedPacketInfo received_info;
799 received_info.largest_observed = 3; 813 received_info.largest_observed = 3;
800 received_info.missing_packets.insert(1); 814 received_info.missing_packets.insert(1);
801 received_info.missing_packets.insert(2); 815 received_info.missing_packets.insert(2);
802 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 816 manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
803 817
(...skipping 15 matching lines...) Expand all
819 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 833 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
820 834
821 // Send 100 packets. 835 // Send 100 packets.
822 const size_t kNumSentPackets = 100; 836 const size_t kNumSentPackets = 100;
823 for (size_t i = 1; i <= kNumSentPackets; ++i) { 837 for (size_t i = 1; i <= kNumSentPackets; ++i) {
824 SendDataPacket(i); 838 SendDataPacket(i);
825 } 839 }
826 840
827 // The first tail loss probe retransmits 1 packet. 841 // The first tail loss probe retransmits 1 packet.
828 manager_.OnRetransmissionTimeout(); 842 manager_.OnRetransmissionTimeout();
843 EXPECT_EQ(QuicTime::Delta::Zero(),
844 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
845 EXPECT_FALSE(manager_.HasPendingRetransmissions());
846 manager_.MaybeRetransmitTailLossProbe();
847 EXPECT_TRUE(manager_.HasPendingRetransmissions());
829 RetransmitNextPacket(101); 848 RetransmitNextPacket(101);
849 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
850 QuicTime::Delta::Infinite()));
851 EXPECT_EQ(QuicTime::Delta::Infinite(),
852 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
830 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 853 EXPECT_FALSE(manager_.HasPendingRetransmissions());
831 854
832 // The second tail loss probe retransmits 1 packet. 855 // The second tail loss probe retransmits 1 packet.
833 manager_.OnRetransmissionTimeout(); 856 manager_.OnRetransmissionTimeout();
857 EXPECT_EQ(QuicTime::Delta::Zero(),
858 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
859 EXPECT_FALSE(manager_.HasPendingRetransmissions());
860 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe());
861 EXPECT_TRUE(manager_.HasPendingRetransmissions());
834 RetransmitNextPacket(102); 862 RetransmitNextPacket(102);
835 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 863 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
864 QuicTime::Delta::Infinite()));
865 EXPECT_EQ(QuicTime::Delta::Infinite(),
866 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
836 867
837 // Advance the time enough to ensure all packets are RTO'd. 868 // Advance the time enough to ensure all packets are RTO'd.
838 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 869 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
839 870
840 // The final RTO abandons all of them. 871 // The final RTO abandons all of them.
841 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 872 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
842 manager_.OnRetransmissionTimeout(); 873 manager_.OnRetransmissionTimeout();
843 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 874 EXPECT_TRUE(manager_.HasPendingRetransmissions());
844 EXPECT_EQ(2u, stats_.tlp_count); 875 EXPECT_EQ(2u, stats_.tlp_count);
845 EXPECT_EQ(1u, stats_.rto_count); 876 EXPECT_EQ(1u, stats_.rto_count);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 1053 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
1023 // Serialize two data packets and send the latter. 1054 // Serialize two data packets and send the latter.
1024 SerializedPacket packet(CreateDataPacket(1)); 1055 SerializedPacket packet(CreateDataPacket(1));
1025 manager_.OnSerializedPacket(packet); 1056 manager_.OnSerializedPacket(packet);
1026 SendDataPacket(2); 1057 SendDataPacket(2);
1027 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1058 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1028 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1059 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1029 1060
1030 // Retransmit 1 unacked packets, but not the first serialized packet. 1061 // Retransmit 1 unacked packets, but not the first serialized packet.
1031 manager_.OnRetransmissionTimeout(); 1062 manager_.OnRetransmissionTimeout();
1063 EXPECT_EQ(QuicTime::Delta::Zero(),
1064 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1065 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1066 manager_.MaybeRetransmitTailLossProbe();
1067 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1032 RetransmitNextPacket(3); 1068 RetransmitNextPacket(3);
1069 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
1070 QuicTime::Delta::Infinite()));
1071 EXPECT_EQ(QuicTime::Delta::Infinite(),
1072 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1033 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1073 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1034 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1074 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1035 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1075 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1036 } 1076 }
1037 1077
1038 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { 1078 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) {
1039 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); 1079 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50);
1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( 1080 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
1041 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 1081 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
1042 EXPECT_EQ(min_rtt, 1082 EXPECT_EQ(min_rtt,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 } 1114 }
1075 1115
1076 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 1116 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
1077 // Send 100 packets and then ensure all are abandoned when the RTO fires. 1117 // Send 100 packets and then ensure all are abandoned when the RTO fires.
1078 const size_t kNumSentPackets = 100; 1118 const size_t kNumSentPackets = 100;
1079 for (size_t i = 1; i <= kNumSentPackets; ++i) { 1119 for (size_t i = 1; i <= kNumSentPackets; ++i) {
1080 SendDataPacket(i); 1120 SendDataPacket(i);
1081 } 1121 }
1082 1122
1083 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1123 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1124 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe());
1084 manager_.OnRetransmissionTimeout(); 1125 manager_.OnRetransmissionTimeout();
1085 } 1126 }
1086 1127
1087 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { 1128 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) {
1088 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 1129 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
1089 } 1130 }
1090 1131
1091 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { 1132 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) {
1092 SendCryptoPacket(1); 1133 SendCryptoPacket(1);
1093 1134
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( 1171 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us(
1131 100 * base::Time::kMicrosecondsPerMillisecond); 1172 100 * base::Time::kMicrosecondsPerMillisecond);
1132 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); 1173 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt();
1133 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); 1174 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2);
1134 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); 1175 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay);
1135 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1176 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1136 1177
1137 // Retransmit the packet by invoking the retransmission timeout. 1178 // Retransmit the packet by invoking the retransmission timeout.
1138 clock_.AdvanceTime(expected_tlp_delay); 1179 clock_.AdvanceTime(expected_tlp_delay);
1139 manager_.OnRetransmissionTimeout(); 1180 manager_.OnRetransmissionTimeout();
1181 EXPECT_EQ(QuicTime::Delta::Zero(),
1182 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1183 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1184 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe());
1185 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1140 RetransmitNextPacket(3); 1186 RetransmitNextPacket(3);
1187 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
1188 QuicTime::Delta::Infinite()));
1189 EXPECT_EQ(QuicTime::Delta::Infinite(),
1190 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1141 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1191 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1142 1192
1143 expected_time = clock_.Now().Add(expected_tlp_delay); 1193 expected_time = clock_.Now().Add(expected_tlp_delay);
1144 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1194 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1145 } 1195 }
1146 1196
1147 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { 1197 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) {
1148 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( 1198 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
1149 QuicTime::Delta::FromMilliseconds(100), 1199 QuicTime::Delta::FromMilliseconds(100),
1150 QuicTime::Delta::Zero(), 1200 QuicTime::Delta::Zero(),
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 1318
1269 EXPECT_EQ(kTime, 1319 EXPECT_EQ(kTime,
1270 QuicSentPacketManagerPeer::GetLossAlgorithm( 1320 QuicSentPacketManagerPeer::GetLossAlgorithm(
1271 &manager_)->GetLossDetectionType()); 1321 &manager_)->GetLossDetectionType());
1272 } 1322 }
1273 1323
1274 1324
1275 } // namespace 1325 } // namespace
1276 } // namespace test 1326 } // namespace test
1277 } // namespace net 1327 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698