#性能分析器 #工具 #

rprofiler

一个用于简单代码性能分析的库,结果以 HTML 报告形式呈现

3 个不稳定版本

0.2.0 2020年11月18日
0.1.1 2020年11月17日
0.1.0 2020年11月15日

#285 in 性能分析

MIT 协议

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