Add stats on QuicConnection path degrading and recovering. To merge: please use num_path_degrading stats from the connection instead of from multi_port_stats. PiperOrigin-RevId: 526808051
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc index 10f830d..4a60d9a 100644 --- a/quiche/quic/core/quic_connection.cc +++ b/quiche/quic/core/quic_connection.cc
@@ -6147,6 +6147,7 @@ } if (is_path_degrading_) { visitor_->OnForwardProgressMadeAfterPathDegrading(); + stats_.num_forward_progress_after_path_degrading++; is_path_degrading_ = false; } if (sent_packet_manager_.HasInFlightPackets()) { @@ -6290,8 +6291,8 @@ void QuicConnection::OnPathDegradingDetected() { is_path_degrading_ = true; visitor_->OnPathDegrading(); + stats_.num_path_degrading++; if (multi_port_stats_) { - multi_port_stats_->num_path_degrading++; MaybeMigrateToMultiPortPath(); } }
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h index eadad65..ad73e98 100644 --- a/quiche/quic/core/quic_connection.h +++ b/quiche/quic/core/quic_connection.h
@@ -492,8 +492,6 @@ RttStats rtt_stats; // rtt stats for the multi-port path when the default path is degrading. RttStats rtt_stats_when_default_path_degrading; - // number of path degrading triggered when multi-port is enabled. - size_t num_path_degrading = 0; // number of multi-port probe failures when path is not degrading size_t num_multi_port_probe_failures_when_path_not_degrading = 0; // number of multi-port probe failure when path is degrading
diff --git a/quiche/quic/core/quic_connection_stats.h b/quiche/quic/core/quic_connection_stats.h index 336435e..1088e81 100644 --- a/quiche/quic/core/quic_connection_stats.h +++ b/quiche/quic/core/quic_connection_stats.h
@@ -225,6 +225,10 @@ size_t num_new_connection_id_sent = 0; // Number of RETIRE_CONNECTION_ID frames sent. size_t num_retire_connection_id_sent = 0; + // Number of path degrading. + size_t num_path_degrading = 0; + // Number of forward progress made after path degrading. + size_t num_forward_progress_after_path_degrading = 0; bool server_preferred_address_validated = false; bool failed_to_validate_server_preferred_address = false;
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc index a274129..0a6c01c 100644 --- a/quiche/quic/core/quic_connection_test.cc +++ b/quiche/quic/core/quic_connection_test.cc
@@ -7937,6 +7937,8 @@ EXPECT_CALL(visitor_, OnForwardProgressMadeAfterPathDegrading()).Times(1); frame = InitAckFrame({{QuicPacketNumber(2), QuicPacketNumber(3)}}); ProcessAckPacket(&frame); + EXPECT_EQ(1, + connection_.GetStats().num_forward_progress_after_path_degrading); EXPECT_FALSE(connection_.IsPathDegrading()); EXPECT_TRUE(connection_.PathDegradingDetectionInProgress()); } @@ -13393,7 +13395,7 @@ EXPECT_TRUE(alt_path->validated); auto stats = connection_.multi_port_stats(); - EXPECT_EQ(1, stats->num_path_degrading); + EXPECT_EQ(1, connection_.GetStats().num_path_degrading); EXPECT_EQ(0, stats->num_multi_port_probe_failures_when_path_degrading); EXPECT_EQ(kTestRTT, stats->rtt_stats.latest_rtt()); EXPECT_EQ(kTestRTT, @@ -13426,7 +13428,7 @@ EXPECT_TRUE(QuicConnectionPeer::IsAlternativePath( &connection_, kNewSelfAddress, connection_.peer_address())); EXPECT_TRUE(alt_path->validated); - EXPECT_EQ(1, stats->num_path_degrading); + EXPECT_EQ(1, connection_.GetStats().num_path_degrading); EXPECT_EQ(0, stats->num_multi_port_probe_failures_when_path_degrading); EXPECT_EQ(kTestRTT, stats->rtt_stats.latest_rtt()); EXPECT_EQ(kTestRTT, @@ -13454,7 +13456,7 @@ EXPECT_FALSE(connection_.HasPendingPathValidation()); EXPECT_FALSE(QuicConnectionPeer::IsAlternativePath( &connection_, kNewSelfAddress, connection_.peer_address())); - EXPECT_EQ(1, stats->num_path_degrading); + EXPECT_EQ(1, connection_.GetStats().num_path_degrading); EXPECT_EQ(1, stats->num_multi_port_probe_failures_when_path_degrading); EXPECT_EQ(0, stats->num_multi_port_probe_failures_when_path_not_degrading); } @@ -13518,7 +13520,7 @@ EXPECT_FALSE(connection_.HasPendingPathValidation()); EXPECT_FALSE(QuicConnectionPeer::IsAlternativePath( &connection_, kNewSelfAddress, connection_.peer_address())); - EXPECT_EQ(1, stats->num_path_degrading); + EXPECT_EQ(1, connection_.GetStats().num_path_degrading); EXPECT_EQ(1, stats->num_multi_port_probe_failures_when_path_degrading); uint64_t connection_id = 1235; @@ -13551,7 +13553,7 @@ EXPECT_FALSE(connection_.HasPendingPathValidation()); EXPECT_FALSE(QuicConnectionPeer::IsAlternativePath( &connection_, kNewSelfAddress, connection_.peer_address())); - EXPECT_EQ(1, stats->num_path_degrading); + EXPECT_EQ(1, connection_.GetStats().num_path_degrading); EXPECT_EQ(i + 2, stats->num_multi_port_probe_failures_when_path_degrading); }