gfe-relnote: In QUIC, add adaptive reordering thresholds. Deprecate SpuriousRetransmitDetected and call SpuriousLossDetected instead. Protected by gfe2_reloadable_flag_quic_detect_spurious_loss.
PiperOrigin-RevId: 268541613
Change-Id: I861b74d6cd261c30affc3e4bc1874fee4c4f3ab4
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index e167c09..7a413d0 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -109,7 +109,9 @@
max_probe_packets_per_pto_(2),
consecutive_pto_count_(0),
fix_rto_retransmission_(false),
- handshake_mode_disabled_(false) {
+ handshake_mode_disabled_(false),
+ detect_spurious_losses_(
+ GetQuicReloadableFlag(quic_detect_spurious_loss)) {
SetSendAlgorithm(congestion_control_type);
}
@@ -535,7 +537,8 @@
QuicPacketNumber acked_packet_number) {
if (session_decides_what_to_write()) {
RecordOneSpuriousRetransmission(info);
- if (info.transmission_type == LOSS_RETRANSMISSION) {
+ if (!detect_spurious_losses_ &&
+ info.transmission_type == LOSS_RETRANSMISSION) {
// Only inform the loss detection of spurious retransmits it caused.
loss_algorithm_->SpuriousRetransmitDetected(
unacked_packets_, clock_->Now(), rtt_stats_, acked_packet_number);
@@ -603,6 +606,7 @@
void QuicSentPacketManager::MarkPacketHandled(QuicPacketNumber packet_number,
QuicTransmissionInfo* info,
+ QuicTime ack_receive_time,
QuicTime::Delta ack_delay_time,
QuicTime receive_timestamp) {
QuicPacketNumber newest_transmission =
@@ -635,6 +639,26 @@
RecordSpuriousRetransmissions(*info, packet_number);
}
}
+ if (detect_spurious_losses_ && session_decides_what_to_write() &&
+ info->state == LOST) {
+ // Record as a spurious loss as a packet previously declared lost gets
+ // acked.
+ QUIC_RELOADABLE_FLAG_COUNT(quic_detect_spurious_loss);
+ const PacketNumberSpace packet_number_space =
+ unacked_packets_.GetPacketNumberSpace(info->encryption_level);
+ const QuicPacketNumber previous_largest_acked =
+ supports_multiple_packet_number_spaces()
+ ? unacked_packets_.GetLargestAckedOfPacketNumberSpace(
+ packet_number_space)
+ : unacked_packets_.largest_acked();
+ QUIC_DVLOG(1) << "Packet " << packet_number
+ << " was detected lost spuriously, "
+ "previous_largest_acked: "
+ << previous_largest_acked;
+ loss_algorithm_->SpuriousLossDetected(unacked_packets_, rtt_stats_,
+ ack_receive_time, packet_number,
+ previous_largest_acked);
+ }
} else {
DCHECK(!session_decides_what_to_write());
RecordSpuriousRetransmissions(*info, packet_number);
@@ -1306,7 +1330,9 @@
}
QUIC_DVLOG(1) << ENDPOINT << "Got an "
<< QuicUtils::EncryptionLevelToString(ack_decrypted_level)
- << " ack for packet " << acked_packet.packet_number;
+ << " ack for packet " << acked_packet.packet_number
+ << " , state: "
+ << QuicUtils::SentPacketStateToString(info->state);
const PacketNumberSpace packet_number_space =
unacked_packets_.GetPacketNumberSpace(info->encryption_level);
if (supports_multiple_packet_number_spaces() &&
@@ -1330,7 +1356,7 @@
}
unacked_packets_.MaybeUpdateLargestAckedOfPacketNumberSpace(
packet_number_space, acked_packet.packet_number);
- MarkPacketHandled(acked_packet.packet_number, info,
+ MarkPacketHandled(acked_packet.packet_number, info, ack_receive_time,
last_ack_frame_.ack_delay_time,
acked_packet.receive_timestamp);
}