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 性能分析
每月76,724 次下载
用于 153 个软件包 (44 直接使用)
120KB
2.5K SLoC
如何使用
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_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
。
其他
此外,请查看crate profiling
,它为puffin
和其他性能分析crate提供了一个统一的抽象层。
贡献
我们欢迎社区为此项目做出贡献。
请阅读我们的贡献指南,了解如何开始贡献。
发布
我们使用cargo release工具来管理变更日志、git标签和crate发布。
每个重大的拉取请求都应该在[未发布]
部分添加一个变更日志条目(参见keep a changelog和之前的变更日志条目)。在PR中,Cargo.toml
中的crate版本永远不会手动更新,因为它由cargo release
处理。
许可协议
许可协议为以下之一
- Apache License,版本2.0,(LICENSE-APACHE或http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示否则,根据Apache-2.0许可定义的,任何有意提交以包含在你贡献的工作中的内容,都应如上所述双重许可,不附加任何额外条款或条件。
依赖关系
~1–7MB
~41K SLoC