22 个版本 (12 个稳定版)

12.0.0 2024年5月31日
11.0.1 2024年1月13日
11.0.0 2023年12月18日
10.1.3 2024年5月30日
0.1.0 2019年3月14日

#14性能分析

Download history 15284/week @ 2024-04-29 15206/week @ 2024-05-06 13985/week @ 2024-05-13 15889/week @ 2024-05-20 14593/week @ 2024-05-27 16666/week @ 2024-06-03 20786/week @ 2024-06-10 20936/week @ 2024-06-17 20134/week @ 2024-06-24 19023/week @ 2024-07-01 19675/week @ 2024-07-08 21226/week @ 2024-07-15 20435/week @ 2024-07-22 21325/week @ 2024-07-29 20504/week @ 2024-08-05 17642/week @ 2024-08-12

每月下载 82,519
用于 52 个crate(9 个直接使用)

MIT/Apache

105KB
2K SLoC

此crate提供了一个用于高性能事件跟踪的库,该库被Rust编译器的非稳定功能 -Z self-profile 使用。

跟踪会话的输出将是一个包含事件流和字符串表的 .mm_profdata 文件,该字符串表允许解码事件流中的 StringId

编写事件跟踪文件

编写事件跟踪文件的主要入口点是 Profiler 结构。

要创建一个 Profiler,请调用 [Profiler::new()] 函数,并提供一个 Path,其中包含跟踪文件的目录和文件名。或者,调用 [Profiler::with_counter()] 函数,选择分析器将用于事件的 Counter(而 [Profiler::new()] 默认为 wall-time)。

有关可用的计数器的更多信息,请参阅 counters 模块文档。

要记录事件,请调用 [Profiler::record_instant_event()] 方法,传递一些参数

  • event_kind:一个将任意类别分配给事件的 StringId
  • event_id:一个指定事件名称的 StringId
  • thread_id:记录此事件的线程的 u32 ID

此外,事件还可以通过 [Profiler::start_recording_interval_event()] 方法记录。此方法记录一个“开始”事件,并返回一个将在其释放时自动记录相应“结束”事件的 TimingGuard 对象。

要创建一个 StringId,调用以下字符串分配方法之一

  • [Profiler::alloc_string()]:分配一个字符串并返回指向它的 StringId

依赖关系

~0.4–5.5MB
~15K SLoC