diff options
author | rtenneti <rtenneti@chromium.org> | 2015-08-27 23:44:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-28 06:45:38 +0000 |
commit | a004d33c10dabb590f276e66ac52ccff43cb2d9f (patch) | |
tree | f8b7b272ea5f35ecd8382ab581c091f91ee588b4 /net/quic/congestion_control | |
parent | 0e3c57b2e9e14ec594015d425cf72cdd64f5df1b (diff) | |
download | chromium_src-a004d33c10dabb590f276e66ac52ccff43cb2d9f.zip chromium_src-a004d33c10dabb590f276e66ac52ccff43cb2d9f.tar.gz chromium_src-a004d33c10dabb590f276e66ac52ccff43cb2d9f.tar.bz2 |
Landing Recent QUIC changes until 8/24/2015 18:33 UTC.
relnote: Rename "sequence number" to "packet number" in the QUIC code.
Merge internal change: 101368603
https://codereview.chromium.org/1321603002/
relnote: Fixes a crash bug where when two packets were sent when write
blocked, the second would sometimes succeed and then writes occurred out
of order.
Merge internal change: 101355922
https://codereview.chromium.org/1313373003/
relnote: Update QUIC's fec_alarm with a 1ms granularity to avoid setting
it so often.
Setting this alarm currently consumes over 1% of CPU on bandaid, even
though FEC is disabled for most users.
Merge internal change: 101213426
https://codereview.chromium.org/1322433004/
QUIC - small changes to keep the code similar to internal source.
Internal release not:
Add required header file and fully qualify std::max() and std::min().
These are currently implicitly included through base/scoped_ptr.h, which
is going away.
relnote: n/a (compilation fix in QUIC strike register)
Merge internal change: 101113179
https://codereview.chromium.org/1315253002/
R=rch@chromium.org
Review URL: https://codereview.chromium.org/1317113003
Cr-Commit-Position: refs/heads/master@{#346090}
Diffstat (limited to 'net/quic/congestion_control')
23 files changed, 223 insertions, 230 deletions
diff --git a/net/quic/congestion_control/hybrid_slow_start.cc b/net/quic/congestion_control/hybrid_slow_start.cc index d6a47e4..7c0ba21 100644 --- a/net/quic/congestion_control/hybrid_slow_start.cc +++ b/net/quic/congestion_control/hybrid_slow_start.cc @@ -25,24 +25,23 @@ const int64 kHybridStartDelayMaxThresholdUs = 16000; HybridSlowStart::HybridSlowStart() : started_(false), hystart_found_(NOT_FOUND), - last_sent_sequence_number_(0), - end_sequence_number_(0), + last_sent_packet_number_(0), + end_packet_number_(0), rtt_sample_count_(0), - current_min_rtt_(QuicTime::Delta::Zero()) { -} + current_min_rtt_(QuicTime::Delta::Zero()) {} -void HybridSlowStart::OnPacketAcked( - QuicPacketSequenceNumber acked_sequence_number, bool in_slow_start) { +void HybridSlowStart::OnPacketAcked(QuicPacketNumber acked_packet_number, + bool in_slow_start) { // OnPacketAcked gets invoked after ShouldExitSlowStart, so it's best to end // the round when the final packet of the burst is received and start it on // the next incoming ack. - if (in_slow_start && IsEndOfRound(acked_sequence_number)) { + if (in_slow_start && IsEndOfRound(acked_packet_number)) { started_ = false; } } -void HybridSlowStart::OnPacketSent(QuicPacketSequenceNumber sequence_number) { - last_sent_sequence_number_ = sequence_number; +void HybridSlowStart::OnPacketSent(QuicPacketNumber packet_number) { + last_sent_packet_number_ = packet_number; } void HybridSlowStart::Restart() { @@ -50,16 +49,16 @@ void HybridSlowStart::Restart() { hystart_found_ = NOT_FOUND; } -void HybridSlowStart::StartReceiveRound(QuicPacketSequenceNumber last_sent) { +void HybridSlowStart::StartReceiveRound(QuicPacketNumber last_sent) { DVLOG(1) << "Reset hybrid slow start @" << last_sent; - end_sequence_number_ = last_sent; + end_packet_number_ = last_sent; current_min_rtt_ = QuicTime::Delta::Zero(); rtt_sample_count_ = 0; started_ = true; } -bool HybridSlowStart::IsEndOfRound(QuicPacketSequenceNumber ack) const { - return end_sequence_number_ <= ack; +bool HybridSlowStart::IsEndOfRound(QuicPacketNumber ack) const { + return end_packet_number_ <= ack; } bool HybridSlowStart::ShouldExitSlowStart(QuicTime::Delta latest_rtt, @@ -67,7 +66,7 @@ bool HybridSlowStart::ShouldExitSlowStart(QuicTime::Delta latest_rtt, QuicPacketCount congestion_window) { if (!started_) { // Time to start the hybrid slow start. - StartReceiveRound(last_sent_sequence_number_); + StartReceiveRound(last_sent_packet_number_); } if (hystart_found_ != NOT_FOUND) { return true; diff --git a/net/quic/congestion_control/hybrid_slow_start.h b/net/quic/congestion_control/hybrid_slow_start.h index 9f0a9ae..457ef3e 100644 --- a/net/quic/congestion_control/hybrid_slow_start.h +++ b/net/quic/congestion_control/hybrid_slow_start.h @@ -27,10 +27,9 @@ class NET_EXPORT_PRIVATE HybridSlowStart { public: HybridSlowStart(); - void OnPacketAcked(QuicPacketSequenceNumber acked_sequence_number, - bool in_slow_start); + void OnPacketAcked(QuicPacketNumber acked_packet_number, bool in_slow_start); - void OnPacketSent(QuicPacketSequenceNumber sequence_number); + void OnPacketSent(QuicPacketNumber packet_number); // ShouldExitSlowStart should be called on every new ack frame, since a new // RTT measurement can be made then. @@ -46,13 +45,13 @@ class NET_EXPORT_PRIVATE HybridSlowStart { // TODO(ianswett): The following methods should be private, but that requires // a follow up CL to update the unit test. - // Returns true if this ack the last sequence number of our current slow start + // Returns true if this ack the last packet number of our current slow start // round. // Call Reset if this returns true. - bool IsEndOfRound(QuicPacketSequenceNumber ack) const; + bool IsEndOfRound(QuicPacketNumber ack) const; // Call for the start of each receive round (burst) in the slow start phase. - void StartReceiveRound(QuicPacketSequenceNumber last_sent); + void StartReceiveRound(QuicPacketNumber last_sent); // Whether slow start has started. bool started() const { @@ -69,11 +68,11 @@ class NET_EXPORT_PRIVATE HybridSlowStart { // Whether the hybrid slow start has been started. bool started_; HystartState hystart_found_; - // Last sequence number sent which was CWND limited. - QuicPacketSequenceNumber last_sent_sequence_number_; + // Last packet number sent which was CWND limited. + QuicPacketNumber last_sent_packet_number_; // Variables for tracking acks received during a slow start round. - QuicPacketSequenceNumber end_sequence_number_; // End of the receive round. + QuicPacketNumber end_packet_number_; // End of the receive round. uint32 rtt_sample_count_; // Number of rtt samples in the current round. QuicTime::Delta current_min_rtt_; // The minimum rtt of current round. diff --git a/net/quic/congestion_control/hybrid_slow_start_test.cc b/net/quic/congestion_control/hybrid_slow_start_test.cc index 97dc32f..b923904 100644 --- a/net/quic/congestion_control/hybrid_slow_start_test.cc +++ b/net/quic/congestion_control/hybrid_slow_start_test.cc @@ -23,27 +23,27 @@ class HybridSlowStartTest : public ::testing::Test { }; TEST_F(HybridSlowStartTest, Simple) { - QuicPacketSequenceNumber sequence_number = 1; - QuicPacketSequenceNumber end_sequence_number = 3; - slow_start_->StartReceiveRound(end_sequence_number); + QuicPacketNumber packet_number = 1; + QuicPacketNumber end_packet_number = 3; + slow_start_->StartReceiveRound(end_packet_number); - EXPECT_FALSE(slow_start_->IsEndOfRound(sequence_number++)); + EXPECT_FALSE(slow_start_->IsEndOfRound(packet_number++)); // Test duplicates. - EXPECT_FALSE(slow_start_->IsEndOfRound(sequence_number)); + EXPECT_FALSE(slow_start_->IsEndOfRound(packet_number)); - EXPECT_FALSE(slow_start_->IsEndOfRound(sequence_number++)); - EXPECT_TRUE(slow_start_->IsEndOfRound(sequence_number++)); + EXPECT_FALSE(slow_start_->IsEndOfRound(packet_number++)); + EXPECT_TRUE(slow_start_->IsEndOfRound(packet_number++)); - // Test without a new registered end_sequence_number; - EXPECT_TRUE(slow_start_->IsEndOfRound(sequence_number++)); + // Test without a new registered end_packet_number; + EXPECT_TRUE(slow_start_->IsEndOfRound(packet_number++)); - end_sequence_number = 20; - slow_start_->StartReceiveRound(end_sequence_number); - while (sequence_number < end_sequence_number) { - EXPECT_FALSE(slow_start_->IsEndOfRound(sequence_number++)); + end_packet_number = 20; + slow_start_->StartReceiveRound(end_packet_number); + while (packet_number < end_packet_number) { + EXPECT_FALSE(slow_start_->IsEndOfRound(packet_number++)); } - EXPECT_TRUE(slow_start_->IsEndOfRound(sequence_number++)); + EXPECT_TRUE(slow_start_->IsEndOfRound(packet_number++)); } TEST_F(HybridSlowStartTest, Delay) { @@ -51,8 +51,8 @@ TEST_F(HybridSlowStartTest, Delay) { // RTT of 60ms the detection will happen at 67.5 ms. const int kHybridStartMinSamples = 8; // Number of acks required to trigger. - QuicPacketSequenceNumber end_sequence_number = 1; - slow_start_->StartReceiveRound(end_sequence_number++); + QuicPacketNumber end_packet_number = 1; + slow_start_->StartReceiveRound(end_packet_number++); // Will not trigger since our lowest RTT in our burst is the same as the long // term RTT provided. @@ -60,7 +60,7 @@ TEST_F(HybridSlowStartTest, Delay) { EXPECT_FALSE(slow_start_->ShouldExitSlowStart( rtt_.Add(QuicTime::Delta::FromMilliseconds(n)), rtt_, 100)); } - slow_start_->StartReceiveRound(end_sequence_number++); + slow_start_->StartReceiveRound(end_packet_number++); for (int n = 1; n < kHybridStartMinSamples; ++n) { EXPECT_FALSE(slow_start_->ShouldExitSlowStart( rtt_.Add(QuicTime::Delta::FromMilliseconds(n + 10)), rtt_, 100)); diff --git a/net/quic/congestion_control/loss_detection_interface.h b/net/quic/congestion_control/loss_detection_interface.h index 5aaa51d..d10f24a 100644 --- a/net/quic/congestion_control/loss_detection_interface.h +++ b/net/quic/congestion_control/loss_detection_interface.h @@ -26,10 +26,10 @@ class NET_EXPORT_PRIVATE LossDetectionInterface { virtual LossDetectionType GetLossDetectionType() const = 0; // Called when a new ack arrives or the loss alarm fires. - virtual SequenceNumberSet DetectLostPackets( + virtual PacketNumberSet DetectLostPackets( const QuicUnackedPacketMap& unacked_packets, const QuicTime& time, - QuicPacketSequenceNumber largest_observed, + QuicPacketNumber largest_observed, const RttStats& rtt_stats) = 0; // Get the time the LossDetectionAlgorithm wants to re-evaluate losses. diff --git a/net/quic/congestion_control/pacing_sender.cc b/net/quic/congestion_control/pacing_sender.cc index a8bd13f..21dd4f3 100644 --- a/net/quic/congestion_control/pacing_sender.cc +++ b/net/quic/congestion_control/pacing_sender.cc @@ -53,12 +53,12 @@ void PacingSender::OnCongestionEvent(bool rtt_updated, bool PacingSender::OnPacketSent( QuicTime sent_time, QuicByteCount bytes_in_flight, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData has_retransmittable_data) { const bool in_flight = - sender_->OnPacketSent(sent_time, bytes_in_flight, sequence_number, - bytes, has_retransmittable_data); + sender_->OnPacketSent(sent_time, bytes_in_flight, packet_number, bytes, + has_retransmittable_data); if (has_retransmittable_data != HAS_RETRANSMITTABLE_DATA) { return in_flight; } diff --git a/net/quic/congestion_control/pacing_sender.h b/net/quic/congestion_control/pacing_sender.h index 8d9dbda..f9c3f7b 100644 --- a/net/quic/congestion_control/pacing_sender.h +++ b/net/quic/congestion_control/pacing_sender.h @@ -48,7 +48,7 @@ class NET_EXPORT_PRIVATE PacingSender : public SendAlgorithmInterface { const CongestionVector& lost_packets) override; bool OnPacketSent(QuicTime sent_time, QuicByteCount bytes_in_flight, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) override; void OnRetransmissionTimeout(bool packets_retransmitted) override; diff --git a/net/quic/congestion_control/pacing_sender_test.cc b/net/quic/congestion_control/pacing_sender_test.cc index b7e3755..25ca2a7 100644 --- a/net/quic/congestion_control/pacing_sender_test.cc +++ b/net/quic/congestion_control/pacing_sender_test.cc @@ -26,7 +26,7 @@ class PacingSenderTest : public ::testing::Test { PacingSenderTest() : zero_time_(QuicTime::Delta::Zero()), infinite_time_(QuicTime::Delta::Infinite()), - sequence_number_(1), + packet_number_(1), mock_sender_(new StrictMock<MockSendAlgorithm>()), pacing_sender_(new PacingSender(mock_sender_, QuicTime::Delta::FromMilliseconds(1), @@ -61,10 +61,10 @@ class PacingSenderTest : public ::testing::Test { // Actually send the packet. EXPECT_CALL(*mock_sender_, - OnPacketSent(clock_.Now(), bytes_in_flight, sequence_number_, + OnPacketSent(clock_.Now(), bytes_in_flight, packet_number_, kMaxPacketSize, retransmittable_data)); pacing_sender_->OnPacketSent(clock_.Now(), bytes_in_flight, - sequence_number_++, kMaxPacketSize, + packet_number_++, kMaxPacketSize, retransmittable_data); } @@ -102,7 +102,7 @@ class PacingSenderTest : public ::testing::Test { const QuicTime::Delta zero_time_; const QuicTime::Delta infinite_time_; MockClock clock_; - QuicPacketSequenceNumber sequence_number_; + QuicPacketNumber packet_number_; StrictMock<MockSendAlgorithm>* mock_sender_; scoped_ptr<PacingSender> pacing_sender_; }; diff --git a/net/quic/congestion_control/prr_sender.cc b/net/quic/congestion_control/prr_sender.cc index 51b32d3..e84bae8 100644 --- a/net/quic/congestion_control/prr_sender.cc +++ b/net/quic/congestion_control/prr_sender.cc @@ -40,6 +40,9 @@ QuicTime::Delta PrrSender::TimeUntilSend( QuicByteCount congestion_window, QuicByteCount bytes_in_flight, QuicByteCount slowstart_threshold) const { + // if (FLAGS_?? && bytes_in_flight < congestion_window) { + // return QuicTime::Delta::Zero(); + // } // Return QuicTime::Zero In order to ensure limited transmit always works. if (bytes_sent_since_loss_ == 0 || bytes_in_flight < kMaxSegmentSize) { return QuicTime::Delta::Zero(); diff --git a/net/quic/congestion_control/send_algorithm_interface.h b/net/quic/congestion_control/send_algorithm_interface.h index d1caac9..3daee55 100644 --- a/net/quic/congestion_control/send_algorithm_interface.h +++ b/net/quic/congestion_control/send_algorithm_interface.h @@ -27,7 +27,7 @@ class RttStats; class NET_EXPORT_PRIVATE SendAlgorithmInterface { public: // A sorted vector of packets. - typedef std::vector<std::pair<QuicPacketSequenceNumber, TransmissionInfo>> + typedef std::vector<std::pair<QuicPacketNumber, TransmissionInfo>> CongestionVector; static SendAlgorithmInterface* Create( @@ -67,7 +67,7 @@ class NET_EXPORT_PRIVATE SendAlgorithmInterface { // Note: this function must be called for every packet sent to the wire. virtual bool OnPacketSent(QuicTime sent_time, QuicByteCount bytes_in_flight, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) = 0; diff --git a/net/quic/congestion_control/send_algorithm_simulator.cc b/net/quic/congestion_control/send_algorithm_simulator.cc index 64f0ee1..ff58090 100644 --- a/net/quic/congestion_control/send_algorithm_simulator.cc +++ b/net/quic/congestion_control/send_algorithm_simulator.cc @@ -116,7 +116,7 @@ void SendAlgorithmSimulator::TransferBytes(QuicByteCount max_bytes, DVLOG(1) << "Handling ack of largest observed:" << ack_event.transfer->sender->next_acked << ", advancing time:" << ack_event.time_delta.ToMicroseconds() << "us"; - // Ack data all the data up to ack time and lose any missing sequence + // Ack data all the data up to ack time and lose any missing packet // numbers. clock_->AdvanceTime(ack_event.time_delta); HandlePendingAck(ack_event.transfer); @@ -190,7 +190,7 @@ QuicTime::Delta SendAlgorithmSimulator::FindNextAcked(Transfer* transfer) { reverse_loss_rate_ * kuint64max > simple_random_.RandUint64(); } - QuicPacketSequenceNumber next_acked = sender->last_acked; + QuicPacketNumber next_acked = sender->last_acked; QuicTime::Delta next_ack_delay = FindNextAck(transfer, sender->last_acked, &next_acked); if (lose_next_ack_) { @@ -202,8 +202,8 @@ QuicTime::Delta SendAlgorithmSimulator::FindNextAcked(Transfer* transfer) { QuicTime::Delta SendAlgorithmSimulator::FindNextAck( const Transfer* transfer, - QuicPacketSequenceNumber last_acked, - QuicPacketSequenceNumber* next_acked) const { + QuicPacketNumber last_acked, + QuicPacketNumber* next_acked) const { *next_acked = last_acked; QuicTime::Delta ack_delay = QuicTime::Delta::Infinite(); // Remove any packets that are simulated as lost. @@ -213,19 +213,19 @@ QuicTime::Delta SendAlgorithmSimulator::FindNextAck( continue; } // Skip over any packets less than or equal to last_acked. - if (it->sequence_number <= last_acked) { + if (it->packet_number <= last_acked) { continue; } // Lost packets don't trigger an ack. if (it->lost) { continue; } - DCHECK_LT(*next_acked, it->sequence_number); + DCHECK_LT(*next_acked, it->packet_number); // Consider a delayed ack for the current next_acked. if (ack_delay < it->ack_time.Subtract(clock_->Now())) { break; } - *next_acked = it->sequence_number; + *next_acked = it->packet_number; ack_delay = it->ack_time.Subtract(clock_->Now()); if (HasRecentLostPackets(transfer, *next_acked) || (*next_acked - last_acked) >= 2) { @@ -241,10 +241,11 @@ QuicTime::Delta SendAlgorithmSimulator::FindNextAck( } bool SendAlgorithmSimulator::HasRecentLostPackets( - const Transfer* transfer, QuicPacketSequenceNumber next_acked) const { - QuicPacketSequenceNumber last_packet = transfer->sender->last_acked; + const Transfer* transfer, + QuicPacketNumber next_acked) const { + QuicPacketNumber last_packet = transfer->sender->last_acked; for (list<SentPacket>::const_iterator it = sent_packets_.begin(); - it != sent_packets_.end() && it->sequence_number < next_acked; ++it) { + it != sent_packets_.end() && it->packet_number < next_acked; ++it) { if (transfer != it->transfer) { continue; } @@ -254,10 +255,10 @@ bool SendAlgorithmSimulator::HasRecentLostPackets( } // Buffer dropped packets are skipped automatically, but still end up // being lost and cause acks to be sent immediately. - if (it->sequence_number > last_packet + 1) { + if (it->packet_number > last_packet + 1) { return true; } - last_packet = it->sequence_number; + last_packet = it->packet_number; } return false; } @@ -286,7 +287,7 @@ void SendAlgorithmSimulator::HandlePendingAck(Transfer* transfer) { ++it; } // If it's missing from the array, it's a loss. - if (it->sequence_number > sender->last_acked) { + if (it->packet_number > sender->last_acked) { DVLOG(1) << "Lost packet:" << sender->last_acked << " dropped by buffer overflow."; lost_packets.push_back(std::make_pair(sender->last_acked, info)); diff --git a/net/quic/congestion_control/send_algorithm_simulator.h b/net/quic/congestion_control/send_algorithm_simulator.h index 50e78f3..4f96bb8 100644 --- a/net/quic/congestion_control/send_algorithm_simulator.h +++ b/net/quic/congestion_control/send_algorithm_simulator.h @@ -59,12 +59,12 @@ class SendAlgorithmSimulator { RttStats* rtt_stats; QuicTime::Delta additional_rtt; - // Last sequence number the sender sent. - QuicPacketSequenceNumber last_sent; - // Last packet sequence number acked. - QuicPacketSequenceNumber last_acked; - // Packet sequence number to ack up to. - QuicPacketSequenceNumber next_acked; + // Last packet number the sender sent. + QuicPacketNumber last_sent; + // Last packet number acked. + QuicPacketNumber last_acked; + // packet number to ack up to. + QuicPacketNumber next_acked; // Stats collected for understanding the congestion control. QuicByteCount max_cwnd; @@ -93,23 +93,23 @@ class SendAlgorithmSimulator { struct SentPacket { SentPacket() - : sequence_number(0), + : packet_number(0), send_time(QuicTime::Zero()), ack_time(QuicTime::Zero()), lost(false), transfer(nullptr) {} - SentPacket(QuicPacketSequenceNumber sequence_number, + SentPacket(QuicPacketNumber packet_number, QuicTime send_time, QuicTime ack_time, bool lost, Transfer* transfer) - : sequence_number(sequence_number), + : packet_number(packet_number), send_time(send_time), ack_time(ack_time), lost(lost), transfer(transfer) {} - QuicPacketSequenceNumber sequence_number; + QuicPacketNumber packet_number; QuicTime send_time; QuicTime ack_time; bool lost; @@ -200,13 +200,13 @@ class SendAlgorithmSimulator { // |last_acked|. Returns QuicTime::Delta::Infinite and doesn't set // |next_acked| if there is no ack after |last_acked|. QuicTime::Delta FindNextAck(const Transfer* transfer, - QuicPacketSequenceNumber last_acked, - QuicPacketSequenceNumber* next_acked) const; + QuicPacketNumber last_acked, + QuicPacketNumber* next_acked) const; // Returns true if any of the packets |transfer| is waiting for less than // next_acked have been lost. bool HasRecentLostPackets(const Transfer* transfer, - QuicPacketSequenceNumber next_acked) const; + QuicPacketNumber next_acked) const; // Process all the acks that should have arrived by the current time, and // lose any packets that are missing. Returns the number of bytes acked. diff --git a/net/quic/congestion_control/tcp_cubic_bytes_sender.cc b/net/quic/congestion_control/tcp_cubic_bytes_sender.cc index f3d4711..9f15e9f 100644 --- a/net/quic/congestion_control/tcp_cubic_bytes_sender.cc +++ b/net/quic/congestion_control/tcp_cubic_bytes_sender.cc @@ -40,8 +40,8 @@ TcpCubicBytesSender::TcpCubicBytesSender( reno_(reno), num_connections_(kDefaultNumConnections), num_acked_packets_(0), - largest_sent_sequence_number_(0), - largest_acked_sequence_number_(0), + largest_sent_packet_number_(0), + largest_acked_packet_number_(0), largest_sent_at_last_cutback_(0), congestion_window_(initial_tcp_congestion_window * kMaxSegmentSize), min_congestion_window_(kDefaultMinimumCongestionWindow), @@ -49,8 +49,7 @@ TcpCubicBytesSender::TcpCubicBytesSender( max_congestion_window_(max_congestion_window * kMaxSegmentSize), slowstart_threshold_(max_congestion_window * kMaxSegmentSize), last_cutback_exited_slowstart_(false), - clock_(clock) { -} + clock_(clock) {} TcpCubicBytesSender::~TcpCubicBytesSender() { } @@ -133,31 +132,30 @@ void TcpCubicBytesSender::OnCongestionEvent( } } -void TcpCubicBytesSender::OnPacketAcked( - QuicPacketSequenceNumber acked_sequence_number, - QuicByteCount acked_bytes, - QuicByteCount bytes_in_flight) { - largest_acked_sequence_number_ = - max(acked_sequence_number, largest_acked_sequence_number_); +void TcpCubicBytesSender::OnPacketAcked(QuicPacketNumber acked_packet_number, + QuicByteCount acked_bytes, + QuicByteCount bytes_in_flight) { + largest_acked_packet_number_ = + max(acked_packet_number, largest_acked_packet_number_); if (InRecovery()) { // PRR is used when in recovery. prr_.OnPacketAcked(acked_bytes); return; } - MaybeIncreaseCwnd(acked_sequence_number, acked_bytes, bytes_in_flight); + MaybeIncreaseCwnd(acked_packet_number, acked_bytes, bytes_in_flight); // TODO(ianswett): Should this even be called when not in slow start? - hybrid_slow_start_.OnPacketAcked(acked_sequence_number, InSlowStart()); + hybrid_slow_start_.OnPacketAcked(acked_packet_number, InSlowStart()); } -void TcpCubicBytesSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, +void TcpCubicBytesSender::OnPacketLost(QuicPacketNumber packet_number, QuicByteCount bytes_in_flight) { // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets // already sent should be treated as a single loss event, since it's expected. - if (sequence_number <= largest_sent_at_last_cutback_) { + if (packet_number <= largest_sent_at_last_cutback_) { if (last_cutback_exited_slowstart_) { ++stats_->slowstart_packets_lost; } - DVLOG(1) << "Ignoring loss for largest_missing:" << sequence_number + DVLOG(1) << "Ignoring loss for largest_missing:" << packet_number << " because it was sent prior to the last CWND cutback."; return; } @@ -180,7 +178,7 @@ void TcpCubicBytesSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, if (congestion_window_ < min_congestion_window_) { congestion_window_ = min_congestion_window_; } - largest_sent_at_last_cutback_ = largest_sent_sequence_number_; + largest_sent_at_last_cutback_ = largest_sent_packet_number_; // Reset packet count from congestion avoidance mode. We start counting again // when we're out of recovery. num_acked_packets_ = 0; @@ -191,7 +189,7 @@ void TcpCubicBytesSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, bool TcpCubicBytesSender::OnPacketSent( QuicTime /*sent_time*/, QuicByteCount /*bytes_in_flight*/, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) { if (InSlowStart()) { @@ -206,9 +204,9 @@ bool TcpCubicBytesSender::OnPacketSent( // PRR is used when in recovery. prr_.OnPacketSent(bytes); } - DCHECK_LT(largest_sent_sequence_number_, sequence_number); - largest_sent_sequence_number_ = sequence_number; - hybrid_slow_start_.OnPacketSent(sequence_number); + DCHECK_LT(largest_sent_packet_number_, packet_number); + largest_sent_packet_number_ = packet_number; + hybrid_slow_start_.OnPacketSent(packet_number); return true; } @@ -287,14 +285,14 @@ bool TcpCubicBytesSender::IsCwndLimited(QuicByteCount bytes_in_flight) const { } bool TcpCubicBytesSender::InRecovery() const { - return largest_acked_sequence_number_ <= largest_sent_at_last_cutback_ && - largest_acked_sequence_number_ != 0; + return largest_acked_packet_number_ <= largest_sent_at_last_cutback_ && + largest_acked_packet_number_ != 0; } // Called when we receive an ack. Normal TCP tracks how many packets one ack // represents, but quic has a separate ack for each packet. void TcpCubicBytesSender::MaybeIncreaseCwnd( - QuicPacketSequenceNumber acked_sequence_number, + QuicPacketNumber acked_packet_number, QuicByteCount acked_bytes, QuicByteCount bytes_in_flight) { LOG_IF(DFATAL, InRecovery()) << "Never increase the CWND during recovery."; diff --git a/net/quic/congestion_control/tcp_cubic_bytes_sender.h b/net/quic/congestion_control/tcp_cubic_bytes_sender.h index 663bc11..7a345f6 100644 --- a/net/quic/congestion_control/tcp_cubic_bytes_sender.h +++ b/net/quic/congestion_control/tcp_cubic_bytes_sender.h @@ -50,7 +50,7 @@ class NET_EXPORT_PRIVATE TcpCubicBytesSender : public SendAlgorithmInterface { const CongestionVector& lost_packets) override; bool OnPacketSent(QuicTime sent_time, QuicByteCount bytes_in_flight, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) override; void OnRetransmissionTimeout(bool packets_retransmitted) override; @@ -75,13 +75,13 @@ class NET_EXPORT_PRIVATE TcpCubicBytesSender : public SendAlgorithmInterface { float RenoBeta() const; // TODO(ianswett): Remove these and migrate to OnCongestionEvent. - void OnPacketAcked(QuicPacketSequenceNumber acked_sequence_number, + void OnPacketAcked(QuicPacketNumber acked_packet_number, QuicByteCount acked_bytes, QuicByteCount bytes_in_flight); - void OnPacketLost(QuicPacketSequenceNumber largest_loss, + void OnPacketLost(QuicPacketNumber largest_loss, QuicByteCount bytes_in_flight); - void MaybeIncreaseCwnd(QuicPacketSequenceNumber acked_sequence_number, + void MaybeIncreaseCwnd(QuicPacketNumber acked_packet_number, QuicByteCount acked_bytes, QuicByteCount bytes_in_flight); bool IsCwndLimited(QuicByteCount bytes_in_flight) const; @@ -102,13 +102,13 @@ class NET_EXPORT_PRIVATE TcpCubicBytesSender : public SendAlgorithmInterface { uint64 num_acked_packets_; // Track the largest packet that has been sent. - QuicPacketSequenceNumber largest_sent_sequence_number_; + QuicPacketNumber largest_sent_packet_number_; // Track the largest packet that has been acked. - QuicPacketSequenceNumber largest_acked_sequence_number_; + QuicPacketNumber largest_acked_packet_number_; - // Track the largest sequence number outstanding when a CWND cutback occurs. - QuicPacketSequenceNumber largest_sent_at_last_cutback_; + // Track the largest packet number outstanding when a CWND cutback occurs. + QuicPacketNumber largest_sent_at_last_cutback_; // Congestion window in bytes. QuicByteCount congestion_window_; diff --git a/net/quic/congestion_control/tcp_cubic_bytes_sender_test.cc b/net/quic/congestion_control/tcp_cubic_bytes_sender_test.cc index e58a29c..dbc9a73 100644 --- a/net/quic/congestion_control/tcp_cubic_bytes_sender_test.cc +++ b/net/quic/congestion_control/tcp_cubic_bytes_sender_test.cc @@ -53,8 +53,8 @@ class TcpCubicBytesSenderTest : public ::testing::Test { TcpCubicBytesSenderTest() : one_ms_(QuicTime::Delta::FromMilliseconds(1)), sender_(new TcpCubicBytesSenderPeer(&clock_, true)), - sequence_number_(1), - acked_sequence_number_(0), + packet_number_(1), + acked_packet_number_(0), bytes_in_flight_(0) { standard_packet_.bytes_sent = kDefaultTCPMSS; } @@ -65,7 +65,7 @@ class TcpCubicBytesSenderTest : public ::testing::Test { bool can_send = sender_->TimeUntilSend(clock_.Now(), bytes_in_flight_, HAS_RETRANSMITTABLE_DATA).IsZero(); while (can_send) { - sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, sequence_number_++, + sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, packet_number_++, kDefaultTCPMSS, HAS_RETRANSMITTABLE_DATA); ++packets_sent; bytes_in_flight_ += kDefaultTCPMSS; @@ -82,9 +82,9 @@ class TcpCubicBytesSenderTest : public ::testing::Test { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; for (int i = 0; i < n; ++i) { - ++acked_sequence_number_; + ++acked_packet_number_; acked_packets.push_back( - std::make_pair(acked_sequence_number_, standard_packet_)); + std::make_pair(acked_packet_number_, standard_packet_)); } sender_->OnCongestionEvent(true, bytes_in_flight_, acked_packets, lost_packets); @@ -96,20 +96,20 @@ class TcpCubicBytesSenderTest : public ::testing::Test { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; for (int i = 0; i < n; ++i) { - ++acked_sequence_number_; + ++acked_packet_number_; lost_packets.push_back( - std::make_pair(acked_sequence_number_, standard_packet_)); + std::make_pair(acked_packet_number_, standard_packet_)); } sender_->OnCongestionEvent(false, bytes_in_flight_, acked_packets, lost_packets); bytes_in_flight_ -= n * kDefaultTCPMSS; } - // Does not increment acked_sequence_number_. - void LosePacket(QuicPacketSequenceNumber sequence_number) { + // Does not increment acked_packet_number_. + void LosePacket(QuicPacketNumber packet_number) { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; - lost_packets.push_back(std::make_pair(sequence_number, standard_packet_)); + lost_packets.push_back(std::make_pair(packet_number, standard_packet_)); sender_->OnCongestionEvent(false, bytes_in_flight_, acked_packets, lost_packets); bytes_in_flight_ -= kDefaultTCPMSS; @@ -118,8 +118,8 @@ class TcpCubicBytesSenderTest : public ::testing::Test { const QuicTime::Delta one_ms_; MockClock clock_; scoped_ptr<TcpCubicBytesSenderPeer> sender_; - QuicPacketSequenceNumber sequence_number_; - QuicPacketSequenceNumber acked_sequence_number_; + QuicPacketNumber packet_number_; + QuicPacketNumber acked_packet_number_; QuicByteCount bytes_in_flight_; TransmissionInfo standard_packet_; }; @@ -405,28 +405,28 @@ TEST_F(TcpCubicBytesSenderTest, RetransmissionDelay) { TEST_F(TcpCubicBytesSenderTest, MultipleLossesInOneWindow) { SendAvailableSendWindow(); const QuicByteCount initial_window = sender_->GetCongestionWindow(); - LosePacket(acked_sequence_number_ + 1); + LosePacket(acked_packet_number_ + 1); const QuicByteCount post_loss_window = sender_->GetCongestionWindow(); EXPECT_GT(initial_window, post_loss_window); - LosePacket(acked_sequence_number_ + 3); + LosePacket(acked_packet_number_ + 3); EXPECT_EQ(post_loss_window, sender_->GetCongestionWindow()); - LosePacket(sequence_number_ - 1); + LosePacket(packet_number_ - 1); EXPECT_EQ(post_loss_window, sender_->GetCongestionWindow()); // Lose a later packet and ensure the window decreases. - LosePacket(sequence_number_); + LosePacket(packet_number_); EXPECT_GT(post_loss_window, sender_->GetCongestionWindow()); } TEST_F(TcpCubicBytesSenderTest, DontTrackAckPackets) { // Send a packet with no retransmittable data, and ensure it's not tracked. EXPECT_FALSE(sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, - sequence_number_++, kDefaultTCPMSS, + packet_number_++, kDefaultTCPMSS, NO_RETRANSMITTABLE_DATA)); // Send a data packet with retransmittable data, and ensure it is tracked. EXPECT_TRUE(sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, - sequence_number_++, kDefaultTCPMSS, + packet_number_++, kDefaultTCPMSS, HAS_RETRANSMITTABLE_DATA)); } diff --git a/net/quic/congestion_control/tcp_cubic_sender.cc b/net/quic/congestion_control/tcp_cubic_sender.cc index 5e1fb25..e39b243 100644 --- a/net/quic/congestion_control/tcp_cubic_sender.cc +++ b/net/quic/congestion_control/tcp_cubic_sender.cc @@ -40,8 +40,8 @@ TcpCubicSender::TcpCubicSender(const QuicClock* clock, reno_(reno), num_connections_(kDefaultNumConnections), congestion_window_count_(0), - largest_sent_sequence_number_(0), - largest_acked_sequence_number_(0), + largest_sent_packet_number_(0), + largest_acked_packet_number_(0), largest_sent_at_last_cutback_(0), congestion_window_(initial_tcp_congestion_window), min_congestion_window_(kDefaultMinimumCongestionWindow), @@ -49,8 +49,7 @@ TcpCubicSender::TcpCubicSender(const QuicClock* clock, slowstart_threshold_(max_tcp_congestion_window), last_cutback_exited_slowstart_(false), max_tcp_congestion_window_(max_tcp_congestion_window), - clock_(clock) { -} + clock_(clock) {} TcpCubicSender::~TcpCubicSender() { UMA_HISTOGRAM_COUNTS("Net.QuicSession.FinalTcpCwnd", congestion_window_); @@ -149,31 +148,30 @@ void TcpCubicSender::OnCongestionEvent( } } -void TcpCubicSender::OnPacketAcked( - QuicPacketSequenceNumber acked_sequence_number, - QuicByteCount acked_bytes, - QuicByteCount bytes_in_flight) { - largest_acked_sequence_number_ = max(acked_sequence_number, - largest_acked_sequence_number_); +void TcpCubicSender::OnPacketAcked(QuicPacketNumber acked_packet_number, + QuicByteCount acked_bytes, + QuicByteCount bytes_in_flight) { + largest_acked_packet_number_ = + max(acked_packet_number, largest_acked_packet_number_); if (InRecovery()) { // PRR is used when in recovery. prr_.OnPacketAcked(acked_bytes); return; } - MaybeIncreaseCwnd(acked_sequence_number, bytes_in_flight); + MaybeIncreaseCwnd(acked_packet_number, bytes_in_flight); // TODO(ianswett): Should this even be called when not in slow start? - hybrid_slow_start_.OnPacketAcked(acked_sequence_number, InSlowStart()); + hybrid_slow_start_.OnPacketAcked(acked_packet_number, InSlowStart()); } -void TcpCubicSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, +void TcpCubicSender::OnPacketLost(QuicPacketNumber packet_number, QuicByteCount bytes_in_flight) { // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets // already sent should be treated as a single loss event, since it's expected. - if (sequence_number <= largest_sent_at_last_cutback_) { + if (packet_number <= largest_sent_at_last_cutback_) { if (last_cutback_exited_slowstart_) { ++stats_->slowstart_packets_lost; } - DVLOG(1) << "Ignoring loss for largest_missing:" << sequence_number + DVLOG(1) << "Ignoring loss for largest_missing:" << packet_number << " because it was sent prior to the last CWND cutback."; return; } @@ -196,7 +194,7 @@ void TcpCubicSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, if (congestion_window_ < min_congestion_window_) { congestion_window_ = min_congestion_window_; } - largest_sent_at_last_cutback_ = largest_sent_sequence_number_; + largest_sent_at_last_cutback_ = largest_sent_packet_number_; // reset packet count from congestion avoidance mode. We start // counting again when we're out of recovery. congestion_window_count_ = 0; @@ -206,7 +204,7 @@ void TcpCubicSender::OnPacketLost(QuicPacketSequenceNumber sequence_number, bool TcpCubicSender::OnPacketSent(QuicTime /*sent_time*/, QuicByteCount /*bytes_in_flight*/, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) { if (InSlowStart()) { @@ -221,9 +219,9 @@ bool TcpCubicSender::OnPacketSent(QuicTime /*sent_time*/, // PRR is used when in recovery. prr_.OnPacketSent(bytes); } - DCHECK_LT(largest_sent_sequence_number_, sequence_number); - largest_sent_sequence_number_ = sequence_number; - hybrid_slow_start_.OnPacketSent(sequence_number); + DCHECK_LT(largest_sent_packet_number_, packet_number); + largest_sent_packet_number_ = packet_number; + hybrid_slow_start_.OnPacketSent(packet_number); return true; } @@ -304,15 +302,14 @@ bool TcpCubicSender::IsCwndLimited(QuicByteCount bytes_in_flight) const { } bool TcpCubicSender::InRecovery() const { - return largest_acked_sequence_number_ <= largest_sent_at_last_cutback_ && - largest_acked_sequence_number_ != 0; + return largest_acked_packet_number_ <= largest_sent_at_last_cutback_ && + largest_acked_packet_number_ != 0; } // Called when we receive an ack. Normal TCP tracks how many packets one ack // represents, but quic has a separate ack for each packet. -void TcpCubicSender::MaybeIncreaseCwnd( - QuicPacketSequenceNumber acked_sequence_number, - QuicByteCount bytes_in_flight) { +void TcpCubicSender::MaybeIncreaseCwnd(QuicPacketNumber acked_packet_number, + QuicByteCount bytes_in_flight) { LOG_IF(DFATAL, InRecovery()) << "Never increase the CWND during recovery."; if (!IsCwndLimited(bytes_in_flight)) { // We don't update the congestion window unless we are close to using the diff --git a/net/quic/congestion_control/tcp_cubic_sender.h b/net/quic/congestion_control/tcp_cubic_sender.h index 394a12e..1e82401 100644 --- a/net/quic/congestion_control/tcp_cubic_sender.h +++ b/net/quic/congestion_control/tcp_cubic_sender.h @@ -52,7 +52,7 @@ class NET_EXPORT_PRIVATE TcpCubicSender : public SendAlgorithmInterface { const CongestionVector& lost_packets) override; bool OnPacketSent(QuicTime sent_time, QuicByteCount bytes_in_flight, - QuicPacketSequenceNumber sequence_number, + QuicPacketNumber packet_number, QuicByteCount bytes, HasRetransmittableData is_retransmittable) override; void OnRetransmissionTimeout(bool packets_retransmitted) override; @@ -77,13 +77,13 @@ class NET_EXPORT_PRIVATE TcpCubicSender : public SendAlgorithmInterface { float RenoBeta() const; // TODO(ianswett): Remove these and migrate to OnCongestionEvent. - void OnPacketAcked(QuicPacketSequenceNumber acked_sequence_number, + void OnPacketAcked(QuicPacketNumber acked_packet_number, QuicByteCount acked_bytes, QuicByteCount bytes_in_flight); - void OnPacketLost(QuicPacketSequenceNumber largest_loss, + void OnPacketLost(QuicPacketNumber largest_loss, QuicByteCount bytes_in_flight); - void MaybeIncreaseCwnd(QuicPacketSequenceNumber acked_sequence_number, + void MaybeIncreaseCwnd(QuicPacketNumber acked_packet_number, QuicByteCount bytes_in_flight); bool IsCwndLimited(QuicByteCount bytes_in_flight) const; @@ -103,13 +103,13 @@ class NET_EXPORT_PRIVATE TcpCubicSender : public SendAlgorithmInterface { uint64 congestion_window_count_; // Track the largest packet that has been sent. - QuicPacketSequenceNumber largest_sent_sequence_number_; + QuicPacketNumber largest_sent_packet_number_; // Track the largest packet that has been acked. - QuicPacketSequenceNumber largest_acked_sequence_number_; + QuicPacketNumber largest_acked_packet_number_; - // Track the largest sequence number outstanding when a CWND cutback occurs. - QuicPacketSequenceNumber largest_sent_at_last_cutback_; + // Track the largest packet number outstanding when a CWND cutback occurs. + QuicPacketNumber largest_sent_at_last_cutback_; // Congestion window in packets. QuicPacketCount congestion_window_; diff --git a/net/quic/congestion_control/tcp_cubic_sender_test.cc b/net/quic/congestion_control/tcp_cubic_sender_test.cc index 90773b3..9376e4e 100644 --- a/net/quic/congestion_control/tcp_cubic_sender_test.cc +++ b/net/quic/congestion_control/tcp_cubic_sender_test.cc @@ -66,8 +66,8 @@ class TcpCubicSenderTest : public ::testing::Test { TcpCubicSenderTest() : one_ms_(QuicTime::Delta::FromMilliseconds(1)), sender_(new TcpCubicSenderPeer(&clock_, true, kMaxCongestionWindow)), - sequence_number_(1), - acked_sequence_number_(0), + packet_number_(1), + acked_packet_number_(0), bytes_in_flight_(0) { standard_packet_.bytes_sent = kDefaultTCPMSS; } @@ -78,7 +78,7 @@ class TcpCubicSenderTest : public ::testing::Test { bool can_send = sender_->TimeUntilSend( clock_.Now(), bytes_in_flight_, HAS_RETRANSMITTABLE_DATA).IsZero(); while (can_send) { - sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, sequence_number_++, + sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, packet_number_++, kDefaultTCPMSS, HAS_RETRANSMITTABLE_DATA); ++packets_sent; bytes_in_flight_ += kDefaultTCPMSS; @@ -96,9 +96,9 @@ class TcpCubicSenderTest : public ::testing::Test { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; for (int i = 0; i < n; ++i) { - ++acked_sequence_number_; + ++acked_packet_number_; acked_packets.push_back( - std::make_pair(acked_sequence_number_, standard_packet_)); + std::make_pair(acked_packet_number_, standard_packet_)); } sender_->OnCongestionEvent( true, bytes_in_flight_, acked_packets, lost_packets); @@ -110,20 +110,20 @@ class TcpCubicSenderTest : public ::testing::Test { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; for (int i = 0; i < n; ++i) { - ++acked_sequence_number_; + ++acked_packet_number_; lost_packets.push_back( - std::make_pair(acked_sequence_number_, standard_packet_)); + std::make_pair(acked_packet_number_, standard_packet_)); } sender_->OnCongestionEvent( false, bytes_in_flight_, acked_packets, lost_packets); bytes_in_flight_ -= n * kDefaultTCPMSS; } - // Does not increment acked_sequence_number_. - void LosePacket(QuicPacketSequenceNumber sequence_number) { + // Does not increment acked_packet_number_. + void LosePacket(QuicPacketNumber packet_number) { SendAlgorithmInterface::CongestionVector acked_packets; SendAlgorithmInterface::CongestionVector lost_packets; - lost_packets.push_back(std::make_pair(sequence_number, standard_packet_)); + lost_packets.push_back(std::make_pair(packet_number, standard_packet_)); sender_->OnCongestionEvent( false, bytes_in_flight_, acked_packets, lost_packets); bytes_in_flight_ -= kDefaultTCPMSS; @@ -132,8 +132,8 @@ class TcpCubicSenderTest : public ::testing::Test { const QuicTime::Delta one_ms_; MockClock clock_; scoped_ptr<TcpCubicSenderPeer> sender_; - QuicPacketSequenceNumber sequence_number_; - QuicPacketSequenceNumber acked_sequence_number_; + QuicPacketNumber packet_number_; + QuicPacketNumber acked_packet_number_; QuicByteCount bytes_in_flight_; TransmissionInfo standard_packet_; }; @@ -487,28 +487,28 @@ TEST_F(TcpCubicSenderTest, TcpCubicMaxCongestionWindow) { TEST_F(TcpCubicSenderTest, MultipleLossesInOneWindow) { SendAvailableSendWindow(); const QuicByteCount initial_window = sender_->GetCongestionWindow(); - LosePacket(acked_sequence_number_ + 1); + LosePacket(acked_packet_number_ + 1); const QuicByteCount post_loss_window = sender_->GetCongestionWindow(); EXPECT_GT(initial_window, post_loss_window); - LosePacket(acked_sequence_number_ + 3); + LosePacket(acked_packet_number_ + 3); EXPECT_EQ(post_loss_window, sender_->GetCongestionWindow()); - LosePacket(sequence_number_ - 1); + LosePacket(packet_number_ - 1); EXPECT_EQ(post_loss_window, sender_->GetCongestionWindow()); // Lose a later packet and ensure the window decreases. - LosePacket(sequence_number_); + LosePacket(packet_number_); EXPECT_GT(post_loss_window, sender_->GetCongestionWindow()); } TEST_F(TcpCubicSenderTest, DontTrackAckPackets) { // Send a packet with no retransmittable data, and ensure it's not tracked. EXPECT_FALSE(sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, - sequence_number_++, kDefaultTCPMSS, + packet_number_++, kDefaultTCPMSS, NO_RETRANSMITTABLE_DATA)); // Send a data packet with retransmittable data, and ensure it is tracked. EXPECT_TRUE(sender_->OnPacketSent(clock_.Now(), bytes_in_flight_, - sequence_number_++, kDefaultTCPMSS, + packet_number_++, kDefaultTCPMSS, HAS_RETRANSMITTABLE_DATA)); } diff --git a/net/quic/congestion_control/tcp_loss_algorithm.cc b/net/quic/congestion_control/tcp_loss_algorithm.cc index f657cc2..2302d9f 100644 --- a/net/quic/congestion_control/tcp_loss_algorithm.cc +++ b/net/quic/congestion_control/tcp_loss_algorithm.cc @@ -30,31 +30,31 @@ LossDetectionType TCPLossAlgorithm::GetLossDetectionType() const { } // Uses nack counts to decide when packets are lost. -SequenceNumberSet TCPLossAlgorithm::DetectLostPackets( +PacketNumberSet TCPLossAlgorithm::DetectLostPackets( const QuicUnackedPacketMap& unacked_packets, const QuicTime& time, - QuicPacketSequenceNumber largest_observed, + QuicPacketNumber largest_observed, const RttStats& rtt_stats) { - SequenceNumberSet lost_packets; + PacketNumberSet lost_packets; loss_detection_timeout_ = QuicTime::Zero(); QuicTime::Delta early_retransmit_delay = QuicTime::Delta::Max( QuicTime::Delta::FromMilliseconds(kMinLossDelayMs), rtt_stats.smoothed_rtt().Multiply(kEarlyRetransmitLossDelayMultiplier)); - QuicPacketSequenceNumber sequence_number = unacked_packets.GetLeastUnacked(); + QuicPacketNumber packet_number = unacked_packets.GetLeastUnacked(); for (QuicUnackedPacketMap::const_iterator it = unacked_packets.begin(); - it != unacked_packets.end() && sequence_number <= largest_observed; - ++it, ++sequence_number) { + it != unacked_packets.end() && packet_number <= largest_observed; + ++it, ++packet_number) { if (!it->in_flight) { continue; } LOG_IF(DFATAL, it->nack_count == 0 && it->sent_time.IsInitialized()) << "All packets less than largest observed should have been nacked." - << "sequence_number:" << sequence_number + << "packet_number:" << packet_number << " largest_observed:" << largest_observed; if (it->nack_count >= kNumberOfNacksBeforeRetransmission) { - lost_packets.insert(sequence_number); + lost_packets.insert(packet_number); continue; } @@ -64,7 +64,7 @@ SequenceNumberSet TCPLossAlgorithm::DetectLostPackets( // kNumberOfNacksBeforeRetransmission nacks. if (it->sent_time.Add(rtt_stats.smoothed_rtt()) < unacked_packets.GetTransmissionInfo(largest_observed).sent_time) { - lost_packets.insert(sequence_number); + lost_packets.insert(packet_number); continue; } @@ -76,7 +76,7 @@ SequenceNumberSet TCPLossAlgorithm::DetectLostPackets( // Early retransmit marks the packet as lost once 1.25RTTs have passed // since the packet was sent and otherwise sets an alarm. if (time >= it->sent_time.Add(early_retransmit_delay)) { - lost_packets.insert(sequence_number); + lost_packets.insert(packet_number); } else { // Set the timeout for the earliest retransmittable packet where early // retransmit applies. diff --git a/net/quic/congestion_control/tcp_loss_algorithm.h b/net/quic/congestion_control/tcp_loss_algorithm.h index a5f245e..9894c6b 100644 --- a/net/quic/congestion_control/tcp_loss_algorithm.h +++ b/net/quic/congestion_control/tcp_loss_algorithm.h @@ -29,11 +29,10 @@ class NET_EXPORT_PRIVATE TCPLossAlgorithm : public LossDetectionInterface { LossDetectionType GetLossDetectionType() const override; // Uses nack counts to decide when packets are lost. - SequenceNumberSet DetectLostPackets( - const QuicUnackedPacketMap& unacked_packets, - const QuicTime& time, - QuicPacketSequenceNumber largest_observed, - const RttStats& rtt_stats) override; + PacketNumberSet DetectLostPackets(const QuicUnackedPacketMap& unacked_packets, + const QuicTime& time, + QuicPacketNumber largest_observed, + const RttStats& rtt_stats) override; // Returns a non-zero value when the early retransmit timer is active. QuicTime GetLossTimeout() const override; diff --git a/net/quic/congestion_control/tcp_loss_algorithm_test.cc b/net/quic/congestion_control/tcp_loss_algorithm_test.cc index 35b68e8..80474f4 100644 --- a/net/quic/congestion_control/tcp_loss_algorithm_test.cc +++ b/net/quic/congestion_control/tcp_loss_algorithm_test.cc @@ -35,21 +35,20 @@ class TcpLossAlgorithmTest : public ::testing::Test { STLDeleteElements(&packets_); } - void SendDataPacket(QuicPacketSequenceNumber sequence_number) { + void SendDataPacket(QuicPacketNumber packet_number) { packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); SerializedPacket packet( - sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, packets_.back(), 0, + packet_number, PACKET_1BYTE_PACKET_NUMBER, packets_.back(), 0, new RetransmittableFrames(ENCRYPTION_NONE), false, false); unacked_packets_.AddSentPacket(packet, 0, NOT_RETRANSMISSION, clock_.Now(), 1000, true); } - void VerifyLosses(QuicPacketSequenceNumber largest_observed, - QuicPacketSequenceNumber* losses_expected, + void VerifyLosses(QuicPacketNumber largest_observed, + QuicPacketNumber* losses_expected, size_t num_losses) { - SequenceNumberSet lost_packets = - loss_algorithm_.DetectLostPackets( - unacked_packets_, clock_.Now(), largest_observed, rtt_stats_); + PacketNumberSet lost_packets = loss_algorithm_.DetectLostPackets( + unacked_packets_, clock_.Now(), largest_observed, rtt_stats_); EXPECT_EQ(num_losses, lost_packets.size()); for (size_t i = 0; i < num_losses; ++i) { EXPECT_TRUE(ContainsKey(lost_packets, losses_expected[i])); @@ -81,7 +80,7 @@ TEST_F(TcpLossAlgorithmTest, NackRetransmit1Packet) { // Loss on three acks. unacked_packets_.RemoveFromInFlight(4); unacked_packets_.NackPacket(1, 3); - QuicPacketSequenceNumber lost[] = {1}; + QuicPacketNumber lost[] = {1}; VerifyLosses(4, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -100,7 +99,7 @@ TEST_F(TcpLossAlgorithmTest, NackRetransmit1PacketWith1StretchAck) { unacked_packets_.RemoveFromInFlight(2); unacked_packets_.RemoveFromInFlight(3); unacked_packets_.RemoveFromInFlight(4); - QuicPacketSequenceNumber lost[] = { 1 }; + QuicPacketNumber lost[] = {1}; VerifyLosses(4, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -118,7 +117,7 @@ TEST_F(TcpLossAlgorithmTest, NackRetransmit1PacketSingleAck) { unacked_packets_.NackPacket(2, 2); unacked_packets_.NackPacket(3, 1); unacked_packets_.RemoveFromInFlight(4); - QuicPacketSequenceNumber lost[] = { 1 }; + QuicPacketNumber lost[] = {1}; VerifyLosses(4, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -137,7 +136,7 @@ TEST_F(TcpLossAlgorithmTest, EarlyRetransmit1Packet) { loss_algorithm_.GetLossTimeout()); clock_.AdvanceTime(rtt_stats_.latest_rtt().Multiply(1.25)); - QuicPacketSequenceNumber lost[] = { 1 }; + QuicPacketNumber lost[] = {1}; VerifyLosses(2, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -159,7 +158,7 @@ TEST_F(TcpLossAlgorithmTest, EarlyRetransmitAllPackets) { for (size_t i = 1; i < kNumSentPackets; ++i) { unacked_packets_.NackPacket(i, kNumSentPackets - i); } - QuicPacketSequenceNumber lost[] = { 1, 2 }; + QuicPacketNumber lost[] = {1, 2}; VerifyLosses(kNumSentPackets, lost, arraysize(lost)); // The time has already advanced 1/4 an RTT, so ensure the timeout is set // 1.25 RTTs after the earliest pending packet(3), not the last(4). @@ -167,12 +166,12 @@ TEST_F(TcpLossAlgorithmTest, EarlyRetransmitAllPackets) { loss_algorithm_.GetLossTimeout()); clock_.AdvanceTime(rtt_stats_.smoothed_rtt()); - QuicPacketSequenceNumber lost2[] = { 1, 2, 3 }; + QuicPacketNumber lost2[] = {1, 2, 3}; VerifyLosses(kNumSentPackets, lost2, arraysize(lost2)); EXPECT_EQ(clock_.Now().Add(rtt_stats_.smoothed_rtt().Multiply(0.25)), loss_algorithm_.GetLossTimeout()); clock_.AdvanceTime(rtt_stats_.smoothed_rtt().Multiply(0.25)); - QuicPacketSequenceNumber lost3[] = { 1, 2, 3, 4 }; + QuicPacketNumber lost3[] = {1, 2, 3, 4}; VerifyLosses(kNumSentPackets, lost3, arraysize(lost3)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -209,7 +208,7 @@ TEST_F(TcpLossAlgorithmTest, AlwaysLosePacketSent1RTTEarlier) { unacked_packets_.IncreaseLargestObserved(2); unacked_packets_.RemoveFromInFlight(2); unacked_packets_.NackPacket(1, 1); - QuicPacketSequenceNumber lost[] = {1}; + QuicPacketNumber lost[] = {1}; VerifyLosses(2, lost, arraysize(lost)); } diff --git a/net/quic/congestion_control/time_loss_algorithm.cc b/net/quic/congestion_control/time_loss_algorithm.cc index b5f90b7..3d500dc 100644 --- a/net/quic/congestion_control/time_loss_algorithm.cc +++ b/net/quic/congestion_control/time_loss_algorithm.cc @@ -27,28 +27,28 @@ LossDetectionType TimeLossAlgorithm::GetLossDetectionType() const { return kTime; } -SequenceNumberSet TimeLossAlgorithm::DetectLostPackets( +PacketNumberSet TimeLossAlgorithm::DetectLostPackets( const QuicUnackedPacketMap& unacked_packets, const QuicTime& time, - QuicPacketSequenceNumber largest_observed, + QuicPacketNumber largest_observed, const RttStats& rtt_stats) { - SequenceNumberSet lost_packets; + PacketNumberSet lost_packets; loss_detection_timeout_ = QuicTime::Zero(); QuicTime::Delta loss_delay = QuicTime::Delta::Max( QuicTime::Delta::FromMilliseconds(kMinLossDelayMs), QuicTime::Delta::Max(rtt_stats.smoothed_rtt(), rtt_stats.latest_rtt()) .Multiply(kLossDelayMultiplier)); - QuicPacketSequenceNumber sequence_number = unacked_packets.GetLeastUnacked(); + QuicPacketNumber packet_number = unacked_packets.GetLeastUnacked(); for (QuicUnackedPacketMap::const_iterator it = unacked_packets.begin(); - it != unacked_packets.end() && sequence_number <= largest_observed; - ++it, ++sequence_number) { + it != unacked_packets.end() && packet_number <= largest_observed; + ++it, ++packet_number) { if (!it->in_flight) { continue; } LOG_IF(DFATAL, it->nack_count == 0 && it->sent_time.IsInitialized()) << "All packets less than largest observed should have been nacked." - << "sequence_number:" << sequence_number + << "packet_number:" << packet_number << " largest_observed:" << largest_observed; // Packets are sent in order, so break when we haven't waited long enough @@ -58,7 +58,7 @@ SequenceNumberSet TimeLossAlgorithm::DetectLostPackets( loss_detection_timeout_ = when_lost; break; } - lost_packets.insert(sequence_number); + lost_packets.insert(packet_number); } return lost_packets; diff --git a/net/quic/congestion_control/time_loss_algorithm.h b/net/quic/congestion_control/time_loss_algorithm.h index 794a07d..bf1224e 100644 --- a/net/quic/congestion_control/time_loss_algorithm.h +++ b/net/quic/congestion_control/time_loss_algorithm.h @@ -28,11 +28,10 @@ class NET_EXPORT_PRIVATE TimeLossAlgorithm : public LossDetectionInterface { // Declares pending packets less than the largest observed lost when it has // been 1.25 RTT since they were sent. Packets larger than the largest // observed are retransmitted via TLP. - SequenceNumberSet DetectLostPackets( - const QuicUnackedPacketMap& unacked_packets, - const QuicTime& time, - QuicPacketSequenceNumber largest_observed, - const RttStats& rtt_stats) override; + PacketNumberSet DetectLostPackets(const QuicUnackedPacketMap& unacked_packets, + const QuicTime& time, + QuicPacketNumber largest_observed, + const RttStats& rtt_stats) override; // Returns the time the next packet will be lost, or zero if there // are no nacked pending packets outstanding. diff --git a/net/quic/congestion_control/time_loss_algorithm_test.cc b/net/quic/congestion_control/time_loss_algorithm_test.cc index e95e715..fb3d752 100644 --- a/net/quic/congestion_control/time_loss_algorithm_test.cc +++ b/net/quic/congestion_control/time_loss_algorithm_test.cc @@ -35,21 +35,20 @@ class TimeLossAlgorithmTest : public ::testing::Test { STLDeleteElements(&packets_); } - void SendDataPacket(QuicPacketSequenceNumber sequence_number) { + void SendDataPacket(QuicPacketNumber packet_number) { packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); SerializedPacket packet( - sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, packets_.back(), 0, + packet_number, PACKET_1BYTE_PACKET_NUMBER, packets_.back(), 0, new RetransmittableFrames(ENCRYPTION_NONE), false, false); unacked_packets_.AddSentPacket(packet, 0, NOT_RETRANSMISSION, clock_.Now(), 1000, true); } - void VerifyLosses(QuicPacketSequenceNumber largest_observed, - QuicPacketSequenceNumber* losses_expected, + void VerifyLosses(QuicPacketNumber largest_observed, + QuicPacketNumber* losses_expected, size_t num_losses) { - SequenceNumberSet lost_packets = - loss_algorithm_.DetectLostPackets( - unacked_packets_, clock_.Now(), largest_observed, rtt_stats_); + PacketNumberSet lost_packets = loss_algorithm_.DetectLostPackets( + unacked_packets_, clock_.Now(), largest_observed, rtt_stats_); EXPECT_EQ(num_losses, lost_packets.size()); for (size_t i = 0; i < num_losses; ++i) { EXPECT_TRUE(ContainsKey(lost_packets, losses_expected[i])); @@ -98,7 +97,7 @@ TEST_F(TimeLossAlgorithmTest, NoLossUntilTimeout) { unacked_packets_.NackPacket(1, 5); VerifyLosses(2, nullptr, 0); clock_.AdvanceTime(rtt_stats_.smoothed_rtt().Multiply(0.25)); - QuicPacketSequenceNumber lost[] = { 1 }; + QuicPacketNumber lost[] = {1}; VerifyLosses(2, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } @@ -144,7 +143,7 @@ TEST_F(TimeLossAlgorithmTest, MultipleLossesAtOnce) { EXPECT_EQ(rtt_stats_.smoothed_rtt().Multiply(0.25), loss_algorithm_.GetLossTimeout().Subtract(clock_.Now())); clock_.AdvanceTime(rtt_stats_.smoothed_rtt().Multiply(0.25)); - QuicPacketSequenceNumber lost[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + QuicPacketNumber lost[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; VerifyLosses(10, lost, arraysize(lost)); EXPECT_EQ(QuicTime::Zero(), loss_algorithm_.GetLossTimeout()); } |