When switch from QUIC BBR to BBRv2, use BBR's cwnd as the initial cwnd of BBRv2. Protected by quic_reloadable_flag_quic_copy_bbr_cwnd_to_bbr2. PiperOrigin-RevId: 330988495 Change-Id: I101432ec8e685a27f310f39ab4aaab98779de420
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc index 4b2fac8..94cfc1f 100644 --- a/quic/core/congestion_control/bbr2_sender.cc +++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -73,8 +73,10 @@ /*cwnd_gain=*/1.0, /*pacing_gain=*/kInitialPacingGain, old_sender ? &old_sender->sampler_ : nullptr), - initial_cwnd_( - cwnd_limits().ApplyLimits(initial_cwnd_in_packets * kDefaultTCPMSS)), + initial_cwnd_(cwnd_limits().ApplyLimits( + (GetQuicReloadableFlag(quic_copy_bbr_cwnd_to_bbr2) && old_sender) + ? old_sender->GetCongestionWindow() + : (initial_cwnd_in_packets * kDefaultTCPMSS))), cwnd_(initial_cwnd_), pacing_rate_(kInitialPacingGain * QuicBandwidth::FromBytesAndTimeDelta( cwnd_, @@ -84,6 +86,10 @@ probe_bw_(this, &model_), probe_rtt_(this, &model_), last_sample_is_app_limited_(false) { + if (GetQuicReloadableFlag(quic_copy_bbr_cwnd_to_bbr2) && old_sender) { + QUIC_RELOADABLE_FLAG_COUNT(quic_copy_bbr_cwnd_to_bbr2); + } + QUIC_DVLOG(2) << this << " Initializing Bbr2Sender. mode:" << mode_ << ", PacingRate:" << pacing_rate_ << ", Cwnd:" << cwnd_ << ", CwndLimits:" << cwnd_limits() << " @ " << now;
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc index 0dcf427..2036eb1 100644 --- a/quic/core/congestion_control/bbr2_simulator_test.cc +++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -912,7 +912,7 @@ BbrSender old_sender(sender_connection()->clock()->Now(), sender_connection()->sent_packet_manager().GetRttStats(), GetUnackedMap(sender_connection()), - kDefaultInitialCwndPackets, + kDefaultInitialCwndPackets + 1, GetQuicFlag(FLAGS_quic_max_congestion_window), &random_, QuicConnectionPeer::GetStats(sender_connection())); @@ -927,7 +927,11 @@ } // Switch from |old_sender| to |sender_|. + const QuicByteCount old_sender_cwnd = old_sender.GetCongestionWindow(); sender_ = SetupBbr2Sender(&sender_endpoint_, &old_sender); + if (GetQuicReloadableFlag(quic_copy_bbr_cwnd_to_bbr2)) { + EXPECT_EQ(old_sender_cwnd, sender_->GetCongestionWindow()); + } // Send packets 5-7. now = now + QuicTime::Delta::FromMilliseconds(10);