diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 5b9419f..8d274d0 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -3953,14 +3953,10 @@
   client_->WaitForResponse();
   EXPECT_EQ(kBarResponseBody, client_->response_body());
   QuicConnectionStats client_stats = GetClientConnection()->GetStats();
-  if (GetQuicReloadableFlag(quic_advance_ack_timeout_update)) {
-    // Client sends CHLO in packet 1 and retransmitted in packet 2. Because of
-    // the delay, server processes packet 2 and later drops packet 1. ACK is
-    // bundled with SHLO, such that 1 can be detected loss by time threshold.
-    EXPECT_LE(0u, client_stats.packets_lost);
-  } else {
-    EXPECT_EQ(0u, client_stats.packets_lost);
-  }
+  // Client sends CHLO in packet 1 and retransmitted in packet 2. Because of
+  // the delay, server processes packet 2 and later drops packet 1. ACK is
+  // bundled with SHLO, such that 1 can be detected loss by time threshold.
+  EXPECT_LE(0u, client_stats.packets_lost);
   EXPECT_TRUE(client_->client()->EarlyDataAccepted());
 }
 
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 2c601bb..1272359 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -333,9 +333,6 @@
       << "QuicConnection: attempted to use server connection ID "
       << server_connection_id << " which is invalid with version "
       << QuicVersionToString(transport_version());
-  if (advance_ack_timeout_update_) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_advance_ack_timeout_update);
-  }
   framer_.set_visitor(this);
   stats_.connection_creation_time = clock_->ApproximateNow();
   // TODO(ianswett): Supply the NetworkChangeVisitor as a constructor argument
@@ -1153,14 +1150,9 @@
                     ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
     return false;
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnStreamFrame(frame);
   stats_.stream_bytes_received += frame.data_length;
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   consecutive_retransmittable_on_wire_ping_count_ = 0;
   return connected_;
 }
@@ -1175,13 +1167,8 @@
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnCryptoFrame(frame);
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnCryptoFrame(frame);
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1363,11 +1350,7 @@
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPingFrame(frame);
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  } else {
-    should_last_packet_instigate_acks_ = true;
-  }
+  MaybeUpdateAckTimeout();
   return true;
 }
 
@@ -1409,13 +1392,8 @@
                   << "RST_STREAM_FRAME received for stream: " << frame.stream_id
                   << " with error: "
                   << QuicRstStreamErrorCodeToString(frame.error_code);
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnRstStream(frame);
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1446,11 +1424,7 @@
   // response.
   received_path_challenge_payloads_.push_back(frame.data_buffer);
 
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  } else {
-    should_last_packet_instigate_acks_ = true;
-  }
+  MaybeUpdateAckTimeout();
   return true;
 }
 
@@ -1458,11 +1432,7 @@
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnPathResponseFrame(frame);
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  } else {
-    should_last_packet_instigate_acks_ = true;
-  }
+  MaybeUpdateAckTimeout();
   if (!transmitted_connectivity_probe_payload_ ||
       *transmitted_connectivity_probe_payload_ != frame.data_buffer) {
     // Is not for the probe we sent, ignore it.
@@ -1549,13 +1519,8 @@
                   << frame.last_good_stream_id
                   << " and error: " << QuicErrorCodeToString(frame.error_code)
                   << " and reason: " << frame.reason_phrase;
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnGoAway(frame);
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1570,13 +1535,8 @@
     debug_visitor_->OnWindowUpdateFrame(frame, GetTimeOfLastReceivedPacket());
   }
   QUIC_DVLOG(1) << ENDPOINT << "WINDOW_UPDATE_FRAME received " << frame;
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnWindowUpdateFrame(frame);
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1613,14 +1573,9 @@
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnMessageFrame(frame);
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnMessageReceived(
       quiche::QuicheStringPiece(frame.data, frame.message_length));
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1647,13 +1602,8 @@
   if (debug_visitor_ != nullptr) {
     debug_visitor_->OnHandshakeDoneFrame(frame);
   }
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnHandshakeDoneReceived();
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1675,14 +1625,9 @@
   }
   QUIC_DLOG(INFO) << ENDPOINT
                   << "BLOCKED_FRAME received for stream: " << frame.stream_id;
-  if (advance_ack_timeout_update_) {
-    MaybeUpdateAckTimeout();
-  }
+  MaybeUpdateAckTimeout();
   visitor_->OnBlockedFrame(frame);
   stats_.blocked_frames_received++;
-  if (!advance_ack_timeout_update_) {
-    should_last_packet_instigate_acks_ = true;
-  }
   return connected_;
 }
 
@@ -1754,7 +1699,7 @@
   // For IETF QUIC, it is guaranteed that TLS will give connection the
   // corresponding write key before read key. In other words, connection should
   // never process a packet while an ACK for it cannot be encrypted.
-  if (!advance_ack_timeout_update_ || !should_last_packet_instigate_acks_) {
+  if (!should_last_packet_instigate_acks_) {
     uber_received_packet_manager_.MaybeUpdateAckTimeout(
         should_last_packet_instigate_acks_, last_decrypted_packet_level_,
         last_header_.packet_number, GetTimeOfLastReceivedPacket(),
@@ -4804,7 +4749,6 @@
 }
 
 void QuicConnection::MaybeUpdateAckTimeout() {
-  DCHECK(advance_ack_timeout_update_);
   if (should_last_packet_instigate_acks_) {
     return;
   }
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 2b1b8af..deb5ed2 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1712,9 +1712,6 @@
   const bool extend_idle_time_on_decryptable_packets_ =
       GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets);
 
-  const bool advance_ack_timeout_update_ =
-      GetQuicReloadableFlag(quic_advance_ack_timeout_update);
-
   const bool update_ack_alarm_in_send_all_pending_acks_ =
       GetQuicReloadableFlag(quic_update_ack_alarm_in_send_all_pending_acks);
 
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 864a824..600c28a 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -10976,15 +10976,9 @@
   }));
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
   ProcessDataPacket(1);
-  if (GetQuicReloadableFlag(quic_advance_ack_timeout_update)) {
-    // Verify ACK is bundled with WINDOW_UPDATE.
-    EXPECT_FALSE(writer_->ack_frames().empty());
-    EXPECT_FALSE(connection_.HasPendingAcks());
-  } else {
-    // ACK is pending.
-    EXPECT_TRUE(writer_->ack_frames().empty());
-    EXPECT_TRUE(connection_.HasPendingAcks());
-  }
+  // Verify ACK is bundled with WINDOW_UPDATE.
+  EXPECT_FALSE(writer_->ack_frames().empty());
+  EXPECT_FALSE(connection_.HasPendingAcks());
 }
 
 TEST_P(QuicConnectionTest, AckAlarmFiresEarly) {
