gfe-relnote: (n/a) Record number of spurious losses in QuicConnectionStats. Stats only, not protected. This is needed to calculate the spurious loss ratio from the loss algorithm. PiperOrigin-RevId: 297897128 Change-Id: I44ca14e9946c586959b2afdd61960f35da5aae3e
diff --git a/quic/core/quic_connection_stats.h b/quic/core/quic_connection_stats.h index 9f4deca..0edb7ba 100644 --- a/quic/core/quic_connection_stats.h +++ b/quic/core/quic_connection_stats.h
@@ -45,6 +45,8 @@ QuicPacketCount packets_spuriously_retransmitted = 0; // Number of packets abandoned as lost by the loss detection algorithm. QuicPacketCount packets_lost = 0; + QuicPacketCount packet_spuriously_detected_lost = 0; + // The sum of the detection time of all lost packets. The detection time of a // lost packet is defined as: T(detection) - T(send). QuicTime::Delta total_loss_detection_time = QuicTime::Delta::Zero();
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index d92883b..fc7287f 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -622,6 +622,7 @@ loss_algorithm_->SpuriousLossDetected(unacked_packets_, rtt_stats_, ack_receive_time, packet_number, previous_largest_acked); + ++stats_->packet_spuriously_detected_lost; } if (network_change_visitor_ != nullptr &&
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc index 99ddfcd..35feefc 100644 --- a/quic/core/quic_sent_packet_manager_test.cc +++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -671,9 +671,11 @@ clock_.Now()); manager_.OnAckRange(QuicPacketNumber(3), QuicPacketNumber(5)); manager_.OnAckRange(QuicPacketNumber(1), QuicPacketNumber(2)); + EXPECT_EQ(0u, stats_.packet_spuriously_detected_lost); EXPECT_EQ(PACKETS_NEWLY_ACKED, manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(3), ENCRYPTION_INITIAL)); + EXPECT_EQ(1u, stats_.packet_spuriously_detected_lost); // Ack 3 will not cause 5 be considered as a spurious retransmission. Ack // 5 will cause 5 be considered as a spurious retransmission as no new // data gets acked.