Only record timestamps for 1-RTT packets. PiperOrigin-RevId: 994023664
diff --git a/quiche/quic/core/uber_received_packet_manager.cc b/quiche/quic/core/uber_received_packet_manager.cc index b109a6f..13c6b6c 100644 --- a/quiche/quic/core/uber_received_packet_manager.cc +++ b/quiche/quic/core/uber_received_packet_manager.cc
@@ -237,9 +237,8 @@ << "Trying to enable QUIC receive timestamps for non-IETF QUIC"; return; } - for (auto& received_packet_manager : received_packet_managers_) { - received_packet_manager.set_save_timestamps(save_timestamps); - } + received_packet_managers_[APPLICATION_DATA].set_save_timestamps( + save_timestamps); } void UberReceivedPacketManager::OnAckFrequencyFrame(
diff --git a/quiche/quic/core/uber_received_packet_manager.h b/quiche/quic/core/uber_received_packet_manager.h index 4d60ce0..4ccda48 100644 --- a/quiche/quic/core/uber_received_packet_manager.h +++ b/quiche/quic/core/uber_received_packet_manager.h
@@ -7,6 +7,7 @@ #include "quiche/quic/core/frames/quic_ack_frequency_frame.h" #include "quiche/quic/core/quic_received_packet_manager.h" +#include "quiche/quic/core/quic_types.h" namespace quic {
diff --git a/quiche/quic/core/uber_received_packet_manager_test.cc b/quiche/quic/core/uber_received_packet_manager_test.cc index 831612b..cfa8677 100644 --- a/quiche/quic/core/uber_received_packet_manager_test.cc +++ b/quiche/quic/core/uber_received_packet_manager_test.cc
@@ -11,6 +11,7 @@ #include "quiche/quic/core/crypto/crypto_protocol.h" #include "quiche/quic/core/quic_connection_stats.h" #include "quiche/quic/core/quic_packet_number.h" +#include "quiche/quic/core/quic_time.h" #include "quiche/quic/core/quic_types.h" #include "quiche/quic/platform/api/quic_expect_bug.h" #include "quiche/quic/platform/api/quic_test.h" @@ -31,6 +32,10 @@ namespace { +using ::testing::ElementsAre; +using ::testing::IsEmpty; +using ::testing::Pair; + const bool kInstigateAck = true; const QuicTime::Delta kMinRttMs = QuicTime::Delta::FromMilliseconds(40); const QuicTime::Delta kDelayedAckTime = @@ -595,6 +600,35 @@ CheckAckTimeout(clock_.ApproximateNow() + kDelayedAckTime); } +TEST_F(UberReceivedPacketManagerTest, + SaveTimestampsOnlyForApplicationDataPacketNumberSpace) { + manager_->EnableMultiplePacketNumberSpacesSupport(Perspective::IS_SERVER); + manager_->set_save_timestamps(true); + + const QuicTime initial_time = + QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1); + const QuicTime handshake_time = + QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(2); + const QuicTime zero_rtt_time = + QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(3); + const QuicTime one_rtt_time = + QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(4); + RecordPacketReceipt(ENCRYPTION_INITIAL, 1, initial_time); + RecordPacketReceipt(ENCRYPTION_HANDSHAKE, 1, handshake_time); + // 0-RTT packets are still recorded, since the ACKs for 0-RTT packets are sent + // in 1-RTT. + RecordPacketReceipt(ENCRYPTION_ZERO_RTT, 1, zero_rtt_time); + RecordPacketReceipt(ENCRYPTION_FORWARD_SECURE, 2, one_rtt_time); + + EXPECT_THAT(manager_->GetAckFrame(INITIAL_DATA).received_packet_times, + IsEmpty()); + EXPECT_THAT(manager_->GetAckFrame(HANDSHAKE_DATA).received_packet_times, + IsEmpty()); + EXPECT_THAT(manager_->GetAckFrame(APPLICATION_DATA).received_packet_times, + ElementsAre(Pair(QuicPacketNumber(1), zero_rtt_time), + Pair(QuicPacketNumber(2), one_rtt_time))); +} + } // namespace } // namespace test } // namespace quic