use std::sync::atomic::{AtomicU32, AtomicU64, Ordering};
static COMPILER_RUNS: AtomicU32 = AtomicU32::new(0);
static PREPROCESSOR_RUNS: AtomicU32 = AtomicU32::new(0);
static PROBE_RUNS: AtomicU32 = AtomicU32::new(0);
pub fn record_compiler_run() {
COMPILER_RUNS.fetch_add(1, Ordering::Relaxed);
}
pub fn record_preprocessor_run() {
PREPROCESSOR_RUNS.fetch_add(1, Ordering::Relaxed);
}
pub fn compiler_runs() -> u32 {
COMPILER_RUNS.load(Ordering::Relaxed)
}
pub fn preprocessor_runs() -> u32 {
PREPROCESSOR_RUNS.load(Ordering::Relaxed)
}
pub fn record_probe_run() {
PROBE_RUNS.fetch_add(1, Ordering::Relaxed);
}
#[allow(dead_code)]
pub fn probe_runs() -> u32 {
PROBE_RUNS.load(Ordering::Relaxed)
}
static REFLINKED_BYTES: AtomicU64 = AtomicU64::new(0);
static HARDLINKED_BYTES: AtomicU64 = AtomicU64::new(0);
static COPIED_BYTES: AtomicU64 = AtomicU64::new(0);
pub fn record_reflinked(bytes: u64) {
REFLINKED_BYTES.fetch_add(bytes, Ordering::Relaxed);
}
pub fn record_hardlinked(bytes: u64) {
HARDLINKED_BYTES.fetch_add(bytes, Ordering::Relaxed);
}
pub fn record_copied(bytes: u64) {
COPIED_BYTES.fetch_add(bytes, Ordering::Relaxed);
}
pub fn reflinked_bytes() -> u64 {
REFLINKED_BYTES.load(Ordering::Relaxed)
}
pub fn hardlinked_bytes() -> u64 {
HARDLINKED_BYTES.load(Ordering::Relaxed)
}
pub fn copied_bytes() -> u64 {
COPIED_BYTES.load(Ordering::Relaxed)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn record_compiler_run_increments_monotonically() {
let before = compiler_runs();
record_compiler_run();
assert!(compiler_runs() > before);
}
#[test]
fn record_preprocessor_run_increments_monotonically() {
let before = preprocessor_runs();
record_preprocessor_run();
assert!(preprocessor_runs() > before);
}
#[test]
fn record_probe_run_increments_monotonically() {
let before = probe_runs();
record_probe_run();
assert!(probe_runs() > before);
}
#[test]
fn restore_byte_counters_increment_monotonically() {
let before = reflinked_bytes() + hardlinked_bytes() + copied_bytes();
record_reflinked(64);
record_hardlinked(32);
record_copied(16);
assert!(reflinked_bytes() + hardlinked_bytes() + copied_bytes() >= before + 112);
}
}