spall web
1.0.0
spall 是一个探查器库和一个 Web 前端,用于探索代码并挖掘潜在的性能问题。

^ 这是来自 Happenlance 的 180 MB(相当于 526 MB JSON)、5 分钟的跟踪,由 @pmttavara 提供!
在 Gravity Moth 尝试一下
spall 包含一个小型单头 C 库spall.h 。
spall 目前支持 2 种不同的文件格式:
perfetto 、 chrome://tracing和speedscope使用的 Google 跟踪格式,如下所述您可以使用我们的标头来检测代码,也可以使用现有的chrome://tracing兼容 JSON 转储代码。
如果您从头开始,您可能希望使用 spall 标头来生成事件。二进制格式的分析开销要低得多(因此您的跟踪应该更准确),并且摄取速度比 JSON 格式快大约 10 倍。
如果你想使用 JSON,sll 期望事件遵循 Google 的 JSON 跟踪格式,它们看起来像这样:
[
{"cat":"function", "name":"main", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0}
]
(spall 不关心尾随逗号,并且不需要右括号,以简化文件创建/事件流)
cat - 事件类别。目前未使用
name - 事件的名称,一个字符串
ph - 事件类型
| 类型 | 象征 |
|---|---|
| 开始 | “乙” |
| 结尾 | “E” |
| 完全的 | “X” |
tid - 线程 ID,u32 pid - 进程 ID,u32
所有 tid 和 pid 必须介于 0 和 u32_MAX 之间,作为整数值
ts - 时间戳,双精度型,以微秒为单位dur - 时间戳,双精度型,以微秒为单位
(时间戳 1 从 1 μs 开始)
Spall 目前仅支持 Begin、End 和 Complete 事件
{"cat":"function", "name":"foo", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
完整事件需要持续时间字段,因为它们一次性跟踪函数的开始/结束
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0},
结束事件会自动关闭具有相同 pid 和 tid 的最近开始事件,因此它们不需要名称
无论摄取格式如何,进程/线程 (pid/tid) 中的所有开始和结束事件都应首先采用最早的时间戳,排序顺序例如:
[
{"cat":"function", "name":"main", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "name":"foo", "ph": "B", "pid": 0, "tid": 0, "ts": 1},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 2},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 3}
]