gfe-relnote: Implement BBRv2 for QUIC. Protected by --gfe2_reloadable_flag_quic_default_to_bbr_v2.
PiperOrigin-RevId: 257286231
Change-Id: Ieca742a1bf51290536535fad8e67ad9e3631fe36
diff --git a/quic/core/congestion_control/rtt_stats.cc b/quic/core/congestion_control/rtt_stats.cc
index 06bc60b..f4cbf38 100644
--- a/quic/core/congestion_control/rtt_stats.cc
+++ b/quic/core/congestion_control/rtt_stats.cc
@@ -29,6 +29,7 @@
mean_deviation_(QuicTime::Delta::Zero()),
initial_rtt_(QuicTime::Delta::FromMilliseconds(kInitialRttMs)),
max_ack_delay_(QuicTime::Delta::Zero()),
+ last_update_time_(QuicTime::Zero()),
ignore_max_ack_delay_(false) {}
void RttStats::ExpireSmoothedMetrics() {
@@ -41,7 +42,7 @@
// Updates the RTT based on a new sample.
void RttStats::UpdateRtt(QuicTime::Delta send_delta,
QuicTime::Delta ack_delay,
- QuicTime /*now*/) {
+ QuicTime now) {
if (send_delta.IsInfinite() || send_delta <= QuicTime::Delta::Zero()) {
QUIC_LOG_FIRST_N(WARNING, 3)
<< "Ignoring measured send_delta, because it's is "
@@ -50,6 +51,8 @@
return;
}
+ last_update_time_ = now;
+
// Update min_rtt_ first. min_rtt_ does not use an rtt_sample corrected for
// ack_delay but the raw observed send_delta, since poor clock granularity at
// the client may cause a high ack_delay to result in underestimation of the
diff --git a/quic/core/congestion_control/rtt_stats.h b/quic/core/congestion_control/rtt_stats.h
index 65791b1..7b58276 100644
--- a/quic/core/congestion_control/rtt_stats.h
+++ b/quic/core/congestion_control/rtt_stats.h
@@ -75,6 +75,8 @@
QuicTime::Delta max_ack_delay() const { return max_ack_delay_; }
+ QuicTime last_update_time() const { return last_update_time_; }
+
bool ignore_max_ack_delay() const { return ignore_max_ack_delay_; }
void set_ignore_max_ack_delay(bool ignore_max_ack_delay) {
@@ -100,6 +102,7 @@
// The maximum ack delay observed over the connection after excluding ack
// delays that were too large to be included in an RTT measurement.
QuicTime::Delta max_ack_delay_;
+ QuicTime last_update_time_;
// Whether to ignore the peer's max ack delay.
bool ignore_max_ack_delay_;
};
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index ec3e9df..38656b3 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -191,6 +191,18 @@
header.long_packet_type == RETRY);
}
+CongestionControlType GetDefaultCongestionControlType() {
+ if (GetQuicReloadableFlag(quic_default_to_bbr_v2)) {
+ return kBBRv2;
+ }
+
+ if (GetQuicReloadableFlag(quic_default_to_bbr)) {
+ return kBBR;
+ }
+
+ return kCubicBytes;
+}
+
} // namespace
#define ENDPOINT \
@@ -278,13 +290,12 @@
handshake_timeout_(QuicTime::Delta::Infinite()),
time_of_first_packet_sent_after_receiving_(QuicTime::Zero()),
time_of_last_received_packet_(clock_->ApproximateNow()),
- sent_packet_manager_(
- perspective,
- clock_,
- random_generator_,
- &stats_,
- GetQuicReloadableFlag(quic_default_to_bbr) ? kBBR : kCubicBytes,
- kNack),
+ sent_packet_manager_(perspective,
+ clock_,
+ random_generator_,
+ &stats_,
+ GetDefaultCongestionControlType(),
+ kNack),
version_negotiated_(false),
perspective_(perspective),
connected_(true),