diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index a2c4245..d918730 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -260,7 +260,7 @@
       send_version_negotiation_packet_with_prefixed_lengths_(false),
       idle_timeout_connection_close_behavior_(
           ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET),
-      close_connection_after_five_rtos_(false),
+      num_rtos_for_blackhole_detection_(0),
       uber_received_packet_manager_(&stats_),
       stop_waiting_count_(0),
       pending_retransmission_alarm_(false),
@@ -327,7 +327,6 @@
       supports_release_time_(false),
       release_time_into_future_(QuicTime::Delta::Zero()),
       drop_incoming_retry_packets_(false),
-      max_consecutive_ptos_(0),
       bytes_received_before_address_validation_(0),
       bytes_sent_before_address_validation_(0),
       address_validated_(false),
@@ -572,18 +571,13 @@
   }
   uber_received_packet_manager_.SetFromConfig(config, perspective_);
   if (config.HasClientSentConnectionOption(k5RTO, perspective_)) {
-    close_connection_after_five_rtos_ = true;
+    num_rtos_for_blackhole_detection_ = 5;
   }
   if (sent_packet_manager_.pto_enabled()) {
-    if (config.HasClientSentConnectionOption(k6PTO, perspective_)) {
-      max_consecutive_ptos_ = 5;
-      QUIC_CODE_COUNT(quic_close_connection_6pto);
-    }
-    if (config.HasClientSentConnectionOption(k7PTO, perspective_)) {
-      max_consecutive_ptos_ = 6;
-    }
-    if (config.HasClientSentConnectionOption(k8PTO, perspective_)) {
-      max_consecutive_ptos_ = 7;
+    if (config.HasClientSentConnectionOption(k6PTO, perspective_) ||
+        config.HasClientSentConnectionOption(k7PTO, perspective_) ||
+        config.HasClientSentConnectionOption(k8PTO, perspective_)) {
+      num_rtos_for_blackhole_detection_ = 5;
     }
   }
   if (config.HasClientSentConnectionOption(kNSTP, perspective_)) {
@@ -4510,8 +4504,10 @@
   if (!ShouldDetectBlackhole()) {
     return QuicTime::Zero();
   }
+  DCHECK_LT(0u, num_rtos_for_blackhole_detection_);
   return clock_->ApproximateNow() +
-         sent_packet_manager_.GetNetworkBlackholeDelay();
+         sent_packet_manager_.GetNetworkBlackholeDelay(
+             num_rtos_for_blackhole_detection_);
 }
 
 bool QuicConnection::ShouldDetectBlackhole() const {
@@ -4522,8 +4518,7 @@
   if (!GetHandshakeTimeout().IsInfinite()) {
     return false;
   }
-  return close_connection_after_five_rtos_ ||
-         (sent_packet_manager_.pto_enabled() && max_consecutive_ptos_ > 0);
+  return num_rtos_for_blackhole_detection_ > 0;
 }
 
 QuicTime::Delta QuicConnection::GetHandshakeTimeout() const {
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 6782e06..969da12 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1420,9 +1420,8 @@
   // a connection close packet is sent, but not after.
   ConnectionCloseBehavior idle_timeout_connection_close_behavior_;
 
-  // When true, close the QUIC connection after 5 RTOs.  Due to the min rto of
-  // 200ms, this is over 5 seconds.
-  bool close_connection_after_five_rtos_;
+  // When > 0, close the QUIC connection after this number of RTOs.
+  size_t num_rtos_for_blackhole_detection_;
 
   UberReceivedPacketManager uber_received_packet_manager_;
 
@@ -1640,10 +1639,6 @@
   // Indicates whether received RETRY packets should be dropped.
   bool drop_incoming_retry_packets_;
 
-  // If max_consecutive_ptos_ > 0, close connection if consecutive PTOs is
-  // greater than max_consecutive_ptos.
-  size_t max_consecutive_ptos_;
-
   // Bytes received before address validation. Only used when
   // EnforceAntiAmplificationLimit returns true.
   size_t bytes_received_before_address_validation_;
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index ed0e691..31ac454 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -32,9 +32,6 @@
 // The path degrading delay is the sum of this number of consecutive RTO delays.
 const size_t kNumRetransmissionDelaysForPathDegradingDelay = 2;
 
-// The blachkhole delay is the sum of this number of consecutive RTO delays.
-const size_t kNumRetransmissionDelaysForBlackholeDelay = 5;
-
 // Ensure the handshake timer isnt't faster than 10ms.
 // This limits the tenth retransmitted packet to 10s after the initial CHLO.
 static const int64_t kMinHandshakeTimeoutMs = 10;
@@ -1140,9 +1137,10 @@
       max_tail_loss_probes_ + kNumRetransmissionDelaysForPathDegradingDelay);
 }
 
-const QuicTime::Delta QuicSentPacketManager::GetNetworkBlackholeDelay() const {
+const QuicTime::Delta QuicSentPacketManager::GetNetworkBlackholeDelay(
+    int8_t num_rtos_for_blackhole_detection) const {
   return GetNConsecutiveRetransmissionTimeoutDelay(
-      max_tail_loss_probes_ + kNumRetransmissionDelaysForBlackholeDelay);
+      max_tail_loss_probes_ + num_rtos_for_blackhole_detection);
 }
 
 const QuicTime::Delta QuicSentPacketManager::GetCryptoRetransmissionDelay()
diff --git a/quic/core/quic_sent_packet_manager.h b/quic/core/quic_sent_packet_manager.h
index 2513b82..ce8353d 100644
--- a/quic/core/quic_sent_packet_manager.h
+++ b/quic/core/quic_sent_packet_manager.h
@@ -212,7 +212,8 @@
   const QuicTime::Delta GetPathDegradingDelay() const;
 
   // Returns the current delay for detecting network blackhole.
-  const QuicTime::Delta GetNetworkBlackholeDelay() const;
+  const QuicTime::Delta GetNetworkBlackholeDelay(
+      int8_t num_rtos_for_blackhole_detection) const;
 
   const RttStats* GetRttStats() const { return &rtt_stats_; }
 
