Fix slowstart_count and slowstart_duration in QuicConnectionStats if QuicConnection switched send algorithm from BBRv1 to v2.

PiperOrigin-RevId: 398110994
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc
index ae0c884..ae6a6a6 100644
--- a/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -911,7 +911,10 @@
   ASSERT_FALSE(sender_->InSlowStart());
 
   const QuicConnectionStats& stats = sender_connection_stats();
-  EXPECT_EQ(1u, stats.slowstart_count);
+  // The test explicitly replaces the default-created send algorithm with the
+  // one created by the test. slowstart_count increaments every time a BBR
+  // sender is created.
+  EXPECT_GE(stats.slowstart_count, 1u);
   EXPECT_FALSE(stats.slowstart_duration.IsRunning());
   EXPECT_THAT(stats.slowstart_duration.GetTotalElapsedTime(),
               AllOf(Ge(QuicTime::Delta::FromMilliseconds(500)),
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 1bd89c6..f882c02 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -17,12 +17,12 @@
                                  Bbr2NetworkModel* model,
                                  QuicTime now)
     : Bbr2ModeBase(sender, model) {
-  // Clear some startup stats if |sender_->connection_stats_| has been used by
-  // another sender, which happens e.g. when QuicConnection switch send
-  // algorithms.
-  sender_->connection_stats_->slowstart_count = 1;
-  sender_->connection_stats_->slowstart_duration = QuicTimeAccumulator();
-  sender_->connection_stats_->slowstart_duration.Start(now);
+  // Increment, instead of reset startup stats, so we don't lose data recorded
+  // before QuicConnection switched send algorithm to BBRv2.
+  ++sender_->connection_stats_->slowstart_count;
+  if (!sender_->connection_stats_->slowstart_duration.IsRunning()) {
+    sender_->connection_stats_->slowstart_duration.Start(now);
+  }
   // Enter() is never called for Startup, so the gains needs to be set here.
   model_->set_pacing_gain(Params().startup_pacing_gain);
   model_->set_cwnd_gain(Params().startup_cwnd_gain);