commit - 5078b3d01584d786d632eca19fa6ccdd57813fdb
commit + e1a93e31476b246bf5441e71ed1898da757959c3
blob - 5d7a590bcafa165dfc90e4c281cf91f92f0101fc
blob + 1a53c1dd8f0a7ceec6928e50052b03960fb4a47c
--- src/main.rs
+++ src/main.rs
struct ThroughputState {
time_passed: Instant,
write_len: usize,
+ total_write_len: usize,
next_seq: u8,
packets_missed: usize,
}
Self {
time_passed: Instant::now(),
write_len: 0,
+ total_write_len: 0,
next_seq: 0,
packets_missed: 0,
}
pub fn add_write_len(&mut self, len: usize) {
self.write_len += len;
+ self.total_write_len += len;
}
pub fn get_write_len(&self) -> usize {
self.write_len
}
+ pub fn get_total_write_len(&self) -> usize {
+ self.total_write_len
+ }
+
pub fn get_packets_missed(&self) -> usize {
self.packets_missed
}
+
+ pub fn reset_write_len(&mut self) {
+ self.write_len = 0;
+ }
}
fn handle_buffer_write(payload: Vec<u8>) {
loop {
// TODO: can't handle different connections (will reuse previous STATE)
if let Some(state) = once_cell::sync::Lazy::get(&STATE) {
- let s = state.lock().unwrap();
- let passed = s.get_time_passed().as_secs().max(1);
- let len = s.get_write_len();
+ let mut s = state.lock().unwrap();
+ let passed = s.get_time_passed().as_secs();
+ let total_len = s.get_total_write_len();
+ let momentary_len = s.get_write_len();
let lost = s.get_packets_missed();
+ s.reset_write_len();
drop(s);
- log::info!(
- "Throughput: {} kbit/s ({} bit/{} s) ({} packets lost)",
- (len * 8) / 1000 / passed as usize,
- len,
- passed,
- lost
- );
+ if passed > 0 {
+ log::info!(
+ "Throughput: {} kbit/s ({} kbit/s momentary) (running {}s, {} packets lost)",
+ (total_len * 8) / 1000 / passed as usize,
+ (momentary_len * 8) / 1000,
+ passed,
+ lost
+ );
+ }
} else {
log::info!("Not connected");
}