| 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 |