// span.rs 文件分析usecrate::core::window;useserde::{Deserialize,Serialize};/// 性能追踪的跨度(Span)枚举/// 定义了应用程序中可以被追踪的不同阶段#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]pubenumSpan{/// 启动阶段Boot,/// 更新阶段 - 处理应用逻辑Update{number:usize,// 更新序号message:String,// 处理的消息tasks:usize,// 任务数量subscriptions:usize,// 订阅数量},/// 视图构建阶段View{window:window::Id,// 窗口ID},/// 布局计算阶段Layout{window:window::Id,// 窗口ID},/// 交互处理阶段Interact{window:window::Id,// 窗口ID},/// 绘制阶段Draw{window:window::Id,// 窗口ID},/// 呈现阶段 - 包含更细粒度的子阶段Present{window:window::Id,// 窗口IDprepare:present::Stage,// 准备阶段耗时render:present::Stage,// 渲染阶段耗时layers:usize,// 图层数量},/// 自定义阶段Custom{name:String,// 自定义阶段名称},}/// 扁平化的阶段枚举(用于序列化)#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]pubenumStage{Boot,// 启动阶段Update,// 更新阶段View(window::Id),// 视图阶段(带窗口ID)Layout(window::Id),// 布局阶段(带窗口ID)Interact(window::Id),// 交互阶段(带窗口ID)Draw(window::Id),// 绘制阶段(带窗口ID)Present(window::Id),// 呈现阶段(带窗口ID)Prepare(present::Primitive),// 准备阶段(带图元类型)Render(present::Primitive),// 渲染阶段(带图元类型)Custom(String),// 自定义阶段}/// 为Stage实现Display trait,使其可以转换为字符串implstd::fmt::DisplayforStage{fnfmt(&self,f:&mutstd::fmt::Formatter<'_>)->std::fmt::Result{f.write_str(matchself{Stage::Boot=>"Boot",Stage::Update=>"Update",Stage::View(_)=>"View",Stage::Layout(_)=>"Layout",Stage::Interact(_)=>"Interact",Stage::Draw(_)=>"Draw",Stage::Prepare(_)=>"Prepare",Stage::Render(_)=>"Render",Stage::Present(_)=>"Present",Stage::Custom(name)=>name,})}}/// 呈现相关的子模块pubmodpresent{usecrate::core::time::Duration;useserde::{Deserialize,Serialize};/// 呈现阶段的性能数据/// 记录各种渲染操作的耗时#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]pubstructStage{pubquads:Duration,// 四边形渲染耗时pubtriangles:Duration,// 三角形渲染耗时pubshaders:Duration,// 着色器执行耗时pubtext:Duration,// 文本渲染耗时pubimages:Duration,// 图片渲染耗时}/// 渲染图元类型枚举/// 定义了基本的渲染元素类型#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]pubenumPrimitive{Quad,// 四边形Triangle,// 三角形Shader,// 着色器Text,// 文本Image,// 图片}}文件说明
主要用途
这是icedGUI 框架的性能追踪系统的一部分,用于收集和分析应用程序各个阶段的性能数据。
核心组件
Span枚举:定义了应用生命周期中的主要阶段,包含详细的性能数据字段Stage枚举:Span的扁平化版本,主要用于序列化和数据交换present模块:提供渲染阶段的细粒度性能数据收集
特性
- 支持详细的性能分析
- 可序列化(通过 Serde),便于导出和可视化
- 支持自定义追踪阶段
- 区分不同窗口的独立性能数据
这个系统允许开发者追踪从启动到渲染的完整应用生命周期,帮助识别性能瓶颈和优化应用性能。