spurious stats
diff --git a/quiche/src/lib.rs b/quiche/src/lib.rs
index 88ce158..cfac381 100644
--- a/quiche/src/lib.rs
+++ b/quiche/src/lib.rs
@@ -1185,6 +1185,7 @@
/// Total number of lost packets.
lost_count: usize,
+ spurious_count: usize,
/// Total number of packets sent with data retransmitted.
retrans_count: usize,
@@ -1664,6 +1665,7 @@
recv_count: 0,
sent_count: 0,
lost_count: 0,
+ spurious_count: 0,
retrans_count: 0,
sent_bytes: 0,
recv_bytes: 0,
@@ -5805,6 +5807,7 @@
recv: self.recv_count,
sent: self.sent_count,
lost: self.lost_count,
+ spurious: self.spurious_count,
retrans: self.retrans_count,
sent_bytes: self.sent_bytes,
recv_bytes: self.recv_bytes,
@@ -6185,7 +6188,7 @@
p.recovery.delivery_rate_update_app_limited(true);
}
- let (lost_packets, lost_bytes) = p.recovery.on_ack_received(
+ let (lost_packets, lost_bytes, spurious_packets) = p.recovery.on_ack_received(
&ranges,
ack_delay,
epoch,
@@ -6196,6 +6199,7 @@
self.lost_count += lost_packets;
self.lost_bytes += lost_bytes as u64;
+ self.spurious_count += spurious_packets
}
if self.handshake_confirmed {
@@ -6989,6 +6993,7 @@
/// The number of QUIC packets that were lost.
pub lost: usize,
+ pub spurious: usize,
/// The number of sent QUIC packets with retransmitted data.
pub retrans: usize,
@@ -7053,8 +7058,8 @@
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(
f,
- "recv={} sent={} lost={} retrans={}",
- self.recv, self.sent, self.lost, self.retrans,
+ "recv={} sent={} lost={} retrans={} spurious={}",
+ self.recv, self.sent, self.lost, self.retrans, self.spurious,
)?;
write!(
diff --git a/quiche/src/recovery/mod.rs b/quiche/src/recovery/mod.rs
index 120d6bb..ad257f2 100644
--- a/quiche/src/recovery/mod.rs
+++ b/quiche/src/recovery/mod.rs
@@ -416,7 +416,7 @@
&mut self, ranges: &ranges::RangeSet, ack_delay: u64,
epoch: packet::Epoch, handshake_status: HandshakeStatus, now: Instant,
trace_id: &str,
- ) -> Result<(usize, usize)> {
+ ) -> Result<(usize, usize, usize)> {
let largest_acked = ranges.last().unwrap();
// While quiche used to consider ACK frames acknowledging packet numbers
@@ -444,6 +444,8 @@
let max_rtt = cmp::max(self.latest_rtt, self.rtt());
+ let lost_spurious_count_prev = self.lost_spurious_count;
+
// Detect and mark acked packets, without removing them from the sent
// packets list.
for r in ranges.iter() {
@@ -532,8 +534,10 @@
(self.cc_ops.rollback)(self);
}
+ let lost_spurious_packets = self.lost_spurious_count - lost_spurious_count_prev;
+
if newly_acked.is_empty() {
- return Ok((0, 0));
+ return Ok((0, 0, lost_spurious_packets));
}
if largest_newly_acked_pkt_num == largest_acked && has_ack_eliciting {
@@ -567,7 +571,7 @@
self.drain_packets(epoch, now);
- Ok((lost_packets, lost_bytes))
+ Ok((lost_packets, lost_bytes, lost_spurious_packets))
}
pub fn on_loss_detection_timeout(