#json-format #profile #firefox #profiler #processed #sample #table

fxprof-processed-profile

使用 Firefox 分析器的处理分析 JSON 格式创建配置文件

7 个版本 (重大变更)

0.7.0 2024年4月15日
0.6.0 2023年4月22日
0.5.0 2023年1月6日
0.4.0 2022年5月23日
0.1.0 2022年5月8日

#26 in 性能分析

Download history 40504/week @ 2024-05-02 43863/week @ 2024-05-09 48772/week @ 2024-05-16 38607/week @ 2024-05-23 43439/week @ 2024-05-30 39400/week @ 2024-06-06 46342/week @ 2024-06-13 46720/week @ 2024-06-20 45712/week @ 2024-06-27 38451/week @ 2024-07-04 44833/week @ 2024-07-11 46644/week @ 2024-07-18 44136/week @ 2024-07-25 42418/week @ 2024-08-01 43919/week @ 2024-08-08 34478/week @ 2024-08-15

每月下载量 172,384
77 个 Crates 中使用 (直接使用 3 个)

MIT/Apache 许可证

130KB
2.5K SLoC

fxprof-processed-profile

一个 Crates,允许在 Firefox 分析器"处理分析" 格式 中创建配置文件。

仍在开发中,文档不足,并且经常会有重大变更。

描述

此 Crates 是与 gecko_profile Crates 相同的 Crates。

使用此 Crates 生成的配置文件可以更高效,因为它们允许 Firefox 分析器在加载过程中跳过一个处理步骤,并且因为这个格式支持样本表中的“权重”列。样本权重可以用来将重复的连续样本合并为一个样本,这意味着不需要将单个样本的时间戳序列化到 JSON 中。这可以节省大量空间。

关于格式

当使用 Firefox 与 Firefox 分析器一起使用时,Firefox 分析器接收“Gecko 分析”格式的配置文件数据。然后将其转换为“处理分析”格式。

“处理分析”格式是当上传配置文件以共享或将其作为文件下载时存储文件的格式。它与“Gecko 分析”格式的不同之处如下:

  • 所有进程中的线程有一个平面的列表。每个线程都附带有关其进程的一些信息,这使得 Firefox 分析器能够将属于同一进程的线程分组。
  • 由于平面的列表,所有线程的时间戳(来自所有进程)都相对于相同的参考时间戳。这与“Gecko 分析”格式不同,其中每个进程都有自己的时间基。
  • 每个线程中的各种表格都存储在“数组结构”的形式中。例如,样本表格包含一个时间戳的扁平列表,一个堆栈索引的扁平列表等。这与包含每个样本一个JS对象的“Gecko配置文件”格式不同,那个对象是一个数组,如[stack_index, time, eventDelay, cpuDelta]。数组结构形式使得数据更容易访问,并且对浏览器的GC压力较小。
  • “处理配置文件”格式的样本表格支持权重列。目前“Gecko配置文件”格式不支持样本权重。
  • 每个线程都有一个funcTable、一个resourceTable和一个nativeSymbols表格。这些表格在“Gecko配置文件”格式中不存在。
  • frameTable的结构不同。例如,来自本地堆栈的每个帧都有一个相对于包含此地址的库的整数代码地址。在“Gecko配置文件”格式中,代码地址以绝对形式(进程虚拟内存地址)作为十六进制字符串存储。
  • “处理配置文件”格式中的本地堆栈使用“微调”的返回地址,即返回地址减去一个字节,以便它们指向调用指令。这与使用原始返回地址的“Gecko配置文件”格式不同。

“处理配置文件”格式几乎与Firefox Profiler在内存中保持的JavaScript对象结构相同;唯一的区别是使用stringArray(这是一个简单的JSON数组字符串)而不是stringTable(这是一个包含数组和快速字符串到索引查找映射的对象)。

依赖项

~1.1–2MB
~44K SLoC