use super::NetWriter;
use super::Transport;
impl NetWriter {
pub(super) fn maybe_toggle_nodelay(&mut self, cap: usize, avg: usize) {
use std::time::{Duration, Instant};
let Transport::Tcp(ref stream) = self.transport else {
return;
};
if cap == 0 {
return;
}
let on_up = cap / 56;
let off_down = cap / 72;
let cur = self.nodelay_on.unwrap_or(false); let desired_on = if cur {
avg >= off_down
} else {
avg > on_up
};
const NODELAY_DEBOUNCE_MS: u64 = 10;
let now = Instant::now();
if desired_on != cur {
if let Some(last) = self.nodelay_last_change
&& now.saturating_duration_since(last) < Duration::from_millis(NODELAY_DEBOUNCE_MS)
{
return;
}
let _ = stream.set_nodelay(desired_on);
self.nodelay_on = Some(desired_on);
self.nodelay_last_change = Some(now);
}
}
}