diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index b6ea5b1..90a1739 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -3052,12 +3052,6 @@
     packet_send_time = packet_send_time + result.send_time_offset;
   }
 
-  if (!sent_packet_manager_.give_sent_packet_to_debug_visitor_after_sent() &&
-      debug_visitor_ != nullptr) {
-    // Pass the write result to the visitor.
-    debug_visitor_->OnPacketSent(*packet, packet->transmission_type,
-                                 packet_send_time);
-  }
   if (IsRetransmittable(*packet) == HAS_RETRANSMITTABLE_DATA &&
       !is_termination_packet) {
     // Start blackhole/path degrading detections if the sent packet is not
@@ -3100,10 +3094,7 @@
       << ENDPOINT
       << "Trying to start blackhole detection without no bytes in flight";
 
-  if (sent_packet_manager_.give_sent_packet_to_debug_visitor_after_sent() &&
-      debug_visitor_ != nullptr) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(
-        quic_give_sent_packet_to_debug_visitor_after_sent, 1, 2);
+  if (debug_visitor_ != nullptr) {
     if (sent_packet_manager_.unacked_packets().empty()) {
       QUIC_BUG << "Unacked map is empty right after packet is sent";
     } else {
@@ -4492,21 +4483,12 @@
     return false;
   }
 
-  if (!sent_packet_manager_.give_sent_packet_to_debug_visitor_after_sent() &&
-      debug_visitor_ != nullptr) {
-    debug_visitor_->OnPacketSent(*packet, packet->transmission_type,
-                                 packet_send_time);
-  }
-
   // Send in currrent path. Call OnPacketSent regardless of the write result.
   sent_packet_manager_.OnPacketSent(packet.get(), packet_send_time,
                                     packet->transmission_type,
                                     NO_RETRANSMITTABLE_DATA, measure_rtt);
 
-  if (sent_packet_manager_.give_sent_packet_to_debug_visitor_after_sent() &&
-      debug_visitor_ != nullptr) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(
-        quic_give_sent_packet_to_debug_visitor_after_sent, 2, 2);
+  if (debug_visitor_ != nullptr) {
     if (sent_packet_manager_.unacked_packets().empty()) {
       QUIC_BUG << "Unacked map is empty right after packet is sent";
     } else {
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 599099d..599331d 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -225,12 +225,6 @@
   ~QuicConnectionDebugVisitor() override {}
 
   // Called when a packet has been sent.
-  // TODO(wub): Delete when deprecating
-  // --quic_give_sent_packet_to_debug_visitor_after_sent.
-  virtual void OnPacketSent(const SerializedPacket& /*serialized_packet*/,
-                            TransmissionType /*transmission_type*/,
-                            QuicTime /*sent_time*/) {}
-
   virtual void OnPacketSent(QuicPacketNumber /*packet_number*/,
                             QuicPacketLength /*packet_length*/,
                             bool /*has_crypto_handshake*/,
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 93169ea..a329404 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -6768,20 +6768,10 @@
   MockQuicConnectionDebugVisitor debug_visitor;
   connection_.set_debug_visitor(&debug_visitor);
 
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(1);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
   connection_.SendStreamDataWithString(1, "foo", 0, NO_FIN);
 
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(1);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
   connection_.SendConnectivityProbingPacket(writer_.get(),
                                             connection_.peer_address());
 }
@@ -6908,12 +6898,7 @@
   CongestionBlockWrites();
   connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(1);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
   EXPECT_CALL(debug_visitor, OnPingSent()).Times(1);
   connection_.SendControlFrame(QuicFrame(QuicPingFrame(1)));
   EXPECT_FALSE(connection_.HasQueuedData());
@@ -6925,12 +6910,7 @@
 
   connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(1);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
   EXPECT_EQ(0u, connection_.GetStats().blocked_frames_sent);
   connection_.SendControlFrame(QuicFrame(new QuicBlockedFrame(1, 3)));
   EXPECT_EQ(1u, connection_.GetStats().blocked_frames_sent);
@@ -6946,12 +6926,7 @@
   QuicBlockedFrame blocked(1, 3);
 
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(0);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(0);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(0);
   EXPECT_EQ(0u, connection_.GetStats().blocked_frames_sent);
   connection_.SendControlFrame(QuicFrame(&blocked));
   EXPECT_EQ(0u, connection_.GetStats().blocked_frames_sent);
@@ -7682,45 +7657,26 @@
   }
   // Expect them retransmitted in cyclic order (foo, bar, test, foo, bar...).
   QuicPacketCount sent_count = 0;
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _))
-        .WillRepeatedly(
-            Invoke([this, &sent_count](QuicPacketNumber, QuicPacketLength, bool,
-                                       TransmissionType, EncryptionLevel,
-                                       const QuicFrames&, const QuicFrames&,
-                                       QuicTime) {
-              ASSERT_EQ(1u, writer_->stream_frames().size());
-              if (connection_.version().CanSendCoalescedPackets()) {
-                // There is a delay of sending coalesced packet, so (6, 0, 3, 6,
-                // 0...).
-                EXPECT_EQ(3 * ((sent_count + 2) % 3),
-                          writer_->stream_frames()[0]->offset);
-              } else {
-                // Identify the frames by stream offset (0, 3, 6, 0, 3...).
-                EXPECT_EQ(3 * (sent_count % 3),
-                          writer_->stream_frames()[0]->offset);
-              }
-              sent_count++;
-            }));
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _))
-        .WillRepeatedly(Invoke([this, &sent_count](const SerializedPacket&,
-                                                   TransmissionType, QuicTime) {
-          ASSERT_EQ(1u, writer_->stream_frames().size());
-          if (connection_.version().CanSendCoalescedPackets()) {
-            // There is a delay of sending coalesced packet, so (6, 0, 3, 6,
-            // 0...).
-            EXPECT_EQ(3 * ((sent_count + 2) % 3),
-                      writer_->stream_frames()[0]->offset);
-          } else {
-            // Identify the frames by stream offset (0, 3, 6, 0, 3...).
-            EXPECT_EQ(3 * (sent_count % 3),
-                      writer_->stream_frames()[0]->offset);
-          }
-          sent_count++;
-        }));
-  }
+
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _))
+      .WillRepeatedly(Invoke(
+          [this, &sent_count](QuicPacketNumber, QuicPacketLength, bool,
+                              TransmissionType, EncryptionLevel,
+                              const QuicFrames&, const QuicFrames&, QuicTime) {
+            ASSERT_EQ(1u, writer_->stream_frames().size());
+            if (connection_.version().CanSendCoalescedPackets()) {
+              // There is a delay of sending coalesced packet, so (6, 0, 3, 6,
+              // 0...).
+              EXPECT_EQ(3 * ((sent_count + 2) % 3),
+                        writer_->stream_frames()[0]->offset);
+            } else {
+              // Identify the frames by stream offset (0, 3, 6, 0, 3...).
+              EXPECT_EQ(3 * (sent_count % 3),
+                        writer_->stream_frames()[0]->offset);
+            }
+            sent_count++;
+          }));
+
   EXPECT_CALL(*send_algorithm_, ShouldSendProbingPacket())
       .WillRepeatedly(Return(true));
   EXPECT_CALL(visitor_, SendProbingData()).WillRepeatedly([this] {
@@ -7744,12 +7700,7 @@
 
   MockQuicConnectionDebugVisitor debug_visitor;
   connection_.set_debug_visitor(&debug_visitor);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(0);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(0);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(0);
   EXPECT_CALL(*send_algorithm_, ShouldSendProbingPacket())
       .WillRepeatedly(Return(true));
   EXPECT_CALL(visitor_, SendProbingData()).WillRepeatedly([this] {
@@ -9715,12 +9666,7 @@
   }
   MockQuicConnectionDebugVisitor debug_visitor;
   connection_.set_debug_visitor(&debug_visitor);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(3);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(3);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(3);
   EXPECT_CALL(debug_visitor, OnCoalescedPacketSent(_, _)).Times(1);
   EXPECT_CALL(visitor_, OnHandshakePacketSent()).Times(1);
   {
@@ -9762,12 +9708,7 @@
 
   MockQuicConnectionDebugVisitor debug_visitor;
   connection_.set_debug_visitor(&debug_visitor);
-  if (connection_.sent_packet_manager()
-          .give_sent_packet_to_debug_visitor_after_sent()) {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _)).Times(1);
-  }
+  EXPECT_CALL(debug_visitor, OnPacketSent(_, _, _, _, _, _, _, _)).Times(1);
 
   // Our TestPacketWriter normally parses the sent packet using the version
   // from the connection, so here we need to tell it to use the encapsulation
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 2fd5426..7ead17a 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -57,7 +57,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_pto_pending_timer_count, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_undecryptable_packets2, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_willing_and_able_to_write2, true)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_give_sent_packet_to_debug_visitor_after_sent, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_goaway_with_max_stream_id, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_granular_qpack_error_codes, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_key_update_supported, true)
diff --git a/quic/core/quic_sent_packet_manager.h b/quic/core/quic_sent_packet_manager.h
index 7dad0b0..f6a6fa8 100644
--- a/quic/core/quic_sent_packet_manager.h
+++ b/quic/core/quic_sent_packet_manager.h
@@ -456,10 +456,6 @@
   QuicTime GetEarliestPacketSentTimeForPto(
       PacketNumberSpace* packet_number_space) const;
 
-  bool give_sent_packet_to_debug_visitor_after_sent() const {
-    return give_sent_packet_to_debug_visitor_after_sent_;
-  }
-
  private:
   friend class test::QuicConnectionPeer;
   friend class test::QuicSentPacketManagerPeer;
@@ -740,9 +736,6 @@
   // The number of PTOs needed for path degrading alarm. If equals to 0, the
   // traditional path degrading mechanism will be used.
   int num_ptos_for_path_degrading_;
-
-  const bool give_sent_packet_to_debug_visitor_after_sent_ =
-      GetQuicReloadableFlag(quic_give_sent_packet_to_debug_visitor_after_sent);
 };
 
 }  // namespace quic
diff --git a/quic/core/quic_trace_visitor.cc b/quic/core/quic_trace_visitor.cc
index 7ac7b7b..a419808 100644
--- a/quic/core/quic_trace_visitor.cc
+++ b/quic/core/quic_trace_visitor.cc
@@ -44,70 +44,6 @@
   }
 }
 
-void QuicTraceVisitor::OnPacketSent(const SerializedPacket& serialized_packet,
-                                    TransmissionType /*transmission_type*/,
-                                    QuicTime sent_time) {
-  quic_trace::Event* event = trace_.add_events();
-  event->set_event_type(quic_trace::PACKET_SENT);
-  event->set_time_us(ConvertTimestampToRecordedFormat(sent_time));
-  event->set_packet_number(serialized_packet.packet_number.ToUint64());
-  event->set_packet_size(serialized_packet.encrypted_length);
-  event->set_encryption_level(
-      EncryptionLevelToProto(serialized_packet.encryption_level));
-
-  for (const QuicFrame& frame : serialized_packet.retransmittable_frames) {
-    switch (frame.type) {
-      case STREAM_FRAME:
-      case RST_STREAM_FRAME:
-      case CONNECTION_CLOSE_FRAME:
-      case WINDOW_UPDATE_FRAME:
-      case BLOCKED_FRAME:
-      case PING_FRAME:
-      case HANDSHAKE_DONE_FRAME:
-      case ACK_FREQUENCY_FRAME:
-        PopulateFrameInfo(frame, event->add_frames());
-        break;
-
-      case PADDING_FRAME:
-      case MTU_DISCOVERY_FRAME:
-      case STOP_WAITING_FRAME:
-      case ACK_FRAME:
-        QUIC_BUG
-            << "Frames of type are not retransmittable and are not supposed "
-               "to be in retransmittable_frames";
-        break;
-
-      // New IETF frames, not used in current gQUIC version.
-      case NEW_CONNECTION_ID_FRAME:
-      case RETIRE_CONNECTION_ID_FRAME:
-      case MAX_STREAMS_FRAME:
-      case STREAMS_BLOCKED_FRAME:
-      case PATH_RESPONSE_FRAME:
-      case PATH_CHALLENGE_FRAME:
-      case STOP_SENDING_FRAME:
-      case MESSAGE_FRAME:
-      case CRYPTO_FRAME:
-      case NEW_TOKEN_FRAME:
-        break;
-
-      // Ignore gQUIC-specific frames.
-      case GOAWAY_FRAME:
-        break;
-
-      case NUM_FRAME_TYPES:
-        QUIC_BUG << "Unknown frame type encountered";
-        break;
-    }
-  }
-
-  // Output PCC DebugState on packet sent for analysis.
-  if (connection_->sent_packet_manager()
-          .GetSendAlgorithm()
-          ->GetCongestionControlType() == kPCC) {
-    PopulateTransportState(event->mutable_transport_state());
-  }
-}
-
 void QuicTraceVisitor::OnPacketSent(
     QuicPacketNumber packet_number,
     QuicPacketLength packet_length,
diff --git a/quic/core/quic_trace_visitor.h b/quic/core/quic_trace_visitor.h
index 889d90a..0e6a385 100644
--- a/quic/core/quic_trace_visitor.h
+++ b/quic/core/quic_trace_visitor.h
@@ -18,12 +18,6 @@
  public:
   explicit QuicTraceVisitor(const QuicConnection* connection);
 
-  // TODO(wub): Delete when deprecating
-  // --quic_give_sent_packet_to_debug_visitor_after_sent.
-  void OnPacketSent(const SerializedPacket& serialized_packet,
-                    TransmissionType transmission_type,
-                    QuicTime sent_time) override;
-
   void OnPacketSent(QuicPacketNumber packet_number,
                     QuicPacketLength packet_length,
                     bool has_crypto_handshake,
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index f764e0b..5c217c7 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -1457,13 +1457,6 @@
   MockQuicConnectionDebugVisitor();
   ~MockQuicConnectionDebugVisitor() override;
 
-  // TODO(wub): Delete when deprecating
-  // --quic_give_sent_packet_to_debug_visitor_after_sent.
-  MOCK_METHOD(void,
-              OnPacketSent,
-              (const SerializedPacket&, TransmissionType, QuicTime),
-              (override));
-
   MOCK_METHOD(void,
               OnPacketSent,
               (QuicPacketNumber,
