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/bandwidth_sampler.h" | 5 #include "net/quic/core/congestion_control/bandwidth_sampler.h" |
6 | 6 |
| 7 #include "net/quic/platform/api/quic_flags.h" |
7 #include "net/quic/platform/api/quic_test.h" | 8 #include "net/quic/platform/api/quic_test.h" |
8 #include "net/quic/test_tools/mock_clock.h" | 9 #include "net/quic/test_tools/mock_clock.h" |
9 | 10 |
10 namespace net { | 11 namespace net { |
11 namespace test { | 12 namespace test { |
12 | 13 |
13 class BandwidthSamplerPeer { | 14 class BandwidthSamplerPeer { |
14 public: | 15 public: |
15 static size_t GetNumberOfTrackedPackets(const BandwidthSampler& sampler) { | 16 static size_t GetNumberOfTrackedPackets(const BandwidthSampler& sampler) { |
| 17 if (FLAGS_quic_reloadable_flag_quic_faster_bandwidth_sampler) { |
| 18 return sampler.connection_state_map_new_.number_of_present_entries(); |
| 19 } |
16 return sampler.connection_state_map_.size(); | 20 return sampler.connection_state_map_.size(); |
17 } | 21 } |
18 | 22 |
19 static QuicByteCount GetPacketSize(const BandwidthSampler& sampler, | 23 static QuicByteCount GetPacketSize(const BandwidthSampler& sampler, |
20 QuicPacketNumber packet_number) { | 24 QuicPacketNumber packet_number) { |
| 25 if (FLAGS_quic_reloadable_flag_quic_faster_bandwidth_sampler) { |
| 26 return sampler.connection_state_map_new_.GetEntry(packet_number)->size; |
| 27 } |
21 auto iterator = sampler.connection_state_map_.find(packet_number); | 28 auto iterator = sampler.connection_state_map_.find(packet_number); |
22 return iterator->second.size; | 29 return iterator->second.size; |
23 } | 30 } |
24 }; | 31 }; |
25 | 32 |
26 const QuicByteCount kRegularPacketSize = 1280; | 33 const QuicByteCount kRegularPacketSize = 1280; |
27 // Enforce divisibility for some of the tests. | 34 // Enforce divisibility for some of the tests. |
28 static_assert((kRegularPacketSize & 31) == 0, | 35 static_assert((kRegularPacketSize & 31) == 0, |
29 "kRegularPacketSize has to be five times divisible by 2"); | 36 "kRegularPacketSize has to be five times divisible by 2"); |
30 | 37 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 // the SendWithLosses test. | 197 // the SendWithLosses test. |
191 TEST_F(BandwidthSamplerTest, NotCongestionControlled) { | 198 TEST_F(BandwidthSamplerTest, NotCongestionControlled) { |
192 const QuicTime::Delta time_between_packets = | 199 const QuicTime::Delta time_between_packets = |
193 QuicTime::Delta::FromMilliseconds(1); | 200 QuicTime::Delta::FromMilliseconds(1); |
194 QuicBandwidth expected_bandwidth = | 201 QuicBandwidth expected_bandwidth = |
195 QuicBandwidth::FromKBytesPerSecond(kRegularPacketSize) * 0.5; | 202 QuicBandwidth::FromKBytesPerSecond(kRegularPacketSize) * 0.5; |
196 | 203 |
197 // Send 20 packets, each 1 ms apart. Every even packet is not congestion | 204 // Send 20 packets, each 1 ms apart. Every even packet is not congestion |
198 // controlled. | 205 // controlled. |
199 for (QuicPacketNumber i = 1; i <= 20; i++) { | 206 for (QuicPacketNumber i = 1; i <= 20; i++) { |
200 SendPacketInner(i, kRegularPacketSize, i % 2 == 0 | 207 SendPacketInner( |
201 ? HAS_RETRANSMITTABLE_DATA | 208 i, kRegularPacketSize, |
202 : NO_RETRANSMITTABLE_DATA); | 209 i % 2 == 0 ? HAS_RETRANSMITTABLE_DATA : NO_RETRANSMITTABLE_DATA); |
203 clock_.AdvanceTime(time_between_packets); | 210 clock_.AdvanceTime(time_between_packets); |
204 } | 211 } |
205 | 212 |
206 // Ensure only congestion controlled packets are tracked. | 213 // Ensure only congestion controlled packets are tracked. |
207 EXPECT_EQ(10u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); | 214 EXPECT_EQ(10u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); |
208 | 215 |
209 // Ack packets 2 to 21, ignoring every even-numbered packet, while sending new | 216 // Ack packets 2 to 21, ignoring every even-numbered packet, while sending new |
210 // packets at the same rate as before. | 217 // packets at the same rate as before. |
211 for (QuicPacketNumber i = 1; i <= 20; i++) { | 218 for (QuicPacketNumber i = 1; i <= 20; i++) { |
212 if (i % 2 == 0) { | 219 if (i % 2 == 0) { |
213 AckPacket(i); | 220 AckPacket(i); |
214 } | 221 } |
215 SendPacketInner(i + 20, kRegularPacketSize, i % 2 == 0 | 222 SendPacketInner( |
216 ? HAS_RETRANSMITTABLE_DATA | 223 i + 20, kRegularPacketSize, |
217 : NO_RETRANSMITTABLE_DATA); | 224 i % 2 == 0 ? HAS_RETRANSMITTABLE_DATA : NO_RETRANSMITTABLE_DATA); |
218 clock_.AdvanceTime(time_between_packets); | 225 clock_.AdvanceTime(time_between_packets); |
219 } | 226 } |
220 | 227 |
221 // Ack the packets 22 to 41 with the same congestion controlled pattern. | 228 // Ack the packets 22 to 41 with the same congestion controlled pattern. |
222 QuicBandwidth last_bandwidth = QuicBandwidth::Zero(); | 229 QuicBandwidth last_bandwidth = QuicBandwidth::Zero(); |
223 for (QuicPacketNumber i = 21; i <= 40; i++) { | 230 for (QuicPacketNumber i = 21; i <= 40; i++) { |
224 if (i % 2 == 0) { | 231 if (i % 2 == 0) { |
225 last_bandwidth = AckPacket(i); | 232 last_bandwidth = AckPacket(i); |
226 EXPECT_EQ(expected_bandwidth, last_bandwidth); | 233 EXPECT_EQ(expected_bandwidth, last_bandwidth); |
227 } | 234 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 sampler_.RemoveObsoletePackets(4); | 395 sampler_.RemoveObsoletePackets(4); |
389 EXPECT_EQ(2u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); | 396 EXPECT_EQ(2u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); |
390 sampler_.OnPacketLost(4); | 397 sampler_.OnPacketLost(4); |
391 EXPECT_EQ(1u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); | 398 EXPECT_EQ(1u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); |
392 AckPacket(5); | 399 AckPacket(5); |
393 EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); | 400 EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_)); |
394 } | 401 } |
395 | 402 |
396 } // namespace test | 403 } // namespace test |
397 } // namespace net | 404 } // namespace net |
OLD | NEW |