| Index: net/quic/quic_sent_packet_manager.cc
|
| diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
|
| index 9f3f3d306dad089274ed75183f38edf7784dffb4..f054673d68b78aa2a3bef23990334746261ca3af 100644
|
| --- a/net/quic/quic_sent_packet_manager.cc
|
| +++ b/net/quic/quic_sent_packet_manager.cc
|
| @@ -195,15 +195,13 @@ void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
| QuicByteCount bytes_in_flight = unacked_packets_.bytes_in_flight();
|
|
|
| UpdatePacketInformationReceivedByPeer(ack_frame);
|
| - // We rely on delta_time_largest_observed to compute an RTT estimate, so
|
| - // we only update rtt when the largest observed gets acked.
|
| - bool largest_observed_acked = MaybeUpdateRTT(ack_frame, ack_receive_time);
|
| + bool rtt_updated = MaybeUpdateRTT(ack_frame, ack_receive_time);
|
| DCHECK_GE(ack_frame.largest_observed, unacked_packets_.largest_observed());
|
| unacked_packets_.IncreaseLargestObserved(ack_frame.largest_observed);
|
|
|
| HandleAckForSentPackets(ack_frame);
|
| InvokeLossDetection(ack_receive_time);
|
| - MaybeInvokeCongestionEvent(largest_observed_acked, bytes_in_flight);
|
| + MaybeInvokeCongestionEvent(rtt_updated, bytes_in_flight);
|
| unacked_packets_.RemoveObsoletePackets();
|
|
|
| sustained_bandwidth_recorder_.RecordEstimate(
|
| @@ -222,7 +220,7 @@ void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
|
|
| // Anytime we are making forward progress and have a new RTT estimate, reset
|
| // the backoff counters.
|
| - if (largest_observed_acked) {
|
| + if (rtt_updated) {
|
| // Reset all retransmit counters any time a new packet is acked.
|
| consecutive_rto_count_ = 0;
|
| consecutive_tlp_count_ = 0;
|
| @@ -230,11 +228,9 @@ void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
| }
|
|
|
| if (debug_delegate_ != nullptr) {
|
| - debug_delegate_->OnIncomingAck(ack_frame,
|
| - ack_receive_time,
|
| + debug_delegate_->OnIncomingAck(ack_frame, ack_receive_time,
|
| unacked_packets_.largest_observed(),
|
| - largest_observed_acked,
|
| - GetLeastUnacked());
|
| + rtt_updated, GetLeastUnacked());
|
| }
|
| }
|
|
|
| @@ -750,6 +746,10 @@ void QuicSentPacketManager::InvokeLossDetection(QuicTime time) {
|
| bool QuicSentPacketManager::MaybeUpdateRTT(
|
| const QuicAckFrame& ack_frame,
|
| const QuicTime& ack_receive_time) {
|
| + // We rely on delta_time_largest_observed to compute an RTT estimate, so we
|
| + // only update rtt when the largest observed gets acked.
|
| + // NOTE: If ack is a truncated ack, then the largest observed is in fact
|
| + // unacked, and may cause an RTT sample to be taken.
|
| if (!unacked_packets_.IsUnacked(ack_frame.largest_observed)) {
|
| return false;
|
| }
|
|
|