Index: net/quic/congestion_control/pacing_sender.cc |
diff --git a/net/quic/congestion_control/pacing_sender.cc b/net/quic/congestion_control/pacing_sender.cc |
index 447890b5b5b4622dfaf5cda85ccc8f9224454b12..62c64ea74d68095e86647f89ae89461ecf323c85 100644 |
--- a/net/quic/congestion_control/pacing_sender.cc |
+++ b/net/quic/congestion_control/pacing_sender.cc |
@@ -14,7 +14,7 @@ PacingSender::PacingSender(SendAlgorithmInterface* sender, |
initial_packet_burst_(initial_packet_burst), |
burst_tokens_(initial_packet_burst), |
last_delayed_packet_sent_time_(QuicTime::Zero()), |
- next_packet_send_time_(QuicTime::Zero()), |
+ ideal_next_packet_send_time_(QuicTime::Zero()), |
was_last_send_delayed_(false) { |
} |
@@ -56,11 +56,15 @@ bool PacingSender::OnPacketSent( |
if (has_retransmittable_data != HAS_RETRANSMITTABLE_DATA) { |
return in_flight; |
} |
+ if (bytes_in_flight == 0) { |
+ // Add more burst tokens anytime the connection is leaving quiescence. |
+ burst_tokens_ = initial_packet_burst_; |
+ } |
if (burst_tokens_ > 0) { |
--burst_tokens_; |
was_last_send_delayed_ = false; |
last_delayed_packet_sent_time_ = QuicTime::Zero(); |
- next_packet_send_time_ = QuicTime::Zero(); |
+ ideal_next_packet_send_time_ = QuicTime::Zero(); |
return in_flight; |
} |
// The next packet should be sent as soon as the current packets has been |
@@ -69,13 +73,14 @@ bool PacingSender::OnPacketSent( |
// If the last send was delayed, and the alarm took a long time to get |
// invoked, allow the connection to make up for lost time. |
if (was_last_send_delayed_) { |
- next_packet_send_time_ = next_packet_send_time_.Add(delay); |
+ ideal_next_packet_send_time_ = ideal_next_packet_send_time_.Add(delay); |
// The send was application limited if it takes longer than the |
// pacing delay between sent packets. |
const bool application_limited = |
last_delayed_packet_sent_time_.IsInitialized() && |
sent_time > last_delayed_packet_sent_time_.Add(delay); |
- const bool making_up_for_lost_time = next_packet_send_time_ <= sent_time; |
+ const bool making_up_for_lost_time = |
+ ideal_next_packet_send_time_ <= sent_time; |
// As long as we're making up time and not application limited, |
// continue to consider the packets delayed, allowing the packets to be |
// sent immediately. |
@@ -86,9 +91,8 @@ bool PacingSender::OnPacketSent( |
last_delayed_packet_sent_time_ = QuicTime::Zero(); |
} |
} else { |
- next_packet_send_time_ = |
- QuicTime::Max(next_packet_send_time_.Add(delay), |
- sent_time.Add(delay).Subtract(alarm_granularity_)); |
+ ideal_next_packet_send_time_ = QuicTime::Max( |
+ ideal_next_packet_send_time_.Add(delay), sent_time.Add(delay)); |
} |
return in_flight; |
} |
@@ -107,12 +111,8 @@ QuicTime::Delta PacingSender::TimeUntilSend( |
HasRetransmittableData has_retransmittable_data) const { |
QuicTime::Delta time_until_send = |
sender_->TimeUntilSend(now, bytes_in_flight, has_retransmittable_data); |
- if (bytes_in_flight == 0) { |
- // Add more burst tokens anytime the connection is entering quiescence. |
- burst_tokens_ = initial_packet_burst_; |
- } |
- if (burst_tokens_ > 0) { |
- // Don't pace if we have burst tokens available. |
+ if (burst_tokens_ > 0 || bytes_in_flight == 0) { |
+ // Don't pace if we have burst tokens available or leaving quiescence. |
return time_until_send; |
} |
@@ -129,13 +129,11 @@ QuicTime::Delta PacingSender::TimeUntilSend( |
} |
// If the next send time is within the alarm granularity, send immediately. |
- // TODO(ianswett): This granularity logic ends up sending more packets than |
- // intended in an effort to make up for lost time that wasn't lost. |
- if (next_packet_send_time_ > now.Add(alarm_granularity_)) { |
+ if (ideal_next_packet_send_time_ > now.Add(alarm_granularity_)) { |
DVLOG(1) << "Delaying packet: " |
- << next_packet_send_time_.Subtract(now).ToMicroseconds(); |
+ << ideal_next_packet_send_time_.Subtract(now).ToMicroseconds(); |
was_last_send_delayed_ = true; |
- return next_packet_send_time_.Subtract(now); |
+ return ideal_next_packet_send_time_.Subtract(now); |
} |
DVLOG(1) << "Sending packet now"; |