Internal QUICHE change
PiperOrigin-RevId: 290129985
Change-Id: I23d112a79b77da8084c078e9ed2b34d7cc07e863
diff --git a/quic/core/congestion_control/bbr2_probe_bw.cc b/quic/core/congestion_control/bbr2_probe_bw.cc
index 781e218..3c8c787 100644
--- a/quic/core/congestion_control/bbr2_probe_bw.cc
+++ b/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -217,8 +217,15 @@
bool Bbr2ProbeBwMode::IsTimeToProbeBandwidth(
const Bbr2CongestionEvent& congestion_event) const {
- return HasCycleLasted(cycle_.probe_wait_time, congestion_event) ||
- IsTimeToProbeForRenoCoexistence(1.0, congestion_event);
+ if (HasCycleLasted(cycle_.probe_wait_time, congestion_event)) {
+ return true;
+ }
+
+ if (IsTimeToProbeForRenoCoexistence(1.0, congestion_event)) {
+ ++sender_->connection_stats_->bbr_num_short_cycles_for_reno_coexistence;
+ return true;
+ }
+ return false;
}
// QUIC only. Used to prevent a Bbr2 flow from staying in PROBE_DOWN for too
@@ -429,6 +436,7 @@
cycle_.phase = CyclePhase::PROBE_DOWN;
cycle_.rounds_in_phase = 0;
cycle_.phase_start_time = congestion_event.event_time;
+ ++sender_->connection_stats_->bbr_num_cycles;
// Pick probe wait time.
cycle_.rounds_since_probe =
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 090dd40..c87f715 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -130,6 +130,7 @@
model_->set_inflight_hi(bdp);
full_bandwidth_reached_ = true;
+ sender_->connection_stats_->bbr_exit_startup_due_to_loss = true;
}
loss_events_in_round_ = 0;
diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index b4566bd..358006d 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -713,6 +713,9 @@
if (should_advance_gain_cycling) {
cycle_current_offset_ = (cycle_current_offset_ + 1) % kGainCycleLength;
+ if (cycle_current_offset_ == 0) {
+ ++stats_->bbr_num_cycles;
+ }
last_cycle_start_ = now;
// Stay in low gain mode until the target BDP is hit.
// Low gain mode will be exited immediately when the target BDP is achieved.
@@ -785,9 +788,13 @@
const QuicByteCount inflight_at_send = last_packet_send_state.bytes_in_flight;
if (inflight_at_send > 0 && bytes_lost_in_round_ > 0) {
- return bytes_lost_in_round_ >
- inflight_at_send *
- GetQuicFlag(FLAGS_quic_bbr2_default_loss_threshold);
+ if (bytes_lost_in_round_ >
+ inflight_at_send *
+ GetQuicFlag(FLAGS_quic_bbr2_default_loss_threshold)) {
+ stats_->bbr_exit_startup_due_to_loss = true;
+ return true;
+ }
+ return false;
}
return false;
diff --git a/quic/core/quic_connection_stats.h b/quic/core/quic_connection_stats.h
index 7015554..a99c055 100644
--- a/quic/core/quic_connection_stats.h
+++ b/quic/core/quic_connection_stats.h
@@ -15,6 +15,7 @@
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
namespace quic {
+
// Structure to hold stats for a QuicConnection.
struct QUIC_EXPORT_PRIVATE QuicConnectionStats {
QUIC_EXPORT_PRIVATE friend std::ostream& operator<<(
@@ -60,6 +61,14 @@
// Time spent in slow start. Populated for BBRv1 and BBRv2.
QuicTimeAccumulator slowstart_duration;
+ // Number of PROBE_BW cycles. Populated for BBRv1 and BBRv2.
+ uint32_t bbr_num_cycles = 0;
+ // Number of PROBE_BW cycles shortened for reno coexistence. BBRv2 only.
+ uint32_t bbr_num_short_cycles_for_reno_coexistence = 0;
+ // Whether BBR exited STARTUP due to excessive loss. Populated for BBRv1 and
+ // BBRv2.
+ bool bbr_exit_startup_due_to_loss = false;
+
QuicPacketCount packets_dropped = 0; // Duplicate or less than least unacked.
// Packets that failed to decrypt when they were first received,