OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/congestion_control/inter_arrival_sender.h" | 5 #include "net/quic/congestion_control/inter_arrival_sender.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/quic/test_tools/mock_clock.h" | 10 #include "net/quic/test_tools/mock_clock.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); | 146 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); |
147 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 147 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
148 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 148 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
149 | 149 |
150 // We should now have our probe rate. | 150 // We should now have our probe rate. |
151 QuicTime::Delta acc_arrival_time = QuicTime::Delta::FromMilliseconds(41); | 151 QuicTime::Delta acc_arrival_time = QuicTime::Delta::FromMilliseconds(41); |
152 int64 probe_rate = kDefaultMaxPacketSize * 9 * kNumMicrosPerSecond / | 152 int64 probe_rate = kDefaultMaxPacketSize * 9 * kNumMicrosPerSecond / |
153 acc_arrival_time.ToMicroseconds(); | 153 acc_arrival_time.ToMicroseconds(); |
154 EXPECT_NEAR(0.7f * probe_rate, | 154 EXPECT_NEAR(0.7f * probe_rate, |
155 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000); | 155 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000); |
156 DLOG(INFO) << "After probe"; | 156 DVLOG(0) << "After probe"; |
157 // Send 50 bursts, make sure that we move fast in the beginning. | 157 // Send 50 bursts, make sure that we move fast in the beginning. |
158 for (int i = 0; i < 50; ++i) { | 158 for (int i = 0; i < 50; ++i) { |
159 SendAvailableCongestionWindow(); | 159 SendAvailableCongestionWindow(); |
160 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), | 160 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), |
161 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 161 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
162 send_clock_.AdvanceTime(time_until_send); | 162 send_clock_.AdvanceTime(time_until_send); |
163 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 163 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
164 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 164 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
165 AckNPackets(2); | 165 AckNPackets(2); |
166 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); | 166 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); |
(...skipping 24 matching lines...) Expand all Loading... |
191 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 191 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
192 send_clock_.AdvanceTime(time_until_send); | 192 send_clock_.AdvanceTime(time_until_send); |
193 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 193 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
194 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 194 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
195 AckNPackets(2); | 195 AckNPackets(2); |
196 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); | 196 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); |
197 } | 197 } |
198 EXPECT_NEAR(0.99f * probe_rate, | 198 EXPECT_NEAR(0.99f * probe_rate, |
199 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000); | 199 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000); |
200 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 1560, 10); | 200 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 1560, 10); |
201 DLOG(INFO) << "Near available channel estimate"; | 201 DVLOG(0) << "Near available channel estimate"; |
202 | 202 |
203 // Send 50 bursts, make sure that we move very slow close to the probe rate. | 203 // Send 50 bursts, make sure that we move very slow close to the probe rate. |
204 for (int i = 0; i < 50; ++i) { | 204 for (int i = 0; i < 50; ++i) { |
205 SendAvailableCongestionWindow(); | 205 SendAvailableCongestionWindow(); |
206 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), | 206 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), |
207 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 207 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
208 send_clock_.AdvanceTime(time_until_send); | 208 send_clock_.AdvanceTime(time_until_send); |
209 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 209 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
210 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 210 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
211 AckNPackets(2); | 211 AckNPackets(2); |
212 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); | 212 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); |
213 } | 213 } |
214 EXPECT_NEAR(1.00f * probe_rate, | 214 EXPECT_NEAR(1.00f * probe_rate, |
215 sender_.BandwidthEstimate().ToBytesPerSecond(), 2000); | 215 sender_.BandwidthEstimate().ToBytesPerSecond(), 2000); |
216 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 2000, 100); | 216 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 2000, 100); |
217 DLOG(INFO) << "At available channel estimate"; | 217 DVLOG(0) << "At available channel estimate"; |
218 | 218 |
219 // Send 50 bursts, make sure that we move very slow close to the probe rate. | 219 // Send 50 bursts, make sure that we move very slow close to the probe rate. |
220 for (int i = 0; i < 50; ++i) { | 220 for (int i = 0; i < 50; ++i) { |
221 SendAvailableCongestionWindow(); | 221 SendAvailableCongestionWindow(); |
222 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), | 222 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), |
223 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 223 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
224 send_clock_.AdvanceTime(time_until_send); | 224 send_clock_.AdvanceTime(time_until_send); |
225 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 225 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
226 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 226 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
227 AckNPackets(2); | 227 AckNPackets(2); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 273 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
274 send_clock_.AdvanceTime(time_until_send); | 274 send_clock_.AdvanceTime(time_until_send); |
275 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 275 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
276 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 276 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
277 AckNPackets(2); | 277 AckNPackets(2); |
278 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); | 278 SendFeedbackMessageNPackets(2, one_ms_, time_until_send.Subtract(one_ms_)); |
279 } | 279 } |
280 EXPECT_NEAR(halfway_rate, | 280 EXPECT_NEAR(halfway_rate, |
281 sender_.BandwidthEstimate().ToBytesPerSecond(), 5000); | 281 sender_.BandwidthEstimate().ToBytesPerSecond(), 5000); |
282 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 6600, 100); | 282 EXPECT_NEAR(SenderDeltaSinceStart().ToMilliseconds(), 6600, 100); |
283 DLOG(INFO) << "Near halfway point"; | 283 DVLOG(0) << "Near halfway point"; |
284 | 284 |
285 // Send until we reach max channel capacity. | 285 // Send until we reach max channel capacity. |
286 for (int i = 0; i < 1500; ++i) { | 286 for (int i = 0; i < 1500; ++i) { |
287 SendAvailableCongestionWindow(); | 287 SendAvailableCongestionWindow(); |
288 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), | 288 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), |
289 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 289 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
290 send_clock_.AdvanceTime(time_until_send); | 290 send_clock_.AdvanceTime(time_until_send); |
291 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), | 291 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), |
292 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 292 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
293 AckNPackets(2); | 293 AckNPackets(2); |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 acked_sequence_number_ += 2; // Create a loss by not acking both packets. | 560 acked_sequence_number_ += 2; // Create a loss by not acking both packets. |
561 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_); | 561 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_); |
562 | 562 |
563 // Make sure our bitrate is fixed at the expected_min_bitrate. | 563 // Make sure our bitrate is fixed at the expected_min_bitrate. |
564 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate()); | 564 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate()); |
565 } | 565 } |
566 } | 566 } |
567 | 567 |
568 } // namespace test | 568 } // namespace test |
569 } // namespace net | 569 } // namespace net |
OLD | NEW |