标准格式 Trace 生成工具,将原始数据一键转为 Perfetto trace 文件
Project description
Tracegen 标准格式 Trace 生成工具
项目简介
本项目用于将多种原始性能数据(如 CPU、GFX、PSI 等)统一转换为 Perfetto trace 文件,便于性能分析和可视化。核心思想是:所有 trace 生成流程只处理标准格式数据,各类原始数据通过适配层(adapter)转换为标准格式,极大提升了可维护性、扩展性和团队协作效率。
目录结构
tracegen/
├── tracegen/ # 主包目录,所有核心代码和API
│ ├── __init__.py
│ ├── api.py # 主要API和实现逻辑(run_trace_convert等)
│ ├── data_fetcher.py # 数据获取
│ ├── adapters/
│ │ ├── __init__.py
│ │ ├── cpu_short_adapter.py
│ │ └── gfx_adapter.py # GFX数据适配器
│ ├── perfetto/
│ │ ├── __init__.py
│ │ └── perfetto_trace_manager.py
├── cli.py # 命令行入口,只负责参数解析和调用API
├── configs/
│ └── standard_trace_schema.json
├── requirements.txt
├── README.md
└── ... # 其它文件
一键数据获取与 Trace 生成
1. 安装依赖
pip install -r requirements.txt
2. 命令行一键生成 Trace
支持通过 VIN、时间区间、数据类型一键获取数据并生成 trace 文件。
tracegen -v HLX33B121R1647380 -s "2025-02-06 21:40:14" -e "2025-02-06 22:10:14" -t short -t gfx --timezone +0800
-v/--vin:车辆VIN码-s/--start-time:开始时间(格式YYYY-MM-DD HH:MM:SS)-e/--end-time:结束时间(格式YYYY-MM-DD HH:MM:SS)-t/--type:数据类型,可多次指定,如-t short -t gfx--timezone:时区,格式如+0800或-0600,所有trace事件的时间戳会自动统一为UTC
输出文件名格式:
{VIN}_{开始时间}_{结束时间}_trace.perfetto
# 例:HLX33B121R1647380_2025-02-06-21-40-14_2025-02-06-22-10-14_trace.perfetto
3. 作为 API 调用
可在 Python 代码中直接调用主流程:
from tracegen.api import run_trace_convert
run_trace_convert(
vin="HLX33B121R1647380",
start_time="2025-02-06 21:40:14",
end_time="2025-02-06 22:10:14",
types=["short", "gfx"],
timezone='+0800' # 统一时区,所有trace事件自动转为UTC
)
GFX 适配器说明
输入数据要求
- 输入为包含多个字典的列表,每个字典需包含如下字段:
jank_event、total_duration、create_time、window_name及其它性能细节字段
处理逻辑
- 按
jank_event分组,遍历每组。 - 每条数据生成一个
slice事件:process_name:统一为gfx_200mstrack_name:为该条的jank_eventevent_name/name:为该条的window_nametimestamp:create_time(转为毫秒时间戳)减去total_duration(单位毫秒)duration_ns:total_duration* 1_000_000category:gfxarguments:包含以下字段(会自动映射到 Perfetto UI 的 Arguments 面板):mark_animation_time,ui_draw_time,sync_time,handle_input_time,draw_command_time,perform_traversals_time,current_frame_index,gpu_slow,ui_thread_dely,swap_buffers_and_gpu_draw_time
示例标准格式输出
{
"event_type": "slice",
"process_name": "gfx_200ms",
"track_name": "FirstFrame",
"timestamp": 1738850126257,
"duration_ns": 269000000,
"event_name": "com.liauto.onemap.mapeidcard.MapEidCardActivity",
"category": "gfx",
"arguments": {
"mark_animation_time": 0,
"ui_draw_time": 3,
...
},
"name": "com.liauto.onemap.mapeidcard.MapEidCardActivity"
}
工作流程(原理说明)
- 数据获取
通过 HTTP POST 请求自动拉取原始性能数据(如 CPU/GFX 等),无需手动下载。 - 适配层转换
每种原始格式有独立的适配层(如 adapters/cpu_short_adapter.py、adapters/gfx_adapter.py),负责将原始数据转换为标准格式列表。 - 主流程处理
cli.py/api.py 负责自动获取数据、调用适配层转换为标准格式,然后调用 PerfettoTraceManager 生成 trace 文件。 - trace 生成
PerfettoTraceManager.from_standard_format(data_list) 负责对标准格式数据做严格校验,并生成最终的 trace 文件。所有事件的时间戳会根据 timezone 参数自动转为UTC。 - 可视化分析
生成的 .perfetto 文件可直接用 Perfetto UI 打开分析。
标准格式说明(与 schema 保持一致)
- event_type: 必须为 "counter"、"slice"、"instant"、"log" 之一
- process_name, track_name: 必须为字符串
- timestamp: 必须为毫秒(ms)数值,为本地时区时间,最终会自动转为UTC
- value, duration_ns, message, arguments 等字段类型见 configs/standard_trace_schema.json
- arguments 字段会自动映射到 Perfetto UI 的 Arguments 面板
适配层开发规范
- 每种原始数据类型都应有独立的适配层脚本,输出标准格式数据。
- 适配层只负责"原始数据 → 标准格式",主流程和 trace 生成代码无需修改。
- 支持 offset、时区等灵活配置,推荐用字符串表达式(如 '+08h'、'-30s')。
校验与健壮性
- PerfettoTraceManager.from_standard_format 会对所有标准格式字段做严格校验,遇到不合法数据会详细警告并跳过。
- 推荐用 configs/standard_trace_schema.json 做自动化校验,保证数据质量。
团队协作建议
- 统一标准格式和适配层开发规范,便于多人协作和新成员快速上手。
- 所有配置、schema、适配层模板集中管理,便于维护和自动化。
联系与贡献
如有问题或建议,欢迎 issue 或 PR!
数据获取(data_fetcher.py)错误处理说明
fetch_data函数支持多节点容灾:- 内置多个服务节点(如 dev、prod),顺序尝试访问。
- 只要有一个节点成功返回有效数据(data为非空列表),即立即返回。
- 所有节点都失败(网络异常、格式错误、data为空等)才返回空列表,并记录所有节点的错误日志。
- 返回值约定:
- 正常情况下返回原始数据列表(list)。
- 出现任何异常或数据格式问题时,返回空列表([]),并通过 logging 输出详细错误信息,便于排查。
- 典型错误场景举例:
- 网络断开、接口地址错误、服务器无响应。
- 返回内容不是 JSON 或 JSON 结构异常。
- data 字段缺失或类型错误。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tracegen-1.0.0.tar.gz
(261.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
tracegen-1.0.0-py3-none-any.whl
(273.0 kB
view details)
File details
Details for the file tracegen-1.0.0.tar.gz.
File metadata
- Download URL: tracegen-1.0.0.tar.gz
- Upload date:
- Size: 261.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90db5a790d29be17fed5595ec7f66db870e3ca6953e00432dfb604a8ee55be31
|
|
| MD5 |
033b98bfb3bb0adfb837920c7fae2249
|
|
| BLAKE2b-256 |
3ae8419355f9b9f6814e82ea3c55a100be206dd7ccbdc5a197bbfc878ae1130f
|
File details
Details for the file tracegen-1.0.0-py3-none-any.whl.
File metadata
- Download URL: tracegen-1.0.0-py3-none-any.whl
- Upload date:
- Size: 273.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d56dd05d1032059e4c74835586468f165a5ef923f71a59a188a899a0823b84a7
|
|
| MD5 |
e67267f2791726b12d35505cd41b9c84
|
|
| BLAKE2b-256 |
e43dbbbc094b3c84b63007ef26dfb0726e5d3e5700ac2721e797aa3a40fee64c
|