Record encryption level for ACK and LOSS events in QUIC traces. Those are required to disambiguate packet numbers across different packet number spaces. gfe-relnote: n/a (not used in production) PiperOrigin-RevId: 302475643 Change-Id: I107555ecba3103cf333c21133c7cdddd9d7a4335
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index 4443bf6..4a041d8 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -369,6 +369,7 @@ void QuicSentPacketManager::PostProcessNewlyAckedPackets( QuicPacketNumber ack_packet_number, + EncryptionLevel ack_decrypted_level, const QuicAckFrame& ack_frame, QuicTime ack_receive_time, bool rtt_updated, @@ -413,9 +414,9 @@ } if (debug_delegate_ != nullptr) { - debug_delegate_->OnIncomingAck(ack_packet_number, ack_frame, - ack_receive_time, LargestAcked(ack_frame), - rtt_updated, GetLeastUnacked()); + debug_delegate_->OnIncomingAck( + ack_packet_number, ack_decrypted_level, ack_frame, ack_receive_time, + LargestAcked(ack_frame), rtt_updated, GetLeastUnacked()); } // Remove packets below least unacked from all_packets_acked_ and // last_ack_frame_. @@ -946,7 +947,8 @@ stats_->total_loss_detection_time + (time - info->sent_time); } if (debug_delegate_ != nullptr) { - debug_delegate_->OnPacketLoss(packet.packet_number, LOSS_RETRANSMISSION, + debug_delegate_->OnPacketLoss(packet.packet_number, + info->encryption_level, LOSS_RETRANSMISSION, time); } unacked_packets_.RemoveFromInFlight(info); @@ -1372,8 +1374,8 @@ acked_packet.receive_timestamp); } const bool acked_new_packet = !packets_acked_.empty(); - PostProcessNewlyAckedPackets(ack_packet_number, last_ack_frame_, - ack_receive_time, rtt_updated_, + PostProcessNewlyAckedPackets(ack_packet_number, ack_decrypted_level, + last_ack_frame_, ack_receive_time, rtt_updated_, prior_bytes_in_flight); return acked_new_packet ? PACKETS_NEWLY_ACKED : NO_PACKETS_NEWLY_ACKED;
diff --git a/quic/core/quic_sent_packet_manager.h b/quic/core/quic_sent_packet_manager.h index 8bff097..ed51a9c 100644 --- a/quic/core/quic_sent_packet_manager.h +++ b/quic/core/quic_sent_packet_manager.h
@@ -57,6 +57,7 @@ QuicByteCount /*byte_size*/) {} virtual void OnIncomingAck(QuicPacketNumber /*ack_packet_number*/, + EncryptionLevel /*ack_decrypted_level*/, const QuicAckFrame& /*ack_frame*/, QuicTime /*ack_receive_time*/, QuicPacketNumber /*largest_observed*/, @@ -65,6 +66,7 @@ } virtual void OnPacketLoss(QuicPacketNumber /*lost_packet_number*/, + EncryptionLevel /*encryption_level*/, TransmissionType /*transmission_type*/, QuicTime /*detection_time*/) {} @@ -470,6 +472,7 @@ // Called after packets have been marked handled with last received ack frame. void PostProcessNewlyAckedPackets(QuicPacketNumber ack_packet_number, + EncryptionLevel ack_decrypted_level, const QuicAckFrame& ack_frame, QuicTime ack_receive_time, bool rtt_updated,
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc index 19f5dd1..573a857 100644 --- a/quic/core/quic_sent_packet_manager_test.cc +++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -46,8 +46,9 @@ MOCK_METHOD2(OnSpuriousPacketRetransmission, void(TransmissionType transmission_type, QuicByteCount byte_size)); - MOCK_METHOD3(OnPacketLoss, + MOCK_METHOD4(OnPacketLoss, void(QuicPacketNumber lost_packet_number, + EncryptionLevel encryption_level, TransmissionType transmission_type, QuicTime detection_time)); }; @@ -599,7 +600,7 @@ SendDataPacket(5); ExpectAckAndLoss(true, 5, 2); EXPECT_CALL(debug_delegate, - OnPacketLoss(QuicPacketNumber(2), LOSS_RETRANSMISSION, _)); + OnPacketLoss(QuicPacketNumber(2), _, LOSS_RETRANSMISSION, _)); // Frames in all packets are acked. EXPECT_CALL(notifier_, IsFrameOutstanding(_)).WillRepeatedly(Return(false)); // Notify session that stream frame in packet 2 gets lost although it is @@ -1209,7 +1210,7 @@ // packets lost. for (int i = 1; i <= 99; ++i) { EXPECT_CALL(debug_delegate, - OnPacketLoss(QuicPacketNumber(i), LOSS_RETRANSMISSION, _)); + OnPacketLoss(QuicPacketNumber(i), _, LOSS_RETRANSMISSION, _)); } EXPECT_CALL(notifier_, IsFrameOutstanding(_)).WillRepeatedly(Return(true)); // Packets [1, 99] are considered as lost, although stream frame in packet
diff --git a/quic/core/quic_trace_visitor.cc b/quic/core/quic_trace_visitor.cc index 9d18843..edbce0c 100644 --- a/quic/core/quic_trace_visitor.cc +++ b/quic/core/quic_trace_visitor.cc
@@ -6,6 +6,7 @@ #include <string> +#include "net/third_party/quiche/src/quic/core/quic_types.h" #include "net/third_party/quiche/src/common/platform/api/quiche_endian.h" namespace quic { @@ -227,6 +228,7 @@ void QuicTraceVisitor::OnIncomingAck( QuicPacketNumber /*ack_packet_number*/, + EncryptionLevel ack_decrypted_level, const QuicAckFrame& ack_frame, QuicTime ack_receive_time, QuicPacketNumber /*largest_observed*/, @@ -236,6 +238,7 @@ event->set_time_us(ConvertTimestampToRecordedFormat(ack_receive_time)); event->set_packet_number(connection_->GetLargestReceivedPacket().ToUint64()); event->set_event_type(quic_trace::PACKET_RECEIVED); + event->set_encryption_level(EncryptionLevelToProto(ack_decrypted_level)); // TODO(vasilvv): consider removing this copy. QuicAckFrame copy_of_ack = ack_frame; @@ -244,6 +247,7 @@ } void QuicTraceVisitor::OnPacketLoss(QuicPacketNumber lost_packet_number, + EncryptionLevel encryption_level, TransmissionType /*transmission_type*/, QuicTime detection_time) { quic_trace::Event* event = trace_.add_events(); @@ -251,6 +255,7 @@ event->set_event_type(quic_trace::PACKET_LOST); event->set_packet_number(lost_packet_number.ToUint64()); PopulateTransportState(event->mutable_transport_state()); + event->set_encryption_level(EncryptionLevelToProto(encryption_level)); } void QuicTraceVisitor::OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame,
diff --git a/quic/core/quic_trace_visitor.h b/quic/core/quic_trace_visitor.h index 86d7198..c9732cf 100644 --- a/quic/core/quic_trace_visitor.h +++ b/quic/core/quic_trace_visitor.h
@@ -23,6 +23,7 @@ QuicTime sent_time) override; void OnIncomingAck(QuicPacketNumber ack_packet_number, + EncryptionLevel ack_decrypted_level, const QuicAckFrame& ack_frame, QuicTime ack_receive_time, QuicPacketNumber largest_observed, @@ -30,6 +31,7 @@ QuicPacketNumber least_unacked_sent_packet) override; void OnPacketLoss(QuicPacketNumber lost_packet_number, + EncryptionLevel encryption_level, TransmissionType transmission_type, QuicTime detection_time) override;
diff --git a/quic/core/quic_trace_visitor_test.cc b/quic/core/quic_trace_visitor_test.cc index 504d9d5..07bc4f2 100644 --- a/quic/core/quic_trace_visitor_test.cc +++ b/quic/core/quic_trace_visitor_test.cc
@@ -162,5 +162,21 @@ acks.rbegin()->transport_state().min_rtt_us()); } +TEST_F(QuicTraceVisitorTest, EncryptionLevels) { + for (const auto& event : trace_.events()) { + switch (event.event_type()) { + case quic_trace::PACKET_SENT: + case quic_trace::PACKET_RECEIVED: + case quic_trace::PACKET_LOST: + ASSERT_TRUE(event.has_encryption_level()); + ASSERT_NE(event.encryption_level(), quic_trace::ENCRYPTION_UNKNOWN); + break; + + default: + break; + } + } +} + } // namespace } // namespace quic