gfe-relnote: In QUIC, use standard deviation to calculate PTO timeout. Protected by gfe2_reloadable_flag_quic_use_standard_deviation_for_pto.
PiperOrigin-RevId: 298487425
Change-Id: Ie29e4226796af161a9a5b777cd59486ea5cb5d3d
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index b6eae54..c8fd641 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -106,7 +106,8 @@
num_tlp_timeout_ptos_(0),
one_rtt_packet_acked_(false),
one_rtt_packet_sent_(false),
- first_pto_srtt_multiplier_(0) {
+ first_pto_srtt_multiplier_(0),
+ use_standard_deviation_for_pto_(false) {
SetSendAlgorithm(congestion_control_type);
}
@@ -198,6 +199,12 @@
first_pto_srtt_multiplier_ = 1.5;
}
}
+ if (GetQuicReloadableFlag(quic_use_standard_deviation_for_pto) &&
+ config.HasClientSentConnectionOption(kPSDA, perspective)) {
+ QUIC_RELOADABLE_FLAG_COUNT(quic_use_standard_deviation_for_pto);
+ use_standard_deviation_for_pto_ = true;
+ rtt_stats_.EnableStandardDeviationCalculation();
+ }
}
// Configure congestion control.
@@ -1143,10 +1150,12 @@
}
return 2 * rtt_stats_.initial_rtt();
}
+ const QuicTime::Delta rtt_var = use_standard_deviation_for_pto_
+ ? rtt_stats_.GetStandardOrMeanDeviation()
+ : rtt_stats_.mean_deviation();
QuicTime::Delta pto_delay =
rtt_stats_.smoothed_rtt() +
- std::max(pto_rttvar_multiplier_ * rtt_stats_.mean_deviation(),
- kAlarmGranularity) +
+ std::max(pto_rttvar_multiplier_ * rtt_var, kAlarmGranularity) +
(ShouldAddMaxAckDelay() ? peer_max_ack_delay_ : QuicTime::Delta::Zero());
pto_delay =
pto_delay * (1 << (consecutive_pto_count_ -