use std::time::Duration;
pub(crate) const LOADED_LATENCY_INTERVAL: Duration = Duration::from_millis(200);
pub(crate) const THROUGHPUT_SAMPLE_INTERVAL: Duration = Duration::from_millis(250);
pub(crate) const MAX_PROBE_RATE_PER_SECOND: u32 = 1_000;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct NetBenchConfig {
pub overall_timeout: Duration,
pub path_stabilization_timeout: Duration,
pub latency_duration: Duration,
pub latency_interval: Duration,
pub loss_duration: Duration,
pub loss_rate_per_second: u32,
pub probe_timeout: Duration,
pub download_warmup: Duration,
pub download_duration: Duration,
pub upload_warmup: Duration,
pub upload_duration: Duration,
pub parallel_streams: u16,
pub chunk_size: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct NetBenchProbeConfig {
pub overall_timeout: Duration,
pub path_stabilization_timeout: Duration,
pub latency_duration: Duration,
pub latency_interval: Duration,
pub loss_duration: Duration,
pub loss_rate_per_second: u32,
pub probe_timeout: Duration,
}
impl NetBenchConfig {
#[must_use]
pub fn quick() -> Self {
Self {
overall_timeout: Duration::from_secs(45),
path_stabilization_timeout: Duration::from_secs(3),
latency_duration: Duration::from_secs(2),
latency_interval: Duration::from_millis(100),
loss_duration: Duration::from_secs(2),
loss_rate_per_second: 100,
probe_timeout: Duration::from_secs(2),
download_warmup: Duration::from_secs(1),
download_duration: Duration::from_secs(5),
upload_warmup: Duration::from_secs(2),
upload_duration: Duration::from_secs(5),
parallel_streams: 4,
chunk_size: 64 * 1024,
}
}
#[must_use]
pub fn standard() -> Self {
Self {
overall_timeout: Duration::from_secs(75),
latency_duration: Duration::from_secs(3),
loss_duration: Duration::from_secs(5),
download_warmup: Duration::from_secs(2),
download_duration: Duration::from_secs(10),
upload_warmup: Duration::from_secs(2),
upload_duration: Duration::from_secs(10),
..Self::quick()
}
}
}
impl Default for NetBenchConfig {
fn default() -> Self {
Self::standard()
}
}
impl NetBenchProbeConfig {
#[must_use]
pub fn quick() -> Self {
let full = NetBenchConfig::quick();
Self {
overall_timeout: Duration::from_secs(15),
..Self::from(&full)
}
}
#[must_use]
pub fn standard() -> Self {
let full = NetBenchConfig::standard();
Self {
overall_timeout: Duration::from_secs(25),
..Self::from(&full)
}
}
}
impl From<&NetBenchConfig> for NetBenchProbeConfig {
fn from(config: &NetBenchConfig) -> Self {
Self {
overall_timeout: config.overall_timeout,
path_stabilization_timeout: config.path_stabilization_timeout,
latency_duration: config.latency_duration,
latency_interval: config.latency_interval,
loss_duration: config.loss_duration,
loss_rate_per_second: config.loss_rate_per_second,
probe_timeout: config.probe_timeout,
}
}
}
impl Default for NetBenchProbeConfig {
fn default() -> Self {
Self::standard()
}
}