| 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 aaa982c907c9e10cb82866be6e856f6266fe1923..3f54f9b225b213b60cdd038dd311947f4a09c22c 100644
|
| --- a/net/quic/quic_sent_packet_manager.cc
|
| +++ b/net/quic/quic_sent_packet_manager.cc
|
| @@ -100,6 +100,7 @@ QuicSentPacketManager::QuicSentPacketManager(
|
| pending_timer_transmission_count_(0),
|
| max_tail_loss_probes_(kDefaultMaxTailLossProbes),
|
| using_pacing_(false),
|
| + use_new_rto_(false),
|
| handshake_confirmed_(false) {
|
| }
|
|
|
| @@ -154,6 +155,9 @@ void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) {
|
| if (HasClientSentConnectionOption(config, kNTLP)) {
|
| max_tail_loss_probes_ = 0;
|
| }
|
| + if (HasClientSentConnectionOption(config, kNRTO)) {
|
| + use_new_rto_ = true;
|
| + }
|
| if (config.HasReceivedConnectionOptions() &&
|
| ContainsQuicTag(config.ReceivedConnectionOptions(), kTIME)) {
|
| loss_algorithm_.reset(LossDetectionInterface::Create(kTime));
|
| @@ -216,7 +220,7 @@ void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
| HandleAckForSentPackets(ack_frame);
|
| InvokeLossDetection(ack_receive_time);
|
| // Ignore losses in RTO mode.
|
| - if (FLAGS_quic_use_new_rto && consecutive_rto_count_ > 0) {
|
| + if (FLAGS_quic_use_new_rto && consecutive_rto_count_ > 0 && !use_new_rto_) {
|
| packets_lost_.clear();
|
| }
|
| MaybeInvokeCongestionEvent(rtt_updated, bytes_in_flight);
|
| @@ -247,7 +251,9 @@ void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame,
|
| // a spurious RTO from happening again.
|
| rtt_stats_.ExpireSmoothedMetrics();
|
| } else {
|
| - send_algorithm_->OnRetransmissionTimeout(true);
|
| + if (!use_new_rto_) {
|
| + send_algorithm_->OnRetransmissionTimeout(true);
|
| + }
|
| }
|
| }
|
| // Reset all retransmit counters any time a new packet is acked.
|
|
|