Internal QUICHE change
PiperOrigin-RevId: 283437153
Change-Id: I65c73671892ed5aff64bada9e6c8965192d926fb
diff --git a/quic/core/congestion_control/bbr2_probe_bw.cc b/quic/core/congestion_control/bbr2_probe_bw.cc
index f624f5c..4487cbf 100644
--- a/quic/core/congestion_control/bbr2_probe_bw.cc
+++ b/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -200,6 +200,15 @@
// long, as seen in some multi-sender simulator tests.
bool Bbr2ProbeBwMode::HasStayedLongEnoughInProbeDown(
const Bbr2CongestionEvent& congestion_event) const {
+ if (exit_probe_down_after_one_rtt_) {
+ QUIC_RELOADABLE_FLAG_COUNT(quic_bbr2_exit_probe_bw_down_after_one_rtt);
+ // Stay in PROBE_DOWN for at most the time of a min rtt, as it is done in
+ // BBRv1. The intention here is to figure out whether the performance
+ // regression in BBRv2 is because it stays in PROBE_DOWN for too long.
+ // TODO(wub): Consider exit after a full round instead, which typically
+ // indicates most(if not all) packets sent during PROBE_UP have been acked.
+ return HasPhaseLasted(model_->MinRtt(), congestion_event);
+ }
// The amount of time to stay in PROBE_DOWN, as a fraction of probe wait time.
const double kProbeWaitFraction = 0.2;
return HasCycleLasted(cycle_.probe_wait_time * kProbeWaitFraction,
diff --git a/quic/core/congestion_control/bbr2_probe_bw.h b/quic/core/congestion_control/bbr2_probe_bw.h
index d64bd65..45b5a73 100644
--- a/quic/core/congestion_control/bbr2_probe_bw.h
+++ b/quic/core/congestion_control/bbr2_probe_bw.h
@@ -11,6 +11,7 @@
#include "net/third_party/quiche/src/quic/core/quic_time.h"
#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
namespace quic {
@@ -121,6 +122,10 @@
bool last_cycle_probed_too_high_;
bool last_cycle_stopped_risky_probe_;
+
+ // Latched value of --quic_bbr2_exit_probe_bw_down_after_one_rtt.
+ const bool exit_probe_down_after_one_rtt_ =
+ GetQuicReloadableFlag(quic_bbr2_exit_probe_bw_down_after_one_rtt);
};
QUIC_EXPORT_PRIVATE std::ostream& operator<<(