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