Add a kAFFE client option to enable the usage of AckFrequencyFrame, including
(1) Send min_ack_delay from client.
(2) Update client upon receiving AckFrequencyFrame.
Separate options will enable actual sending of AckFrequencyFrame and is in follow-up CLs.
PiperOrigin-RevId: 332049097
Change-Id: Ibc267ab580ce7ed5638fd2ad62226f67c1604a85
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index fdc4d7a..940a988 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -2976,12 +2976,20 @@
ProcessAckPacket(&frame2);
}
-TEST_P(QuicConnectionTest, AckSentEveryNthPacket) {
- connection_.set_ack_frequency(3);
+TEST_P(QuicConnectionTest, AckFrequencyUpdatedFromAckFrequencyFrame) {
+ if (!GetParam().version.HasIetfQuicFrames()) {
+ return;
+ }
+
+ QuicAckFrequencyFrame frame;
+ frame.packet_tolerance = 3;
+
+ connection_.set_can_receive_ack_frequency_frame();
+ connection_.OnDecryptedPacket(ENCRYPTION_FORWARD_SECURE);
+ connection_.OnAckFrequencyFrame(frame);
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(39);
-
// Expect 13 acks, every 3rd packet.
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(13);
// Receives packets 1 - 39.
@@ -2990,6 +2998,29 @@
}
}
+TEST_P(QuicConnectionTest,
+ AckFrequencyFrameOutsideApplicationDataNumberSpaceIsIgnored) {
+ if (!GetParam().version.HasIetfQuicFrames()) {
+ return;
+ }
+
+ QuicAckFrequencyFrame frame;
+ frame.packet_tolerance = 3;
+ connection_.set_can_receive_ack_frequency_frame();
+ connection_.OnDecryptedPacket(ENCRYPTION_HANDSHAKE);
+ connection_.OnAckFrequencyFrame(frame);
+ connection_.OnDecryptedPacket(ENCRYPTION_FORWARD_SECURE);
+
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+ EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(60);
+ // Expect 30 acks, every 2nd (instead of 3rd) packet.
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(30);
+ // Receives packets 1 - 60.
+ for (size_t i = 1; i <= 60; ++i) {
+ ProcessDataPacket(i);
+ }
+}
+
TEST_P(QuicConnectionTest, AckDecimationReducesAcks) {
const size_t kMinRttMs = 40;
RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats());