fix(client): handle negative RTT and simplify sample generation
This commit is contained in:
1 parent
d212258707
commit
0099ac799f
1 file changed
+10
-10
@@ -373,7 +373,6 @@ impl Client {
|
|||||||
session.completed.insert(wire_seq, pending.logical_seq);
|
session.completed.insert(wire_seq, pending.logical_seq);
|
||||||
|
|
||||||
let mut events = Vec::new();
|
let mut events = Vec::new();
|
||||||
if let Some(rtt_sample) = rtt {
|
|
||||||
if is_late {
|
if is_late {
|
||||||
events.push(ClientEvent::LateReply {
|
events.push(ClientEvent::LateReply {
|
||||||
seq: wire_seq,
|
seq: wire_seq,
|
||||||
@@ -382,7 +381,7 @@ impl Client {
|
|||||||
remote: self.remote,
|
remote: self.remote,
|
||||||
sent_at: Some(pending.sent_at),
|
sent_at: Some(pending.sent_at),
|
||||||
received_at: now,
|
received_at: now,
|
||||||
rtt: Some(rtt_sample),
|
rtt: Some(rtt),
|
||||||
server_timing,
|
server_timing,
|
||||||
one_way,
|
one_way,
|
||||||
received_stats,
|
received_stats,
|
||||||
@@ -395,14 +394,13 @@ impl Client {
|
|||||||
remote: self.remote,
|
remote: self.remote,
|
||||||
sent_at: pending.sent_at,
|
sent_at: pending.sent_at,
|
||||||
received_at: now,
|
received_at: now,
|
||||||
rtt: rtt_sample,
|
rtt,
|
||||||
server_timing,
|
server_timing,
|
||||||
one_way,
|
one_way,
|
||||||
received_stats,
|
received_stats,
|
||||||
packet_meta: PacketMeta::default(),
|
packet_meta: PacketMeta::default(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Ok(events)
|
Ok(events)
|
||||||
} else if session.completed.contains(wire_seq) {
|
} else if session.completed.contains(wire_seq) {
|
||||||
update_highest_received(session, wire_seq);
|
update_highest_received(session, wire_seq);
|
||||||
@@ -564,8 +562,11 @@ fn compute_rtt(
|
|||||||
sent_at: &ClientTimestamp,
|
sent_at: &ClientTimestamp,
|
||||||
received_at: &ClientTimestamp,
|
received_at: &ClientTimestamp,
|
||||||
ts: &TimestampFields,
|
ts: &TimestampFields,
|
||||||
) -> Option<RttSample> {
|
) -> RttSample {
|
||||||
let raw = received_at.mono.checked_duration_since(sent_at.mono)?;
|
let raw = received_at
|
||||||
|
.mono
|
||||||
|
.checked_duration_since(sent_at.mono)
|
||||||
|
.unwrap_or(Duration::ZERO);
|
||||||
|
|
||||||
let server_processing = compute_server_processing(ts);
|
let server_processing = compute_server_processing(ts);
|
||||||
|
|
||||||
@@ -573,11 +574,11 @@ fn compute_rtt(
|
|||||||
|
|
||||||
let effective = adjusted.unwrap_or(raw);
|
let effective = adjusted.unwrap_or(raw);
|
||||||
|
|
||||||
Some(RttSample {
|
RttSample {
|
||||||
raw,
|
raw,
|
||||||
adjusted,
|
adjusted,
|
||||||
effective,
|
effective,
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compute_server_processing(ts: &TimestampFields) -> Option<Duration> {
|
fn compute_server_processing(ts: &TimestampFields) -> Option<Duration> {
|
||||||
@@ -1718,8 +1719,7 @@ mod tests {
|
|||||||
send_mono: Some(1_000_000_000),
|
send_mono: Some(1_000_000_000),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
)
|
);
|
||||||
.unwrap();
|
|
||||||
assert!(rtt.adjusted.is_none());
|
assert!(rtt.adjusted.is_none());
|
||||||
assert_eq!(rtt.effective, rtt.raw);
|
assert_eq!(rtt.effective, rtt.raw);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user