diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index c134765..72ad66f 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -43,9 +43,13 @@
     const AckedPacketVector& /*acked_packets*/,
     const LostPacketVector& /*lost_packets*/,
     const Bbr2CongestionEvent& congestion_event) {
-  CheckFullBandwidthReached(congestion_event);
+  if (!full_bandwidth_reached_ && congestion_event.end_of_round_trip) {
+    if (!congestion_event.last_sample_is_app_limited) {
+      CheckBandwidthGrowth(congestion_event);
+    }
 
-  CheckExcessiveLosses(congestion_event);
+    CheckExcessiveLosses(congestion_event);
+  }
 
   model_->set_pacing_gain(Params().startup_pacing_gain);
   model_->set_cwnd_gain(Params().startup_cwnd_gain);
@@ -54,49 +58,43 @@
   return full_bandwidth_reached_ ? Bbr2Mode::DRAIN : Bbr2Mode::STARTUP;
 }
 
-void Bbr2StartupMode::CheckFullBandwidthReached(
+bool Bbr2StartupMode::CheckBandwidthGrowth(
     const Bbr2CongestionEvent& congestion_event) {
   DCHECK(!full_bandwidth_reached_);
-  if (full_bandwidth_reached_ || !congestion_event.end_of_round_trip ||
-      congestion_event.last_sample_is_app_limited) {
-    return;
-  }
+  DCHECK(congestion_event.end_of_round_trip);
+  DCHECK(!congestion_event.last_sample_is_app_limited);
 
   QuicBandwidth threshold =
       full_bandwidth_baseline_ * Params().startup_full_bw_threshold;
 
   if (model_->MaxBandwidth() >= threshold) {
-    QUIC_DVLOG(3)
-        << sender_
-        << " CheckFullBandwidthReached at end of round. max_bandwidth:"
-        << model_->MaxBandwidth() << ", threshold:" << threshold
-        << " (Still growing)  @ " << congestion_event.event_time;
+    QUIC_DVLOG(3) << sender_
+                  << " CheckBandwidthGrowth at end of round. max_bandwidth:"
+                  << model_->MaxBandwidth() << ", threshold:" << threshold
+                  << " (Still growing)  @ " << congestion_event.event_time;
     full_bandwidth_baseline_ = model_->MaxBandwidth();
     rounds_without_bandwidth_growth_ = 0;
-    return;
+    return true;
   }
 
   ++rounds_without_bandwidth_growth_;
   full_bandwidth_reached_ =
       rounds_without_bandwidth_growth_ >= Params().startup_full_bw_rounds;
   QUIC_DVLOG(3) << sender_
-                << " CheckFullBandwidthReached at end of round. max_bandwidth:"
+                << " CheckBandwidthGrowth at end of round. max_bandwidth:"
                 << model_->MaxBandwidth() << ", threshold:" << threshold
                 << " rounds_without_growth:" << rounds_without_bandwidth_growth_
                 << " full_bw_reached:" << full_bandwidth_reached_ << "  @ "
                 << congestion_event.event_time;
+
+  return false;
 }
 
 void Bbr2StartupMode::CheckExcessiveLosses(
     const Bbr2CongestionEvent& congestion_event) {
-  if (full_bandwidth_reached_) {
-    return;
-  }
+  DCHECK(congestion_event.end_of_round_trip);
 
-  // TODO(wub): In TCP, loss based exit only happens at end of a loss round, in
-  // QUIC we use the end of the normal round here. It is possible to exit after
-  // any congestion event, using information of the "rolling round".
-  if (!congestion_event.end_of_round_trip) {
+  if (full_bandwidth_reached_) {
     return;
   }
 
diff --git a/quic/core/congestion_control/bbr2_startup.h b/quic/core/congestion_control/bbr2_startup.h
index 378a4fd..75ec71e 100644
--- a/quic/core/congestion_control/bbr2_startup.h
+++ b/quic/core/congestion_control/bbr2_startup.h
@@ -58,7 +58,12 @@
  private:
   const Bbr2Params& Params() const;
 
-  void CheckFullBandwidthReached(const Bbr2CongestionEvent& congestion_event);
+  // 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
+  // growth, also sets |full_bandwidth_reached_| to true.
+  bool CheckBandwidthGrowth(const Bbr2CongestionEvent& congestion_event);
 
   void CheckExcessiveLosses(const Bbr2CongestionEvent& congestion_event);
 
