25个版本 (16个重大变更)
0.18.0 | 2024年8月1日 |
---|---|
0.17.0 | 2024年5月12日 |
0.16.2 | 2024年3月24日 |
0.15.0 | 2023年10月26日 |
0.3.1 | 2021年3月6日 |
#30 在 图形API
每月 1,818 次下载
用于 11 个crate(6个直接)
71KB
1K SLoC
wgpu-profiler
使用计时查询的简单wgpu分析器作用域
功能
- 易于使用的分析器作用域
- 允许嵌套!
- 可以通过运行时标志禁用
- 此外还生成调试标记
- 线程安全 - 可以并行分析多个命令编码器/缓冲区
- 自动创建计时查询池
- 不需要事先知道需要多少查询/分析器作用域
- 缓存分析器帧直到结果可用
- 任何时候都不会阻塞设备!
- 许多分析器实例可以并行运行
- chrome trace flamegraph json导出
- Tracy集成(在
tracy
功能标志之后)
如何使用
创建一个新的分析器对象
use wgpu_profiler::{wgpu_profiler, GpuProfiler, GpuProfilerSettings};
// ...
let mut profiler = GpuProfiler::new(GpuProfilerSettings::default());
现在您可以开始创建分析器作用域
// You can now open profiling scopes on any encoder or pass:
let mut scope = profiler.scope("name of your scope", &mut encoder, &device);
// Scopes can be nested arbitrarily!
let mut nested_scope = scope.scope("nested!", &device);
// Scopes on encoders can be used to easily create profiled passes!
let mut compute_pass = nested_scope.scoped_compute_pass("profiled compute", &device);
// Scopes expose the underlying encoder or pass they wrap:
compute_pass.set_pipeline(&pipeline);
// ...
// Scopes created this way are automatically closed when dropped.
GpuProfiler
在第一次使用时读取设备功能
wgpu::Features::TIMESTAMP_QUERY
是发出任何计时查询所必需的。- 单独使用,这允许您在通道定义时使用时间戳写入,就像使用
Scope::scoped_compute_pass
/Scope::scoped_render_pass
一样
- 单独使用,这允许您在通道定义时使用时间戳写入,就像使用
wgpu::Features::TIMESTAMP_QUERY_INSIDE_ENCODERS
是在编码器中的任何位置发出查询所必需的。wgpu::Features::TIMESTAMP_QUERY_INSIDE_PASSES
是在通道中的任何位置发出查询所必需的。
Wgpu-profiler 需要插入缓冲区复制命令,因此当您完成编码器并不会对其执行更多分析器作用域时,您需要解决查询
profiler.resolve_queries(&mut encoder);
最后,要结束一个分析帧,请调用 end_frame
。这将执行一些检查,并会告知您是否有问题出现!
profiler.end_frame().unwrap();
检索最旧的可用帧并将其写入Chrome跟踪文件。
if let Some(profiling_data) = profiler.process_finished_frame(queue.get_timestamp_period()) {
wgpu_profiler::chrometrace::write_chrometrace(std::path::Path::new("mytrace.json"), &profiling_data);
}
要查看其实际运行情况,请查看示例项目!
许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确说明,否则您根据Apache-2.0许可证定义,有意提交的任何贡献,包括在作品中包含的贡献,都将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~3–35MB
~534K SLoC