3 个不稳定版本
0.2.0 | 2020年11月18日 |
---|---|
0.1.1 | 2020年11月17日 |
0.1.0 | 2020年11月15日 |
#285 in 性能分析
20KB
371 行
一个用于简单代码性能分析的库,结果以 HTML 报告形式呈现。
使用方法
首先,通过调用 rprofiler::PROFILER.initialize()
方法初始化 rprofiler。这个方法返回一个 ProfilerData 结构体对象,其中将收集所有运行时信息。然后你可以使用特殊的 profile_block
宏来分析代码块。它有一些语法变体
profile_block!();
profile_block!(name "name of code block");
// Conditional profiling
profile_block!(if_feature "feature name of your crate");
profile_block!(if_feature "feature name of your crate", name "name of code block");
这个宏生成特殊的内部事件,这些事件将被推送到内部事件队列中。你应该定期调用 rprofiler::PROFILER.process_events(...)
方法来处理这些事件并清空队列。例如,这个方法可以在每个游戏帧结束时调用。
性能分析结束时,你应该调用 rprofiler::PROFILER.shutdown(...)
方法。它将处理所有收集到的信息,并将结果保存为 HTML 文档到指定的文件中。
你可以在编译时通过在项目的 Cargo.toml 中启用功能 "disable_profiling" 来禁用所有性能分析。
[package]
name = "game"
version = "0.1.0"
edition = "2018"
[dependencies.rprofiler]
version = "0.2"
features = ["disable_profiling"]
示例
fn factorial(value: i32) -> i32 {
match value > 1 {
true => value*factorial(value - 1),
false => 1,
}
}
fn test_func() -> i32 {
profile_block!();
(0..10).map(|i| factorial(i)).sum()
}
fn main() {
let mut profiler_data = PROFILER.initialize();
for _ in 0..1000 {
for _ in 0..1_000_000 {
test_func();
}
PROFILER.process_events(&mut profiler_data);
}
PROFILER.shutdown("./profiler_report.html", &mut profiler_data);
}
依赖项
~300KB