关于 bevy-diagnostics-profiling
面向 Bevy 0.19 开发者的诊断与性能分析技能,介绍如何组合指标、追踪和渲染诊断来定位耗时并评估平台性能。内容涵盖诊断路径、GPU 指标限制和可重复的性能验收。
主要功能
- 01注册稳定命名的诊断指标
- 02查看指标历史与平滑值
- 03使用追踪跨度分析执行耗时
- 04记录渲染 CPU 与 GPU 指标
- 05说明各图形后端的测量限制
- 06制定可重复的性能验收
适用场景
- 01调查帧时间或渲染通道耗时
- 02跟踪队列深度、延迟和高水位
- 03比较目标设备上的性能预算
- 04区分不支持的 GPU 测量与零耗时
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-diagnostics-profiling安装后在 Claude Code 中输入/bevy-diagnostics-profiling确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/budgets-and-telemetry.mddiagnostics-and-tracing.mdrender-and-platform-profiling.md详细介绍
Bevy 0.19 — 诊断与性能分析
何时使用此技能
- 帧、渲染通道、工作线程流水线或上传路径需要因果证据。
- 队列/任务系统需要稳定的仪表值、计数器、延迟和高水位。
- 性能声明必须通过原生平台、Steam Deck 或浏览器的验收预算。
- 缺少渲染 GPU 诊断数据,或其结果与 CPU 跟踪不一致。
诊断回答“随时间发生了什么?”。跟踪回答“这次执行的耗时花在哪里?”。渲染诊断提供通道级渲染器测量数据。三者都要用,但不要把其中任何一项单独视为瓶颈的证据。
标准模式
use bevy::{
diagnostic::{
Diagnostic, DiagnosticPath, Diagnostics, RegisterDiagnostic,
},
prelude::*,
};
const REMESH_QUEUE_DEPTH: DiagnosticPath =
DiagnosticPath::const_new("voxel/remesh_queue_depth");
#[derive(Resource, Default)]
struct RemeshQueue {
valid_jobs: usize,
}
struct VoxelDiagnosticsPlugin;
impl Plugin for VoxelDiagnosticsPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<RemeshQueue>()
.register_diagnostic(
Diagnostic::new(REMESH_QUEUE_DEPTH).with_suffix(" sections"),
)
.add_systems(Update, record_voxel_diagnostics);
}
}
fn record_voxel_diagnostics(
queue: Res<RemeshQueue>,
mut diagnostics: Diagnostics,
) {
diagnostics.add_measurement(&REMESH_QUEUE_DEPTH, || queue.valid_jobs as f64);
}
路径属于 API:使用带命名空间且稳定的名称,并在后缀或文档中明确标注单位。记录数据前先注册。DiagnosticsStore 提供最新值和历史/平滑值,可用于显示和导出。测量数据是延迟遥测,不是同一系统内的同步机制。
内置插件
FrameTimeDiagnosticsPlugin:FPS、帧时间和帧数。EntityCountDiagnosticsPlugin:活动实体数量。SystemInformationDiagnosticsPlugin:在支持的原生目标上获取进程/系统 CPU 和内存数据。WASM、iOS 和动态链接构建不支持此插件,或该插件不执行任何操作。LogDiagnosticsPlugin:用于开发环境的输出;过滤路径并设置输出频率,以避免噪声。RenderDiagnosticsPlugin:每个记录的渲染跨度的 CPU/GPU 时间,以及后端支持时的流水线统计数据。
从 bevy::render::diagnostic 添加 RenderDiagnosticsPlugin。它会创建形如 render/<span>/elapsed_cpu 的动态路径,并在支持时创建 render/<span>/elapsed_gpu,以及调用次数/图元统计数据。
用跟踪分析因果关系
在优化构建中启用一个后端:
cargo run --release --features bevy/trace_tracy
cargo run --release --features bevy/trace_chrome
trace_tracy_memory 会添加内存分配跟踪,但会带来额外开销。在关心其成因的工作周围添加粗粒度跨度:
use bevy::prelude::*;
fn rebuild_visible_sections() {
let _span = info_span!("rebuild_visible_sections").entered();
// measured work
}
避免使用高基数跨度名称,也不要为每个元素创建跨度。仅在针对性采集期间,将区段/实体 ID 作为字段记录。持续观测时,使用低开销的诊断仪表值/计数器,并在排查问题时启用详细跟踪。
注意事项与平台实际情况
Bevy 0.19 的渲染时间戳查询和流水线统计数据支持 Vulkan 和 DX12。Metal、WebGPU 和 WebGL2 只能通过 RenderDiagnosticsPlugin 提供 CPU 渲染时间。缺少 elapsed_gpu 表示不支持该测量,并不意味着 GPU 开销为零。可用时请使用厂商/平台提供的 GPU 性能分析器;RenderDoc 是图形调试器,不是性能分析器。
应针对正式发布时使用的渲染器、分辨率、电源模式、内容和构建配置进行性能分析。桌面端的结果不能证明 Steam Deck 或浏览器的预算达标。
选择相关深入指南
| 问题 | 阅读内容 |
|---|---|
| 指标类型、稳定路径、诊断存储、跟踪跨度 | 诊断与跟踪 |
| 渲染诊断、后端限制、CPU/GPU 工具选择 | 渲染与平台性能分析 |
| 验收阈值、回放设计、队列/任务/上传遥测 | 预算与遥测 |
审查清单
- 每个数值都明确标注类型(仪表值/计数器/直方图)、单位、范围和采样规则。
- 队列深度不包含已过时的堆条目;延迟时间戳使用同一时钟。
- 跨度涵盖队列等待、工作线程计算、主线程应用,以及渲染/上传开销。
- 性能采集使用接近正式发布的配置,可重复、预热完成,并覆盖每个声明支持的目标平台。
- 报告包含百分位数和持续时间最长的区间,而不只是平均值。
- 不支持的 GPU 数值应保持缺失,绝不能转换为零。
- 测量了插桩开销,并在正常发布运行中禁用或减少插桩。
另请参阅
bevy-voxel-runtime— 具体的队列、过期结果和上传指标。bevy-rendering— 渲染器架构和自定义渲染系统。bevy-testing— 确定性基准测试回放和视觉捕获。- Bevy 诊断
- Bevy 渲染诊断
- Bevy 0.19 性能分析指南