gfe-relnote: (n/a) In QUIC BBRv2, only update max bandwidth filter per ack event. Protected by existing flag --gfe2_reloadable_flag_quic_default_to_bbr_v2. PiperOrigin-RevId: 259612475 Change-Id: I7684d92d2af3e9407f93bc52181219be38802c26
diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc index 507290b..f5e3d18 100644 --- a/quic/core/congestion_control/bbr2_misc.cc +++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -143,8 +143,6 @@ : round_trip_counter_.OnPacketsAcked( acked_packets.rbegin()->packet_number); - // TODO(wub): Get the max bandwidth sample from all acked_packets, then use it - // to update max_bandwidth_filter_ once after the loop. for (const auto& packet : acked_packets) { const BandwidthSample bandwidth_sample = bandwidth_sampler_.OnPacketAcknowledged(event_time, @@ -163,7 +161,8 @@ } if (!bandwidth_sample.state_at_send.is_app_limited || bandwidth_sample.bandwidth > MaxBandwidth()) { - max_bandwidth_filter_.Update(bandwidth_sample.bandwidth); + congestion_event->sample_max_bandwidth = std::max( + congestion_event->sample_max_bandwidth, bandwidth_sample.bandwidth); } if (bandwidth_sample.bandwidth > bandwidth_latest_) { @@ -182,6 +181,9 @@ } min_rtt_filter_.Update(congestion_event->sample_min_rtt, event_time); + if (!congestion_event->sample_max_bandwidth.IsZero()) { + max_bandwidth_filter_.Update(congestion_event->sample_max_bandwidth); + } for (const LostPacket& packet : lost_packets) { const SendTimeState send_time_state =
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h index 08717a2..1b695e3 100644 --- a/quic/core/congestion_control/bbr2_misc.h +++ b/quic/core/congestion_control/bbr2_misc.h
@@ -246,6 +246,9 @@ // QuicTime::Delta::Infinite() if acked_packets is empty. QuicTime::Delta sample_min_rtt = QuicTime::Delta::Infinite(); + // Maximum bandwidth of all bandwidth samples from acked_packets. + QuicBandwidth sample_max_bandwidth = QuicBandwidth::Zero(); + // Send time state of the largest-numbered packet in this event. // SendTimeState send_time_state; struct {