Files
core/test/rust/performance/memory.rs
T
2026-11-03 03:32:07 +00:00

28 lines
1.6 KiB
Rust

// 只编入 --memory 产物,复用原输入与两侧函数;普通计时产物不改变。
// 全进程初始化和输入也会被探针计数,零次调用作为相同场景的基线。
fn compare_output<const BORROW: bool, Input: ?Sized, Output: PartialEq + std::fmt::Debug>(name: &str, values: &Input, _: &Input, _: usize, generated: fn(&Input) -> Result<Output, Fault>, reference: fn(&Input) -> Result<Output, Fault>, score: fn(&Output) -> u64, reference_name: &str) {
let selected = std::env::var("DEVER_HEAP_CASE").expect("DEVER_HEAP_CASE");
if selected != name { return; }
let implementation = std::env::var("DEVER_HEAP_IMPL").expect("DEVER_HEAP_IMPL");
let count = std::env::var("DEVER_HEAP_COUNT").expect("DEVER_HEAP_COUNT").parse::<usize>().unwrap();
let operation = if implementation == "dever" { generated } else {
assert_eq!(implementation, reference_name);
reference
};
let operation = black_box(operation);
let mut checksum = 0u64;
for _ in 0..count {
let value = black_box(operation(black_box(values)).unwrap());
checksum = checksum.wrapping_add(black_box(score(&value)));
drop(value);
}
println!("heap,{name},{implementation},{count},{checksum}");
// RSS 单独在未加载分配探针的进程读取,避免把探针静态表算进语言成本。
if std::env::var_os("DEVER_HEAP_RSS").is_some() {
let status = std::fs::read_to_string("/proc/self/status").unwrap();
for line in status.lines().filter(|line| line.starts_with("VmRSS:") || line.starts_with("VmHWM:")) {
println!("heap_rss,{line}");
}
}
}