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) {