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<<(