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