Enhance the error message of QUIC_BUG in QUIC BandwidthSampler.
PiperOrigin-RevId: 342096451
Change-Id: Id51f6bf374348a5289d708cf88fe2527d4dca619
diff --git a/quic/core/congestion_control/bandwidth_sampler.cc b/quic/core/congestion_control/bandwidth_sampler.cc
index 6eacef3..ee6d6c1 100644
--- a/quic/core/congestion_control/bandwidth_sampler.cc
+++ b/quic/core/congestion_control/bandwidth_sampler.cc
@@ -174,9 +174,12 @@
<< max_tracked_packets_
<< "). First tracked: " << connection_state_map_.first_packet()
<< "; last tracked: " << connection_state_map_.last_packet()
- << "; least unacked: " << unacked_packet_map_->GetLeastUnacked()
- << "; packet number: " << packet_number << "; largest observed: "
- << unacked_packet_map_->largest_acked();
+ << "; entry_slots_used: "
+ << connection_state_map_.entry_slots_used()
+ << "; number_of_present_entries: "
+ << connection_state_map_.number_of_present_entries()
+ << "; packet number: " << packet_number
+ << "; unacked_map: " << unacked_packet_map_->DebugString();
} else {
QUIC_BUG << "BandwidthSampler in-flight packet map has exceeded maximum "
"number of tracked packets.";
diff --git a/quic/core/quic_unacked_packet_map.h b/quic/core/quic_unacked_packet_map.h
index 4541351..2e5a64e 100644
--- a/quic/core/quic_unacked_packet_map.h
+++ b/quic/core/quic_unacked_packet_map.h
@@ -15,6 +15,7 @@
#include "net/third_party/quiche/src/quic/core/session_notifier_interface.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
namespace quic {
@@ -318,6 +319,16 @@
}
}
+ std::string DebugString() const {
+ return quiche::QuicheStringPrintf(
+ "{size: %zu, least_unacked: %s, largest_sent_packet: %s, "
+ "largest_acked: %s, bytes_in_flight: %zu, packets_in_flight: %zu}",
+ unacked_packets_size(), least_unacked_.ToString().c_str(),
+ largest_sent_packet_.ToString().c_str(),
+ largest_acked_.ToString().c_str(), bytes_in_flight_,
+ packets_in_flight_);
+ }
+
private:
friend class test::QuicUnackedPacketMapPeer;
diff --git a/quic/core/quic_unacked_packet_map_test.cc b/quic/core/quic_unacked_packet_map_test.cc
index 0282108..4b598be 100644
--- a/quic/core/quic_unacked_packet_map_test.cc
+++ b/quic/core/quic_unacked_packet_map_test.cc
@@ -669,6 +669,32 @@
ASSERT_EQ(QuicUnackedPacketMapPeer::GetCapacity(unacked_packets), 16u);
}
+TEST_P(QuicUnackedPacketMapTest, DebugString) {
+ EXPECT_EQ(unacked_packets_.DebugString(),
+ "{size: 0, least_unacked: 1, largest_sent_packet: uninitialized, "
+ "largest_acked: uninitialized, bytes_in_flight: 0, "
+ "packets_in_flight: 0}");
+
+ SerializedPacket packet1(CreateRetransmittablePacket(1));
+ unacked_packets_.AddSentPacket(&packet1, NOT_RETRANSMISSION, now_, true,
+ true);
+ EXPECT_EQ(
+ unacked_packets_.DebugString(),
+ "{size: 1, least_unacked: 1, largest_sent_packet: 1, largest_acked: "
+ "uninitialized, bytes_in_flight: 1000, packets_in_flight: 1}");
+
+ SerializedPacket packet2(CreateRetransmittablePacket(2));
+ unacked_packets_.AddSentPacket(&packet2, NOT_RETRANSMISSION, now_, true,
+ true);
+ unacked_packets_.RemoveFromInFlight(QuicPacketNumber(1));
+ unacked_packets_.IncreaseLargestAcked(QuicPacketNumber(1));
+ unacked_packets_.RemoveObsoletePackets();
+ EXPECT_EQ(
+ unacked_packets_.DebugString(),
+ "{size: 1, least_unacked: 2, largest_sent_packet: 2, largest_acked: 1, "
+ "bytes_in_flight: 1000, packets_in_flight: 1}");
+}
+
} // namespace
} // namespace test
} // namespace quic