Skip to main content

标准格式 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_eventtotal_durationcreate_timewindow_name 及其它性能细节字段

处理逻辑

  1. jank_event 分组,遍历每组。
  2. 每条数据生成一个 slice 事件:
    • process_name:统一为 gfx_200ms
    • track_name:为该条的 jank_event
    • event_name/name:为该条的 window_name
    • timestampcreate_time(转为毫秒时间戳)减去 total_duration(单位毫秒)
    • duration_nstotal_duration * 1_000_000
    • categorygfx
    • arguments:包含以下字段(会自动映射到 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"
}

工作流程(原理说明)

  1. 数据获取
    通过 HTTP POST 请求自动拉取原始性能数据(如 CPU/GFX 等),无需手动下载。
  2. 适配层转换
    每种原始格式有独立的适配层(如 adapters/cpu_short_adapter.py、adapters/gfx_adapter.py),负责将原始数据转换为标准格式列表。
  3. 主流程处理
    cli.py/api.py 负责自动获取数据、调用适配层转换为标准格式,然后调用 PerfettoTraceManager 生成 trace 文件。
  4. trace 生成
    PerfettoTraceManager.from_standard_format(data_list) 负责对标准格式数据做严格校验,并生成最终的 trace 文件。所有事件的时间戳会根据 timezone 参数自动转为UTC
  5. 可视化分析
    生成的 .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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tracegen-1.0.0-py3-none-any.whl (273.0 kB view details)

Uploaded Python 3

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

Hashes for tracegen-1.0.0.tar.gz
Algorithm Hash digest
SHA256 90db5a790d29be17fed5595ec7f66db870e3ca6953e00432dfb604a8ee55be31
MD5 033b98bfb3bb0adfb837920c7fae2249
BLAKE2b-256 3ae8419355f9b9f6814e82ea3c55a100be206dd7ccbdc5a197bbfc878ae1130f

See more details on using hashes here.

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

Hashes for tracegen-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d56dd05d1032059e4c74835586468f165a5ef923f71a59a188a899a0823b84a7
MD5 e67267f2791726b12d35505cd41b9c84
BLAKE2b-256 e43dbbbc094b3c84b63007ef26dfb0726e5d3e5700ac2721e797aa3a40fee64c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page