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

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

Issue 397513002: Fix a newly introduced bug in QUIC's PacingSender where burst_tokens_ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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/pacing_sender.h" 5 #include "net/quic/congestion_control/pacing_sender.h"
6 6
7 namespace net { 7 namespace net {
8 8
9 PacingSender::PacingSender(SendAlgorithmInterface* sender, 9 PacingSender::PacingSender(SendAlgorithmInterface* sender,
10 QuicTime::Delta alarm_granularity, 10 QuicTime::Delta alarm_granularity,
(...skipping 23 matching lines...) Expand all
34 feedback, feedback_receive_time); 34 feedback, feedback_receive_time);
35 } 35 }
36 36
37 void PacingSender::OnCongestionEvent(bool rtt_updated, 37 void PacingSender::OnCongestionEvent(bool rtt_updated,
38 QuicByteCount bytes_in_flight, 38 QuicByteCount bytes_in_flight,
39 const CongestionMap& acked_packets, 39 const CongestionMap& acked_packets,
40 const CongestionMap& lost_packets) { 40 const CongestionMap& lost_packets) {
41 if (rtt_updated) { 41 if (rtt_updated) {
42 has_valid_rtt_ = true; 42 has_valid_rtt_ = true;
43 } 43 }
44 if (bytes_in_flight == 0) {
45 // Add more burst tokens anytime the connection is entering quiescence.
46 burst_tokens_ = initial_packet_burst_;
47 }
48 sender_->OnCongestionEvent( 44 sender_->OnCongestionEvent(
49 rtt_updated, bytes_in_flight, acked_packets, lost_packets); 45 rtt_updated, bytes_in_flight, acked_packets, lost_packets);
50 } 46 }
51 47
52 bool PacingSender::OnPacketSent( 48 bool PacingSender::OnPacketSent(
53 QuicTime sent_time, 49 QuicTime sent_time,
54 QuicByteCount bytes_in_flight, 50 QuicByteCount bytes_in_flight,
55 QuicPacketSequenceNumber sequence_number, 51 QuicPacketSequenceNumber sequence_number,
56 QuicByteCount bytes, 52 QuicByteCount bytes,
57 HasRetransmittableData has_retransmittable_data) { 53 HasRetransmittableData has_retransmittable_data) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 QuicTime::Delta PacingSender::TimeUntilSend( 110 QuicTime::Delta PacingSender::TimeUntilSend(
115 QuicTime now, 111 QuicTime now,
116 QuicByteCount bytes_in_flight, 112 QuicByteCount bytes_in_flight,
117 HasRetransmittableData has_retransmittable_data) const { 113 HasRetransmittableData has_retransmittable_data) const {
118 QuicTime::Delta time_until_send = 114 QuicTime::Delta time_until_send =
119 sender_->TimeUntilSend(now, bytes_in_flight, has_retransmittable_data); 115 sender_->TimeUntilSend(now, bytes_in_flight, has_retransmittable_data);
120 if (!has_valid_rtt_) { 116 if (!has_valid_rtt_) {
121 // Don't pace if we don't have an updated RTT estimate. 117 // Don't pace if we don't have an updated RTT estimate.
122 return time_until_send; 118 return time_until_send;
123 } 119 }
120 if (bytes_in_flight == 0) {
121 // Add more burst tokens anytime the connection is entering quiescence.
122 burst_tokens_ = initial_packet_burst_;
123 }
124 if (burst_tokens_ > 0) { 124 if (burst_tokens_ > 0) {
125 // Don't pace if we have burst tokens available. 125 // Don't pace if we have burst tokens available.
126 return time_until_send; 126 return time_until_send;
127 } 127 }
128 128
129 if (!time_until_send.IsZero()) { 129 if (!time_until_send.IsZero()) {
130 DCHECK(time_until_send.IsInfinite()); 130 DCHECK(time_until_send.IsInfinite());
131 // The underlying sender prevents sending. 131 // The underlying sender prevents sending.
132 return time_until_send; 132 return time_until_send;
133 } 133 }
(...skipping 26 matching lines...) Expand all
160 160
161 QuicTime::Delta PacingSender::RetransmissionDelay() const { 161 QuicTime::Delta PacingSender::RetransmissionDelay() const {
162 return sender_->RetransmissionDelay(); 162 return sender_->RetransmissionDelay();
163 } 163 }
164 164
165 QuicByteCount PacingSender::GetCongestionWindow() const { 165 QuicByteCount PacingSender::GetCongestionWindow() const {
166 return sender_->GetCongestionWindow(); 166 return sender_->GetCongestionWindow();
167 } 167 }
168 168
169 } // namespace net 169 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/pacing_sender.h ('k') | net/quic/congestion_control/pacing_sender_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698