32 个版本 (17 个重大更新)

0.19.1 2024年7月31日
0.19.0 2024年1月17日
0.18.1 2023年12月11日
0.18.0 2023年11月21日
0.3.1 2020年11月9日

#9 in 性能分析

Download history 11816/week @ 2024-05-03 14480/week @ 2024-05-10 16002/week @ 2024-05-17 16005/week @ 2024-05-24 15580/week @ 2024-05-31 14802/week @ 2024-06-07 16216/week @ 2024-06-14 17205/week @ 2024-06-21 19054/week @ 2024-06-28 19029/week @ 2024-07-05 18891/week @ 2024-07-12 18140/week @ 2024-07-19 17469/week @ 2024-07-26 19897/week @ 2024-08-02 18382/week @ 2024-08-09 18037/week @ 2024-08-16

每月76,724 次下载
用于 153 个软件包 (44 直接使用)

MIT/Apache

120KB
2.5K SLoC

🐦 puffin

Rust 的友好型小性能分析器

Puffin photo by Richard Bartz

(照片由 Richard Bartz 提供)

Embark Embark Crates.io Docs dependency status Build Status

如何使用

fn my_function() {
    puffin::profile_function!();
    ...
    if ... {
        puffin::profile_scope!("load_image", image_name);
        ...
    }
}

海豚鱼宏将数据写入线程局部数据流。当线程的最外层作用域关闭时,数据流被发送到全局分析器收集器。这些作用域非常轻量级,在 M1 MacBook Pro 上的成本约为 60 纳秒。

在它捕获任何数据之前,您必须通过调用 puffin::set_scopes_on(true); 启用分析器。当分析器关闭时,分析器作用域宏在 M1 MacBook Pro 上的开销仅为 1 纳秒(加上一些堆栈空间)。

每次帧更新时,您需要调用 puffin::GlobalProfiler::lock().new_frame();

Puffin Flamegraph using puffin_egui

远程分析

您可以使用 puffin_http 将分析事件通过 TCP 发送到 puffin_viewer。这就像

fn main() {
    let server_addr = format!("127.0.0.1:{}", puffin_http::DEFAULT_PORT);
    let _puffin_server = puffin_http::Server::new(&server_addr).unwrap();
    eprintln!("Run this to view profiling data:  puffin_viewer {server_addr}");
    puffin::set_scopes_on(true);// You also need to periodically call
    // `puffin::GlobalProfiler::lock().new_frame();`
    // to flush the profiling events.
}

egui 集成

要查看游戏中的分析数据,您可以使用 puffin_egui

如果您正在使用 eframe,您可以查看 此示例

其他

此外,请查看crate profiling,它为puffin和其他性能分析crate提供了一个统一的抽象层。

贡献

Contributor Covenant

我们欢迎社区为此项目做出贡献。

请阅读我们的贡献指南,了解如何开始贡献。

发布

我们使用cargo release工具来管理变更日志、git标签和crate发布。

每个重大的拉取请求都应该在[未发布]部分添加一个变更日志条目(参见keep a changelog和之前的变更日志条目)。在PR中,Cargo.toml中的crate版本永远不会手动更新,因为它由cargo release处理。

许可协议

许可协议为以下之一

任选其一。

贡献

除非你明确表示否则,根据Apache-2.0许可定义的,任何有意提交以包含在你贡献的工作中的内容,都应如上所述双重许可,不附加任何额外条款或条件。

依赖关系

~1–7MB
~41K SLoC