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