Change the return value of CheckBandwidthGrowth to an enum from a bool. No functional change.
In preparation for cr/347265673
PiperOrigin-RevId: 347706489
Change-Id: I232dea9471e86e7a17904f073e397b22e40e3e5a
diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index eb29983..803d03f 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -369,14 +369,12 @@
return inflight_hi_ > headroom ? inflight_hi_ - headroom : 0;
}
-bool Bbr2NetworkModel::CheckBandwidthGrowth(
+Bbr2NetworkModel::BandwidthGrowth Bbr2NetworkModel::CheckBandwidthGrowth(
const Bbr2CongestionEvent& congestion_event) {
DCHECK(!full_bandwidth_reached_);
DCHECK(congestion_event.end_of_round_trip);
if (congestion_event.last_sample_is_app_limited) {
- // Return true such that when Params().always_exit_startup_on_excess_loss is
- // false, we'll not check excess loss, which is the behavior of QUIC BBRv1.
- return true;
+ return APP_LIMITED;
}
QuicBandwidth threshold =
@@ -388,19 +386,22 @@
<< " (Still growing) @ " << congestion_event.event_time;
full_bandwidth_baseline_ = MaxBandwidth();
rounds_without_bandwidth_growth_ = 0;
- return true;
+ return GROWTH;
}
++rounds_without_bandwidth_growth_;
- full_bandwidth_reached_ =
- rounds_without_bandwidth_growth_ >= Params().startup_full_bw_rounds;
+ BandwidthGrowth return_value = NO_GROWTH;
+ if (rounds_without_bandwidth_growth_ >= Params().startup_full_bw_rounds) {
+ full_bandwidth_reached_ = true;
+ return_value = EXIT;
+ }
QUIC_DVLOG(3) << " CheckBandwidthGrowth at end of round. max_bandwidth:"
<< MaxBandwidth() << ", threshold:" << threshold
<< " rounds_without_growth:" << rounds_without_bandwidth_growth_
<< " full_bw_reached:" << full_bandwidth_reached_ << " @ "
<< congestion_event.event_time;
- return false;
+ return return_value;
}
} // namespace quic
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index f02e22d..6ee2896 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -426,12 +426,22 @@
bool IsInflightTooHigh(const Bbr2CongestionEvent& congestion_event,
int64_t max_loss_events) const;
+ enum BandwidthGrowth {
+ APP_LIMITED = 0,
+ NO_GROWTH = 1,
+ GROWTH = 2,
+ EXIT = 3, // Too many rounds without bandwidth growth.
+ };
+
// Check bandwidth growth in the past round. Must be called at the end of a
// round.
- // Return true if the bandwidth growed as expected.
- // Return false otherwise, if enough rounds have elapsed without expected
+ // Return APP_LIMITED if the bandwidth sample was app-limited.
+ // Return GROWTH if the bandwidth grew as expected.
+ // Return NO_GROWTH if the bandwidth didn't increase enough.
+ // Return TOO_MANY_ROUNDS_WITH_NO_GROWTH if enough rounds have elapsed without
// growth, also sets |full_bandwidth_reached_| to true.
- bool CheckBandwidthGrowth(const Bbr2CongestionEvent& congestion_event);
+ BandwidthGrowth CheckBandwidthGrowth(
+ const Bbr2CongestionEvent& congestion_event);
QuicPacketNumber last_sent_packet() const {
return round_trip_counter_.last_sent_packet();
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 9486eb1..cd09ad9 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -51,9 +51,12 @@
if (!model_->full_bandwidth_reached() && congestion_event.end_of_round_trip) {
// TCP BBR always exits upon excessive losses. QUIC BBRv1 does not exits
// upon excessive losses, if enough bandwidth growth is observed.
- bool has_enough_bw_growth = model_->CheckBandwidthGrowth(congestion_event);
+ Bbr2NetworkModel::BandwidthGrowth bw_growth =
+ model_->CheckBandwidthGrowth(congestion_event);
- if (Params().always_exit_startup_on_excess_loss || !has_enough_bw_growth) {
+ if (Params().always_exit_startup_on_excess_loss ||
+ (bw_growth == Bbr2NetworkModel::NO_GROWTH ||
+ bw_growth == Bbr2NetworkModel::EXIT)) {
CheckExcessiveLosses(congestion_event);
}
}