Simplify the usage of ack_frequency and ack_delay in quic_received_packet_manager. flag protected by gfe2_reloadable_flag_quic_simplify_received_packet_manager_ack.

A few other no-op changes:
1) Renamed ack_frequency_before_decimation to ack_frequency_.
2) Removed a few unused getters in uber_received_packet_manager and quic_connection.

PiperOrigin-RevId: 323473745
Change-Id: I51f119d048271543b5a7ae000d3d4bcffc3679ab
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 9a74a33..f8e3f6e 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -4601,14 +4601,9 @@
       new_value);
 }
 
-size_t QuicConnection::ack_frequency_before_ack_decimation() const {
-  return uber_received_packet_manager_.ack_frequency_before_ack_decimation();
-}
-
-void QuicConnection::set_ack_frequency_before_ack_decimation(size_t new_value) {
+void QuicConnection::set_ack_frequency(size_t new_value) {
   DCHECK_GT(new_value, 0u);
-  uber_received_packet_manager_.set_ack_frequency_before_ack_decimation(
-      new_value);
+  uber_received_packet_manager_.set_ack_frequency(new_value);
 }
 
 const QuicAckFrame& QuicConnection::ack_frame() const {
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 9439adf..32eabef 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -897,8 +897,7 @@
   size_t min_received_before_ack_decimation() const;
   void set_min_received_before_ack_decimation(size_t new_value);
 
-  size_t ack_frequency_before_ack_decimation() const;
-  void set_ack_frequency_before_ack_decimation(size_t new_value);
+  void set_ack_frequency(size_t new_value);
 
   // If |defer| is true, configures the connection to defer sending packets in
   // response to an ACK to the SendAlarm. If |defer| is false, packets may be
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index ac301c2..5db917f 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -2936,7 +2936,7 @@
 }
 
 TEST_P(QuicConnectionTest, AckSentEveryNthPacket) {
-  connection_.set_ack_frequency_before_ack_decimation(3);
+  connection_.set_ack_frequency(3);
 
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
   EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(39);
diff --git a/quic/core/quic_received_packet_manager.cc b/quic/core/quic_received_packet_manager.cc
index 324767c..9cc6c29 100644
--- a/quic/core/quic_received_packet_manager.cc
+++ b/quic/core/quic_received_packet_manager.cc
@@ -44,8 +44,7 @@
       ack_mode_(ACK_DECIMATION),
       num_retransmittable_packets_received_since_last_ack_sent_(0),
       min_received_before_ack_decimation_(kMinReceivedBeforeAckDecimation),
-      ack_frequency_before_ack_decimation_(
-          kDefaultRetransmittablePacketsBeforeAck),
+      ack_frequency_(kDefaultRetransmittablePacketsBeforeAck),
       ack_decimation_delay_(kAckDecimationDelay),
       unlimited_ack_decimation_(false),
       fast_ack_after_quiescence_(false),
@@ -216,6 +215,38 @@
          ack_frame_.packets.Min() >= peer_least_packet_awaiting_ack_);
 }
 
+QuicTime::Delta QuicReceivedPacketManager::GetMaxAckDelay(
+    QuicPacketNumber last_received_packet_number,
+    const RttStats& rtt_stats) const {
+  DCHECK(simplify_received_packet_manager_ack_);
+  if (last_received_packet_number <
+      PeerFirstSendingPacketNumber() + min_received_before_ack_decimation_) {
+    return local_max_ack_delay_;
+  }
+
+  // Wait for the minimum of the ack decimation delay or the delayed ack time
+  // before sending an ack.
+  QuicTime::Delta ack_delay = std::min(
+      local_max_ack_delay_, rtt_stats.min_rtt() * ack_decimation_delay_);
+  if (GetQuicReloadableFlag(quic_ack_delay_alarm_granularity)) {
+    QUIC_RELOADABLE_FLAG_COUNT(quic_ack_delay_alarm_granularity);
+    ack_delay = std::max(ack_delay, kAlarmGranularity);
+  }
+  return ack_delay;
+}
+
+void QuicReceivedPacketManager::MaybeUpdateAckFrequency(
+    QuicPacketNumber last_received_packet_number) {
+  DCHECK(simplify_received_packet_manager_ack_);
+  if (last_received_packet_number <
+      PeerFirstSendingPacketNumber() + min_received_before_ack_decimation_) {
+    return;
+  }
+  ack_frequency_ = unlimited_ack_decimation_
+                       ? std::numeric_limits<size_t>::max()
+                       : kMaxRetransmittablePacketsBeforeAck;
+}
+
 void QuicReceivedPacketManager::MaybeUpdateAckTimeout(
     bool should_last_packet_instigate_acks,
     QuicPacketNumber last_received_packet_number,
@@ -240,6 +271,26 @@
   }
 
   ++num_retransmittable_packets_received_since_last_ack_sent_;
+
+  if (simplify_received_packet_manager_ack_) {
+    QUIC_RELOADABLE_FLAG_COUNT(quic_simplify_received_packet_manager_ack);
+    MaybeUpdateAckFrequency(last_received_packet_number);
+    if (num_retransmittable_packets_received_since_last_ack_sent_ >=
+        ack_frequency_) {
+      ack_timeout_ = now;
+      return;
+    }
+
+    if (HasNewMissingPackets()) {
+      ack_timeout_ = now;
+      return;
+    }
+
+    MaybeUpdateAckTimeoutTo(
+        now + GetMaxAckDelay(last_received_packet_number, *rtt_stats));
+    return;
+  }
+
   if (ack_mode_ != TCP_ACKING &&
       last_received_packet_number >= PeerFirstSendingPacketNumber() +
                                          min_received_before_ack_decimation_) {
@@ -269,7 +320,7 @@
   } else {
     // Ack with a timer or every 2 packets by default.
     if (num_retransmittable_packets_received_since_last_ack_sent_ >=
-        ack_frequency_before_ack_decimation_) {
+        ack_frequency_) {
       ack_timeout_ = now;
     } else if (fast_ack_after_quiescence_ &&
                (now - time_of_previous_received_packet_) >
diff --git a/quic/core/quic_received_packet_manager.h b/quic/core/quic_received_packet_manager.h
index a350462..5f5525a 100644
--- a/quic/core/quic_received_packet_manager.h
+++ b/quic/core/quic_received_packet_manager.h
@@ -113,15 +113,11 @@
     min_received_before_ack_decimation_ = new_value;
   }
 
-  size_t ack_frequency_before_ack_decimation() const {
-    return ack_frequency_before_ack_decimation_;
-  }
-  void set_ack_frequency_before_ack_decimation(size_t new_value) {
+  void set_ack_frequency(size_t new_value) {
     DCHECK_GT(new_value, 0u);
-    ack_frequency_before_ack_decimation_ = new_value;
+    ack_frequency_ = new_value;
   }
 
-  QuicTime::Delta local_max_ack_delay() const { return local_max_ack_delay_; }
   void set_local_max_ack_delay(QuicTime::Delta local_max_ack_delay) {
     local_max_ack_delay_ = local_max_ack_delay;
   }
@@ -136,6 +132,12 @@
   // Sets ack_timeout_ to |time| if ack_timeout_ is not initialized or > time.
   void MaybeUpdateAckTimeoutTo(QuicTime time);
 
+  // Maybe update ack_frequency_ when condition meets.
+  void MaybeUpdateAckFrequency(QuicPacketNumber last_received_packet_number);
+
+  QuicTime::Delta GetMaxAckDelay(QuicPacketNumber last_received_packet_number,
+                                 const RttStats& rtt_stats) const;
+
   // Least packet number of the the packet sent by the peer for which it
   // hasn't received an ack.
   QuicPacketNumber peer_least_packet_awaiting_ack_;
@@ -168,8 +170,8 @@
   QuicPacketCount num_retransmittable_packets_received_since_last_ack_sent_;
   // Ack decimation will start happening after this many packets are received.
   size_t min_received_before_ack_decimation_;
-  // Before ack decimation starts (if enabled), we ack every n-th packet.
-  size_t ack_frequency_before_ack_decimation_;
+  // Ack every n-th packet.
+  size_t ack_frequency_;
   // The max delay in fraction of min_rtt to use when sending decimated acks.
   float ack_decimation_delay_;
   // When true, removes ack decimation's max number of packets(10) before
@@ -200,6 +202,10 @@
   const bool remove_unused_ack_options_ =
       GetQuicReloadableFlag(quic_remove_unused_ack_options);
 
+  const bool simplify_received_packet_manager_ack_ =
+      remove_unused_ack_options_ &&
+      GetQuicReloadableFlag(quic_simplify_received_packet_manager_ack);
+
   // Last sent largest acked, which gets updated when ACK was successfully sent.
   QuicPacketNumber last_sent_largest_acked_;
 };
diff --git a/quic/core/quic_received_packet_manager_test.cc b/quic/core/quic_received_packet_manager_test.cc
index 56b6643..ca56662 100644
--- a/quic/core/quic_received_packet_manager_test.cc
+++ b/quic/core/quic_received_packet_manager_test.cc
@@ -352,7 +352,7 @@
 
 TEST_P(QuicReceivedPacketManagerTest, AckSentEveryNthPacket) {
   EXPECT_FALSE(HasPendingAck());
-  received_manager_.set_ack_frequency_before_ack_decimation(3);
+  received_manager_.set_ack_frequency(3);
 
   // Receives packets 1 - 39.
   for (size_t i = 1; i <= 39; ++i) {
diff --git a/quic/core/uber_received_packet_manager.cc b/quic/core/uber_received_packet_manager.cc
index 723ac30..b017a84 100644
--- a/quic/core/uber_received_packet_manager.cc
+++ b/quic/core/uber_received_packet_manager.cc
@@ -193,14 +193,9 @@
   }
 }
 
-size_t UberReceivedPacketManager::ack_frequency_before_ack_decimation() const {
-  return received_packet_managers_[0].ack_frequency_before_ack_decimation();
-}
-
-void UberReceivedPacketManager::set_ack_frequency_before_ack_decimation(
-    size_t new_value) {
+void UberReceivedPacketManager::set_ack_frequency(size_t new_value) {
   for (auto& received_packet_manager : received_packet_managers_) {
-    received_packet_manager.set_ack_frequency_before_ack_decimation(new_value);
+    received_packet_manager.set_ack_frequency(new_value);
   }
 }
 
@@ -221,13 +216,6 @@
   }
 }
 
-QuicTime::Delta UberReceivedPacketManager::max_ack_delay() {
-  if (!supports_multiple_packet_number_spaces_) {
-    return received_packet_managers_[0].local_max_ack_delay();
-  }
-  return received_packet_managers_[APPLICATION_DATA].local_max_ack_delay();
-}
-
 void UberReceivedPacketManager::set_max_ack_delay(
     QuicTime::Delta max_ack_delay) {
   if (!supports_multiple_packet_number_spaces_) {
diff --git a/quic/core/uber_received_packet_manager.h b/quic/core/uber_received_packet_manager.h
index d76ce13..9cfa247 100644
--- a/quic/core/uber_received_packet_manager.h
+++ b/quic/core/uber_received_packet_manager.h
@@ -78,8 +78,7 @@
   size_t min_received_before_ack_decimation() const;
   void set_min_received_before_ack_decimation(size_t new_value);
 
-  size_t ack_frequency_before_ack_decimation() const;
-  void set_ack_frequency_before_ack_decimation(size_t new_value);
+  void set_ack_frequency(size_t new_value);
 
   bool supports_multiple_packet_number_spaces() const {
     return supports_multiple_packet_number_spaces_;
@@ -91,8 +90,7 @@
 
   void set_max_ack_ranges(size_t max_ack_ranges);
 
-  // Get and set the max ack delay to use for application data.
-  QuicTime::Delta max_ack_delay();
+  // Set the max ack delay to use for application data.
   void set_max_ack_delay(QuicTime::Delta max_ack_delay);
 
   void set_save_timestamps(bool save_timestamps);
diff --git a/quic/core/uber_received_packet_manager_test.cc b/quic/core/uber_received_packet_manager_test.cc
index 41dadcb..1b5a196 100644
--- a/quic/core/uber_received_packet_manager_test.cc
+++ b/quic/core/uber_received_packet_manager_test.cc
@@ -299,7 +299,7 @@
 
 TEST_F(UberReceivedPacketManagerTest, AckSentEveryNthPacket) {
   EXPECT_FALSE(HasPendingAck());
-  manager_->set_ack_frequency_before_ack_decimation(3);
+  manager_->set_ack_frequency(3);
 
   // Receives packets 1 - 39.
   for (size_t i = 1; i <= 39; ++i) {