| Index: net/quic/core/congestion_control/bbr_sender.cc
|
| diff --git a/net/quic/core/congestion_control/bbr_sender.cc b/net/quic/core/congestion_control/bbr_sender.cc
|
| index 04908c22f164ef21e946da6c2d2f21f439dddb24..5bdc63a1233bb84add24828782d5a17dc8be8591 100644
|
| --- a/net/quic/core/congestion_control/bbr_sender.cc
|
| +++ b/net/quic/core/congestion_control/bbr_sender.cc
|
| @@ -99,7 +99,9 @@ BbrSender::BbrSender(const QuicClock* clock,
|
| last_sample_is_app_limited_(false),
|
| recovery_state_(NOT_IN_RECOVERY),
|
| end_recovery_at_(0),
|
| - recovery_window_(max_congestion_window_) {
|
| + recovery_window_(max_congestion_window_),
|
| + enforce_startup_pacing_rate_increase_(
|
| + FLAGS_quic_bbr_faster_startup) {
|
| EnterStartupMode();
|
| }
|
|
|
| @@ -454,7 +456,24 @@ void BbrSender::CalculatePacingRate() {
|
| return;
|
| }
|
|
|
| - pacing_rate_ = pacing_gain_ * BandwidthEstimate();
|
| + QuicBandwidth target_rate = pacing_gain_ * BandwidthEstimate();
|
| +
|
| + // Ensure that the pacing rate does not drop too low during the startup.
|
| + if (!is_at_full_bandwidth_ && enforce_startup_pacing_rate_increase_) {
|
| + // Pace at the rate of initial_window / RTT as soon as RTT measurements are
|
| + // available.
|
| + if (pacing_rate_.IsZero() && !rtt_stats_->min_rtt().IsZero()) {
|
| + pacing_rate_ = QuicBandwidth::FromBytesAndTimeDelta(
|
| + initial_congestion_window_, rtt_stats_->min_rtt());
|
| + return;
|
| + }
|
| +
|
| + // Do not decrease the pacing rate during the startup.
|
| + pacing_rate_ = std::max(pacing_rate_, target_rate);
|
| + return;
|
| + }
|
| +
|
| + pacing_rate_ = target_rate;
|
| }
|
|
|
| void BbrSender::CalculateCongestionWindow(QuicByteCount bytes_acked) {
|
|
|