gfe-relnote: In QUIC, populate the actual length of full padding frame in nonretransmittable_frames (of SerializedPacket). Protected by existing gfe2_reloadable_flag_quic_populate_nonretransmittable_frames.

PiperOrigin-RevId: 275918768
Change-Id: I8004cfcfe2c7b6ec750905505d7df453ea1c849c
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index f2e9789..c93595e 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -1407,7 +1407,15 @@
   } else {
     if (populate_nonretransmittable_frames_ &&
         !QuicUtils::IsRetransmittableFrame(frame.type)) {
-      packet_.nonretransmittable_frames.push_back(frame);
+      if (frame.type == PADDING_FRAME &&
+          frame.padding_frame.num_padding_bytes == -1) {
+        // Populate the actual length of full padding frame, such that one can
+        // know how much padding is actually added.
+        packet_.nonretransmittable_frames.push_back(
+            QuicFrame(QuicPaddingFrame(frame_len)));
+      } else {
+        packet_.nonretransmittable_frames.push_back(frame);
+      }
     }
     queued_frames_.push_back(frame);
   }
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index 2d0d5b3..4fe07ad 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -2437,6 +2437,11 @@
   ASSERT_EQ(2u, serialized.nonretransmittable_frames.size());
   EXPECT_EQ(ACK_FRAME, serialized.nonretransmittable_frames[0].type);
   EXPECT_EQ(PADDING_FRAME, serialized.nonretransmittable_frames[1].type);
+  // Verify full padding frame is translated to a padding frame with actual
+  // bytes of padding.
+  EXPECT_LT(
+      0,
+      serialized.nonretransmittable_frames[1].padding_frame.num_padding_bytes);
   frames_.clear();
 
   // Serialize another packet with the same frames.