#[derive(Debug, Default, Clone)]
pub struct CompressionStatistics {
pub total_original_bytes: u64,
pub total_compressed_bytes: u64,
pub compression_count: u64,
pub skipped_count: u64,
pub compression_time_us: u64,
pub decompression_time_us: u64,
pub failed_count: u64,
}
impl CompressionStatistics {
pub fn new() -> Self {
Self::default()
}
pub fn compression_ratio(&self) -> f64 {
if self.total_original_bytes > 0 {
self.total_compressed_bytes as f64 / self.total_original_bytes as f64
} else {
1.0
}
}
pub fn bandwidth_savings_percent(&self) -> f64 {
(1.0 - self.compression_ratio()) * 100.0
}
pub fn record_compression(
&mut self,
original_size: usize,
compressed_size: usize,
time_us: u64,
) {
self.total_original_bytes += original_size as u64;
self.total_compressed_bytes += compressed_size as u64;
self.compression_count += 1;
self.compression_time_us += time_us;
}
pub fn record_skipped(&mut self) {
self.skipped_count += 1;
}
pub fn record_decompression(&mut self, time_us: u64) {
self.decompression_time_us += time_us;
}
pub fn record_failed(&mut self) {
self.failed_count += 1;
}
}