8 个版本 (2 个稳定版)
1.0.1 | 2021年7月10日 |
---|---|
1.0.0 | 2021年3月2日 |
0.3.1 | 2021年2月25日 |
0.2.2 | 2021年2月24日 |
0.1.0 | 2021年2月22日 |
#162 in 性能分析
25KB
400 行
gbench
此包提供使用 Chrome 追踪进行代码基准测试的工具,以进行进一步分析。该包完全由 Rust 编写,无依赖项。
优点
- 如果关闭 debug_assertions,该包基于宏,这些宏将为空
- 写入基准测试数据几乎不会影响时间(在我的机器上每条跟踪1毫秒)
- 简单的宏语法
- 您可以控制收集的数据的保存方式
示例
有关更多示例和使用指南,请访问文档
use gbench::{instantiate, scope, ChromeTracing};
use std::thread;
fn calculate(num: f32, n: u32) -> f32 {
(0..n)
.fold((num, 0.0), |(x, v), _| (x + v * 0.01, v - x * 0.001))
.0
}
fn main() {
instantiate!(ChromeTracing("target/bench"));
scope!(program_scope | "Program scope");
// Doing the work that needs benchmarking
for _ in 0..5 {
scope!(main | "Main scope");
// Spawning a thread to do work
let thread = thread::spawn(move || {
// This benchmarks the scope that it is in
scope!(child | "Child");
calculate(1.0, 1_500_000)
});
// You can organize your subtasks in scopes to
// benchmark them
scope!(imp | "An important task");
{
scope!(i1 | "Important subtask");
calculate(1.0, 300_000);
}
{
scope!(i2 | "Less important subtask");
calculate(1.0, 500_000);
}
// If the block of code that you need to benchmark
// has ended you can drop the guard if the scope
// has not ended
drop(imp);
// Marking the start of another task
scope!(join | "Joining thread");
thread.join().unwrap();
// This line of code is unnecessary but I like
// to keep it
drop(join);
}
}
上面的代码生成以下跟踪