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);
     }
   }
