gfe-relnote: False deprecate --gfe2_reloadable_flag_quic_bbr_startup_rate_reduction.

Two connection options, BBS4 and BBS5, both protected by this flag, are also deprecated.

PiperOrigin-RevId: 304209090
Change-Id: I101643d1f1aea527f503c3450c6f93b91cfb7750
diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index 2961680..ee74d70 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -122,8 +122,6 @@
       recovery_window_(max_congestion_window_),
       slower_startup_(false),
       rate_based_startup_(false),
-      startup_rate_reduction_multiplier_(0),
-      startup_bytes_lost_(0),
       enable_ack_aggregation_during_startup_(false),
       expire_ack_aggregation_in_startup_(false),
       drain_to_target_(false),
@@ -268,20 +266,6 @@
   if (config.HasClientRequestedIndependentOption(kBBS1, perspective)) {
     rate_based_startup_ = true;
   }
-  if (GetQuicReloadableFlag(quic_bbr_startup_rate_reduction) &&
-      config.HasClientRequestedIndependentOption(kBBS4, perspective)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_startup_rate_reduction, 1, 2);
-    rate_based_startup_ = true;
-    // Hits 1.25x pacing multiplier when ~2/3 CWND is lost.
-    startup_rate_reduction_multiplier_ = 1;
-  }
-  if (GetQuicReloadableFlag(quic_bbr_startup_rate_reduction) &&
-      config.HasClientRequestedIndependentOption(kBBS5, perspective)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_startup_rate_reduction, 2, 2);
-    rate_based_startup_ = true;
-    // Hits 1.25x pacing multiplier when ~1/3 CWND is lost.
-    startup_rate_reduction_multiplier_ = 2;
-  }
   if (GetQuicReloadableFlag(quic_bbr_mitigate_overly_large_bandwidth_sample)) {
     if (config.HasClientRequestedIndependentOption(kBWM3, perspective)) {
       bytes_lost_multiplier_with_network_parameters_adjusted_ = 3;
@@ -459,9 +443,6 @@
       stats_->slowstart_packets_lost += lost_packets.size();
       stats_->slowstart_bytes_lost += bytes_lost;
     }
-    if (startup_rate_reduction_multiplier_ != 0) {
-      startup_bytes_lost_ += bytes_lost;
-    }
   }
   excess_acked = sample.extra_acked;
   last_packet_send_state = sample.last_packet_send_state;
@@ -851,20 +832,6 @@
     return;
   }
 
-  // Slow the pacing rate in STARTUP by the bytes_lost / CWND.
-  if (startup_rate_reduction_multiplier_ != 0 && has_ever_detected_loss &&
-      has_non_app_limited_sample_) {
-    pacing_rate_ =
-        (1 - (startup_bytes_lost_ * startup_rate_reduction_multiplier_ * 1.0f /
-              congestion_window_)) *
-        target_rate;
-    // Ensure the pacing rate doesn't drop below the startup growth target times
-    // the bandwidth estimate.
-    pacing_rate_ =
-        std::max(pacing_rate_, kStartupGrowthTarget * BandwidthEstimate());
-    return;
-  }
-
   // Do not decrease the pacing rate during startup.
   pacing_rate_ = std::max(pacing_rate_, target_rate);
 }
diff --git a/quic/core/congestion_control/bbr_sender.h b/quic/core/congestion_control/bbr_sender.h
index 7aa4f69..eb8282a 100644
--- a/quic/core/congestion_control/bbr_sender.h
+++ b/quic/core/congestion_control/bbr_sender.h
@@ -377,11 +377,6 @@
   bool slower_startup_;
   // When true, disables packet conservation in STARTUP.
   bool rate_based_startup_;
-  // When non-zero, decreases the rate in STARTUP by the total number of bytes
-  // lost in STARTUP divided by CWND.
-  uint8_t startup_rate_reduction_multiplier_;
-  // Sum of bytes lost in STARTUP.
-  QuicByteCount startup_bytes_lost_;
 
   // When true, add the most recent ack aggregation measurement during STARTUP.
   bool enable_ack_aggregation_during_startup_;
diff --git a/quic/core/congestion_control/bbr_sender_test.cc b/quic/core/congestion_control/bbr_sender_test.cc
index 483f98b..6f91153 100644
--- a/quic/core/congestion_control/bbr_sender_test.cc
+++ b/quic/core/congestion_control/bbr_sender_test.cc
@@ -1081,108 +1081,6 @@
   EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited);
 }
 
-// Ensures no change in congestion window in STARTUP after loss, but that the
-// rate decreases.
-TEST_F(BbrSenderTest, SimpleTransferStartupRateReduction) {
-  SetQuicReloadableFlag(quic_bbr_startup_rate_reduction, true);
-  CreateSmallBufferSetup();
-
-  SetConnectionOption(kBBS4);
-
-  // Run until the full bandwidth is reached and check how many rounds it was.
-  bbr_sender_.AddBytesToTransfer(12 * 1024 * 1024);
-  bool used_conservation_cwnd = false;
-  bool simulator_result = simulator_.RunUntilOrTimeout(
-      [this, &used_conservation_cwnd]() {
-        if (!sender_->ExportDebugState().is_at_full_bandwidth &&
-            sender_->GetCongestionWindow() <
-                sender_->ExportDebugState().congestion_window) {
-          used_conservation_cwnd = true;
-        }
-        // Exit once a loss is hit.
-        return bbr_sender_.connection()->GetStats().packets_lost > 0 ||
-               sender_->ExportDebugState().is_at_full_bandwidth;
-      },
-      QuicTime::Delta::FromSeconds(5));
-  ASSERT_TRUE(simulator_result);
-  EXPECT_TRUE(sender_->InRecovery());
-  EXPECT_FALSE(used_conservation_cwnd);
-  EXPECT_EQ(BbrSender::STARTUP, sender_->ExportDebugState().mode);
-  EXPECT_NE(0u, bbr_sender_.connection()->GetStats().packets_lost);
-
-  // Lose each outstanding packet and the pacing rate decreases.
-  const QuicBandwidth original_pacing_rate = sender_->PacingRate(0);
-  QuicBandwidth pacing_rate = original_pacing_rate;
-  const QuicByteCount original_cwnd = sender_->GetCongestionWindow();
-  LostPacketVector lost_packets;
-  lost_packets.push_back(
-      LostPacket(QuicPacketNumber(), kMaxOutgoingPacketSize));
-  QuicPacketNumber largest_sent =
-      bbr_sender_.connection()->sent_packet_manager().GetLargestSentPacket();
-  for (QuicPacketNumber packet_number =
-           bbr_sender_.connection()->sent_packet_manager().GetLeastUnacked();
-       packet_number <= largest_sent; ++packet_number) {
-    lost_packets[0].packet_number = packet_number;
-    sender_->OnCongestionEvent(false, 0, clock_->Now(), {}, lost_packets);
-    EXPECT_EQ(original_cwnd, sender_->GetCongestionWindow());
-    EXPECT_GT(original_pacing_rate, sender_->PacingRate(0));
-    EXPECT_GE(pacing_rate, sender_->PacingRate(0));
-    EXPECT_LE(1.25 * sender_->BandwidthEstimate(), sender_->PacingRate(0));
-    pacing_rate = sender_->PacingRate(0);
-  }
-}
-
-// Ensures no change in congestion window in STARTUP after loss, but that the
-// rate decreases twice as fast as BBS4.
-TEST_F(BbrSenderTest, SimpleTransferDoubleStartupRateReduction) {
-  SetQuicReloadableFlag(quic_bbr_startup_rate_reduction, true);
-  CreateSmallBufferSetup();
-
-  SetConnectionOption(kBBS5);
-
-  // Run until the full bandwidth is reached and check how many rounds it was.
-  bbr_sender_.AddBytesToTransfer(12 * 1024 * 1024);
-  bool used_conservation_cwnd = false;
-  bool simulator_result = simulator_.RunUntilOrTimeout(
-      [this, &used_conservation_cwnd]() {
-        if (!sender_->ExportDebugState().is_at_full_bandwidth &&
-            sender_->GetCongestionWindow() <
-                sender_->ExportDebugState().congestion_window) {
-          used_conservation_cwnd = true;
-        }
-        // Exit once a loss is hit.
-        return bbr_sender_.connection()->GetStats().packets_lost > 0 ||
-               sender_->ExportDebugState().is_at_full_bandwidth;
-      },
-      QuicTime::Delta::FromSeconds(5));
-  ASSERT_TRUE(simulator_result);
-  EXPECT_TRUE(sender_->InRecovery());
-  EXPECT_FALSE(used_conservation_cwnd);
-  EXPECT_EQ(BbrSender::STARTUP, sender_->ExportDebugState().mode);
-  EXPECT_NE(0u, bbr_sender_.connection()->GetStats().packets_lost);
-
-  // Lose each outstanding packet and the pacing rate decreases.
-  const QuicBandwidth original_pacing_rate = sender_->PacingRate(0);
-  QuicBandwidth pacing_rate = original_pacing_rate;
-  const QuicByteCount original_cwnd = sender_->GetCongestionWindow();
-  LostPacketVector lost_packets;
-  lost_packets.push_back(
-      LostPacket(QuicPacketNumber(), kMaxOutgoingPacketSize));
-  QuicPacketNumber largest_sent =
-      bbr_sender_.connection()->sent_packet_manager().GetLargestSentPacket();
-  for (QuicPacketNumber packet_number =
-           bbr_sender_.connection()->sent_packet_manager().GetLeastUnacked();
-       packet_number <= largest_sent; ++packet_number) {
-    lost_packets[0].packet_number = packet_number;
-    sender_->OnCongestionEvent(false, 0, clock_->Now(), {}, lost_packets);
-    EXPECT_EQ(original_cwnd, sender_->GetCongestionWindow());
-    EXPECT_GT(original_pacing_rate, sender_->PacingRate(0));
-    EXPECT_GE(pacing_rate, sender_->PacingRate(0));
-    EXPECT_LE(1.25 * sender_->BandwidthEstimate(), sender_->PacingRate(0));
-    pacing_rate = sender_->PacingRate(0);
-  }
-}
-
 TEST_F(BbrSenderTest, DerivedPacingGainStartup) {
   CreateDefaultSetup();
 
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h
index b9ddae9..8e03bb3 100644
--- a/quic/core/crypto/crypto_protocol.h
+++ b/quic/core/crypto/crypto_protocol.h
@@ -88,10 +88,8 @@
                                                  // conservation in BBR STARTUP
 const QuicTag kBBS3 = TAG('B', 'B', 'S', '3');   // Slowstart packet
                                                  // conservation in BBR STARTUP
-const QuicTag kBBS4 = TAG('B', 'B', 'S', '4');   // Reduce rate in STARTUP by
-                                                 // bytes_lost / CWND.
-const QuicTag kBBS5 = TAG('B', 'B', 'S', '5');   // Reduce rate in STARTUP by
-                                                 // 2 * bytes_lost / CWND.
+const QuicTag kBBS4 = TAG('B', 'B', 'S', '4');   // DEPRECATED
+const QuicTag kBBS5 = TAG('B', 'B', 'S', '5');   // DEPRECATED
 const QuicTag kBBRR = TAG('B', 'B', 'R', 'R');   // Rate-based recovery in BBR
 const QuicTag kBBR1 = TAG('B', 'B', 'R', '1');   // DEPRECATED
 const QuicTag kBBR2 = TAG('B', 'B', 'R', '2');   // DEPRECATED