Record the latest CC-provided bandwidth estimate in QUIC traces.
PiperOrigin-RevId: 823978617
diff --git a/quiche/quic/core/quic_trace_visitor.cc b/quiche/quic/core/quic_trace_visitor.cc
index e04def2..55ed0a9 100644
--- a/quiche/quic/core/quic_trace_visitor.cc
+++ b/quiche/quic/core/quic_trace_visitor.cc
@@ -7,6 +7,7 @@
#include <cstdint>
#include <string>
+#include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/common/quiche_endian.h"
@@ -328,21 +329,20 @@
state->set_smoothed_rtt_us(rtt_stats->smoothed_rtt().ToMicroseconds());
state->set_last_rtt_us(rtt_stats->latest_rtt().ToMicroseconds());
+ const SendAlgorithmInterface* send_algorithm =
+ connection_->sent_packet_manager().GetSendAlgorithm();
state->set_cwnd_bytes(
connection_->sent_packet_manager().GetCongestionWindowInBytes());
QuicByteCount in_flight =
connection_->sent_packet_manager().GetBytesInFlight();
state->set_in_flight_bytes(in_flight);
- state->set_pacing_rate_bps(connection_->sent_packet_manager()
- .GetSendAlgorithm()
- ->PacingRate(in_flight)
- .ToBitsPerSecond());
+ state->set_pacing_rate_bps(
+ send_algorithm->PacingRate(in_flight).ToBitsPerSecond());
+ state->set_bandwidth_estimate_bps(
+ send_algorithm->BandwidthEstimate().ToBitsPerSecond());
- if (connection_->sent_packet_manager()
- .GetSendAlgorithm()
- ->GetCongestionControlType() == kPCC) {
- state->set_congestion_control_state(
- connection_->sent_packet_manager().GetSendAlgorithm()->GetDebugState());
+ if (send_algorithm->GetCongestionControlType() == kPCC) {
+ state->set_congestion_control_state(send_algorithm->GetDebugState());
}
}
diff --git a/quiche/quic/core/quic_trace_visitor_test.cc b/quiche/quic/core/quic_trace_visitor_test.cc
index 9080f85..9e23593 100644
--- a/quiche/quic/core/quic_trace_visitor_test.cc
+++ b/quiche/quic/core/quic_trace_visitor_test.cc
@@ -7,19 +7,28 @@
#include <string>
#include <vector>
+#include "quiche/quic/core/quic_bandwidth.h"
+#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_constants.h"
+#include "quiche/quic/core/quic_interval_set.h"
+#include "quiche/quic/core/quic_packet_number.h"
+#include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/platform/api/quic_test.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/quic/test_tools/simulator/link.h"
#include "quiche/quic/test_tools/simulator/quic_endpoint.h"
#include "quiche/quic/test_tools/simulator/simulator.h"
#include "quiche/quic/test_tools/simulator/switch.h"
+#include "quiche/common/platform/api/quiche_logging.h"
namespace quic::test {
namespace {
-const QuicByteCount kTransferSize = 1000 * kMaxOutgoingPacketSize;
-const QuicByteCount kTestStreamNumber = 3;
-const QuicTime::Delta kDelay = QuicTime::Delta::FromMilliseconds(20);
+constexpr QuicByteCount kTransferSize = 1000 * kMaxOutgoingPacketSize;
+constexpr QuicByteCount kTestStreamNumber = 3;
+constexpr QuicTime::Delta kDelay = QuicTime::Delta::FromMilliseconds(20);
+constexpr QuicBandwidth kBandwidth = QuicBandwidth::FromKBitsPerSecond(1000);
// The trace for this test is generated using a simulator transfer.
class QuicTraceVisitorTest : public QuicTest {
@@ -32,7 +41,6 @@
simulator::QuicEndpoint server(&simulator, "Server", "Client",
Perspective::IS_SERVER, connection_id);
- const QuicBandwidth kBandwidth = QuicBandwidth::FromKBitsPerSecond(1000);
const QuicByteCount kBdp = kBandwidth * (2 * kDelay);
// Create parameters such that some loss is observed.
@@ -165,6 +173,11 @@
acks.rbegin()->transport_state().min_rtt_us());
EXPECT_GE((4 * kDelay).ToMicroseconds() * 1.25,
acks.rbegin()->transport_state().min_rtt_us());
+
+ float trace_bandwidth_bps =
+ acks.rbegin()->transport_state().bandwidth_estimate_bps();
+ float actual_bandwidth_bps = kBandwidth.ToBitsPerSecond();
+ EXPECT_APPROX_EQ(actual_bandwidth_bps, trace_bandwidth_bps, 0.01);
}
TEST_F(QuicTraceVisitorTest, EncryptionLevels) {