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

Side by Side Diff: net/quic/congestion_control/inter_arrival_sender_test.cc

Issue 131743009: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use size_t instead of int to fix win_x64 compile error Created 6 years, 11 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
OLDNEW
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"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 using std::pair; 13 using std::pair;
14 14
15 namespace net { 15 namespace net {
16 namespace test { 16 namespace test {
17 17
18 class InterArrivalSenderTest : public ::testing::Test { 18 class InterArrivalSenderTest : public ::testing::Test {
19 protected: 19 protected:
20 InterArrivalSenderTest() 20 InterArrivalSenderTest()
21 : rtt_(QuicTime::Delta::FromMilliseconds(60)), 21 : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
22 one_ms_(QuicTime::Delta::FromMilliseconds(1)),
23 one_s_(QuicTime::Delta::FromMilliseconds(1000)), 22 one_s_(QuicTime::Delta::FromMilliseconds(1000)),
24 nine_ms_(QuicTime::Delta::FromMilliseconds(9)), 23 nine_ms_(QuicTime::Delta::FromMilliseconds(9)),
25 send_start_time_(send_clock_.Now()), 24 send_start_time_(send_clock_.Now()),
26 sender_(&send_clock_), 25 sender_(&send_clock_),
27 sequence_number_(1), 26 sequence_number_(1),
28 acked_sequence_number_(1), 27 acked_sequence_number_(1),
29 feedback_sequence_number_(1) { 28 feedback_sequence_number_(1) {
30 send_clock_.AdvanceTime(one_ms_); 29 send_clock_.AdvanceTime(one_ms_);
31 receive_clock_.AdvanceTime(one_ms_); 30 receive_clock_.AdvanceTime(one_ms_);
32 } 31 }
(...skipping 14 matching lines...) Expand all
47 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 46 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
48 sequence_number_++; 47 sequence_number_++;
49 } 48 }
50 EXPECT_FALSE(sender_.TimeUntilSend(send_clock_.Now(), 49 EXPECT_FALSE(sender_.TimeUntilSend(send_clock_.Now(),
51 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 50 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
52 } 51 }
53 52
54 void AckNPackets(int n) { 53 void AckNPackets(int n) {
55 for (int i = 0; i < n; ++i) { 54 for (int i = 0; i < n; ++i) {
56 sender_.OnPacketAcked( 55 sender_.OnPacketAcked(
57 acked_sequence_number_++, kDefaultMaxPacketSize, rtt_); 56 acked_sequence_number_++, kDefaultMaxPacketSize);
58 } 57 }
59 } 58 }
60 59
61 void SendDelaySpikeFeedbackMessage(QuicTime::Delta spike_time) { 60 void SendDelaySpikeFeedbackMessage(QuicTime::Delta spike_time) {
62 QuicCongestionFeedbackFrame feedback; 61 QuicCongestionFeedbackFrame feedback;
63 feedback.type = kInterArrival; 62 feedback.type = kInterArrival;
64 feedback.inter_arrival.accumulated_number_of_lost_packets = 0; 63 feedback.inter_arrival.accumulated_number_of_lost_packets = 0;
65 receive_clock_.AdvanceTime(spike_time); 64 receive_clock_.AdvanceTime(spike_time);
66 QuicTime receive_time = receive_clock_.ApproximateNow(); 65 QuicTime receive_time = receive_clock_.ApproximateNow();
67 feedback.inter_arrival.received_packet_times.insert( 66 feedback.inter_arrival.received_packet_times.insert(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 feedback_sequence_number_++; 98 feedback_sequence_number_++;
100 } 99 }
101 sender_.OnIncomingQuicCongestionFeedbackFrame(feedback, send_clock_.Now(), 100 sender_.OnIncomingQuicCongestionFeedbackFrame(feedback, send_clock_.Now(),
102 sent_packets_); 101 sent_packets_);
103 } 102 }
104 103
105 QuicTime::Delta SenderDeltaSinceStart() { 104 QuicTime::Delta SenderDeltaSinceStart() {
106 return send_clock_.ApproximateNow().Subtract(send_start_time_); 105 return send_clock_.ApproximateNow().Subtract(send_start_time_);
107 } 106 }
108 107
109 const QuicTime::Delta rtt_;
110 const QuicTime::Delta one_ms_; 108 const QuicTime::Delta one_ms_;
111 const QuicTime::Delta one_s_; 109 const QuicTime::Delta one_s_;
112 const QuicTime::Delta nine_ms_; 110 const QuicTime::Delta nine_ms_;
113 MockClock send_clock_; 111 MockClock send_clock_;
114 MockClock receive_clock_; 112 MockClock receive_clock_;
115 const QuicTime send_start_time_; 113 const QuicTime send_start_time_;
116 InterArrivalSender sender_; 114 InterArrivalSender sender_;
117 QuicPacketSequenceNumber sequence_number_; 115 QuicPacketSequenceNumber sequence_number_;
118 QuicPacketSequenceNumber acked_sequence_number_; 116 QuicPacketSequenceNumber acked_sequence_number_;
119 QuicPacketSequenceNumber feedback_sequence_number_; 117 QuicPacketSequenceNumber feedback_sequence_number_;
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 // our minimum bitrate. 495 // our minimum bitrate.
498 SendFeedbackMessageNPackets(10, one_s_, one_s_); 496 SendFeedbackMessageNPackets(10, one_s_, one_s_);
499 send_clock_.AdvanceTime(sender_.TimeUntilSend(send_clock_.Now(), 497 send_clock_.AdvanceTime(sender_.TimeUntilSend(send_clock_.Now(),
500 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); 498 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE));
501 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), 499 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(),
502 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 500 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
503 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate()); 501 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate());
504 } 502 }
505 503
506 TEST_F(InterArrivalSenderTest, MinBitrateDueToLoss) { 504 TEST_F(InterArrivalSenderTest, MinBitrateDueToLoss) {
505 sender_.UpdateRtt(QuicTime::Delta::FromMilliseconds(60));
507 QuicBandwidth expected_min_bitrate = QuicBandwidth::FromKBitsPerSecond(10); 506 QuicBandwidth expected_min_bitrate = QuicBandwidth::FromKBitsPerSecond(10);
508 QuicCongestionFeedbackFrame feedback; 507 QuicCongestionFeedbackFrame feedback;
509 // At startup make sure we can send. 508 // At startup make sure we can send.
510 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), 509 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(),
511 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 510 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
512 511
513 // Send 5 bursts. 512 // Send 5 bursts.
514 for (int i = 0; i < 4; ++i) { 513 for (int i = 0; i < 4; ++i) {
515 SendAvailableCongestionWindow(); 514 SendAvailableCongestionWindow();
516 send_clock_.AdvanceTime(sender_.TimeUntilSend(send_clock_.Now(), 515 send_clock_.AdvanceTime(sender_.TimeUntilSend(send_clock_.Now(),
(...skipping 17 matching lines...) Expand all
534 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000); 533 sender_.BandwidthEstimate().ToBytesPerSecond(), 1000);
535 534
536 for (int i = 0; i < 15; ++i) { 535 for (int i = 0; i < 15; ++i) {
537 SendAvailableCongestionWindow(); 536 SendAvailableCongestionWindow();
538 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), 537 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(),
539 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); 538 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE);
540 send_clock_.AdvanceTime(time_until_send); 539 send_clock_.AdvanceTime(time_until_send);
541 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), 540 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(),
542 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 541 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
543 sender_.OnPacketLost(acked_sequence_number_ - 1, send_clock_.Now()); 542 sender_.OnPacketLost(acked_sequence_number_ - 1, send_clock_.Now());
544 sender_.OnPacketAcked(acked_sequence_number_, kDefaultMaxPacketSize, rtt_); 543 sender_.OnPacketAcked(acked_sequence_number_, kDefaultMaxPacketSize);
545 acked_sequence_number_ += 2; // Create a loss by not acking both packets. 544 acked_sequence_number_ += 2; // Create a loss by not acking both packets.
546 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_); 545 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_);
547 } 546 }
548 // Test that our exponentail back off stop at expected_min_bitrate. 547 // Test that our exponentail back off stop at expected_min_bitrate.
549 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate()); 548 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate());
550 549
551 for (int i = 0; i < 50; ++i) { 550 for (int i = 0; i < 50; ++i) {
552 SendAvailableCongestionWindow(); 551 SendAvailableCongestionWindow();
553 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(), 552 QuicTime::Delta time_until_send = sender_.TimeUntilSend(send_clock_.Now(),
554 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); 553 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE);
555 send_clock_.AdvanceTime(time_until_send); 554 send_clock_.AdvanceTime(time_until_send);
556 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(), 555 EXPECT_TRUE(sender_.TimeUntilSend(send_clock_.Now(),
557 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 556 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
558 sender_.OnPacketLost(acked_sequence_number_ - 1, send_clock_.Now()); 557 sender_.OnPacketLost(acked_sequence_number_ - 1, send_clock_.Now());
559 sender_.OnPacketAcked(acked_sequence_number_, kDefaultMaxPacketSize, rtt_); 558 sender_.OnPacketAcked(acked_sequence_number_, kDefaultMaxPacketSize);
560 acked_sequence_number_ += 2; // Create a loss by not acking both packets. 559 acked_sequence_number_ += 2; // Create a loss by not acking both packets.
561 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_); 560 SendFeedbackMessageNPackets(2, nine_ms_, nine_ms_);
562 561
563 // Make sure our bitrate is fixed at the expected_min_bitrate. 562 // Make sure our bitrate is fixed at the expected_min_bitrate.
564 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate()); 563 EXPECT_EQ(expected_min_bitrate, sender_.BandwidthEstimate());
565 } 564 }
566 } 565 }
567 566
568 } // namespace test 567 } // namespace test
569 } // namespace net 568 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/inter_arrival_sender.cc ('k') | net/quic/congestion_control/pacing_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698