2. Perfetto 环境搭建:Android 端配置与桌面端 UI 安装

Perfetto 性能分析工具链由 Android 端数据采集与桌面端可视化分析两部分组成。本章将完整搭建从设备端到 PC 端的分析环境,确保 Camera HAL 性能数据能够被正确采集、传输与呈现。

2.1 环境概览与组件关系

Perfetto 的架构分为三层:数据源层(Android 内核与 HAL)、采集传输层(Perfetto 守护进程与 adb)、分析展示层(Perfetto UI)。下图展示了各组件之间的协作关系:

Perfetto 环境组件架构图 Android 端数据源层 Linux Kernel HAL Service SurfaceFlinger 其他进程 采集传输层 traced 守护进程 perfetto 命令行 adb 桥接 桌面端分析展示层 Perfetto UI (浏览器) traceconv 转换工具 Python SDK
关键理解:Perfetto 采用“一次采集、多端分析”的设计。Android 端只负责原始数据的采集与缓冲,所有复杂的可视化与指标计算都在桌面端 Perfetto UI 中完成。这种分离架构使得低功耗设备也能进行高性能的 profiling。

2.2 Android 端 Perfetto 配置

2.2.1 系统版本要求

Android 版本 Perfetto 支持状态 推荐配置
Android 9 (Pie) 基础支持(需手动启用) 仅限内核 trace
Android 10 (Q) 原生支持 支持 HAL tracepoints
Android 11 (R) 及以上 完整支持 支持 atrace + ftrace + heapprofd

2.2.2 内核配置检查

Perfetto 依赖内核的 ftrace 框架。执行以下命令确认内核是否开启必要选项:

# 检查 ftrace 是否启用
adb shell cat /sys/kernel/tracing/trace_clock
# 预期输出:local global counter uptime perf mono
# 检查 tracefs 挂载点
adb shell mount | grep tracefs
# 预期输出:tracefs on /sys/kernel/tracing type tracefs (rw,...)

2.2.3 用户空间守护进程

Android 10+ 系统预置了 traced 和 traced_probes 两个守护进程。验证它们是否正常运行:

# 检查 traced 进程状态
adb shell ps -A | grep traced
# 正常输出应包含:
# traced         1234   ...  com.android.traced
# traced_probes  1235   ...  com.android.traced_probes

# 如果未运行,手动启动
adb shell setprop persist.traced.enable 1
adb reboot

2.3 桌面端 Perfetto UI 安装

Perfetto UI 提供两种使用方式,推荐使用 本地部署 以获得最佳性能与数据隐私保护。

2.3.1 方式一:在线版(快速体验)

直接访问 https://ui.perfetto.dev,无需安装。适合临时分析小规模 trace 文件。

2.3.2 方式二:本地部署(推荐)

使用 Docker 或直接下载静态文件:

# 使用 Docker 部署(推荐)
docker pull perfetto/perfetto-ui:latest
docker run -d -p 9001:80 perfetto/perfetto-ui:latest
# 访问 http://localhost:9001

# 或直接下载静态文件
wget https://storage.googleapis.com/perfetto-ui/perfetto-ui.zip
unzip perfetto-ui.zip -d perfetto-ui
# 使用任意 HTTP 服务器托管
cd perfetto-ui && python3 -m http.server 9001

2.3.3 安装 traceconv 转换工具

用于将原始 trace 数据转换为可分析格式:

# Linux / macOS
curl -LO https://get.perfetto.dev/traceconv
chmod +x traceconv
sudo mv traceconv /usr/local/bin/

# 验证安装
traceconv --version
# 预期输出:traceconv 40.0 (Perfetto v40.x)

2.4 ADB 连接与权限设置

2.4.1 ADB 连接检查

# 确认设备已连接
adb devices -l
# 输出示例:
# List of devices attached
# 0123456789ABCDEF       device usb:3-1 product:... model:... transport_id:1

# 确认设备支持 Perfetto
adb shell perfetto --version
# 预期输出:perfetto - ... - ...

2.4.2 权限配置

Perfetto 需要以下权限才能采集 Camera HAL 相关数据:

权限项 用途 配置方法
android.permission.DUMP 访问系统服务 dump 信息 adb shell pm grant <包名> android.permission.DUMP
android.permission.PACKAGE_USAGE_STATS 跟踪应用进程状态 adb shell appops set <包名> GET_USAGE_STATS allow
root 权限 访问内核 ftrace 与 HAL 驱动 adb root(需要设备已 root)
重要提示:Camera HAL 性能分析通常需要 adb root 权限才能采集到完整的硬件驱动 trace 和 DMA 缓冲区信息。如果设备无法 root,可以尝试使用 adb shell setprop persist.traced.enable 1 并重启,部分系统服务 trace 仍可采集。

2.4.3 验证权限是否生效

# 测试基本 trace 采集能力
adb shell perfetto -c - --txt -o /data/misc/perfetto-traces/test_trace \
  <<< '{
    "buffers": [{"size_kb": 1024}],
    "data_sources": [{"config": {"name": "linux.ftrace"}}],
    "duration_ms": 2000
  }'

# 检查 trace 文件是否生成
adb shell ls -lh /data/misc/perfetto-traces/test_trace
# 预期输出:-rw-rw---- 1 ... 1.2K ... test_trace

2.5 环境验证清单

完成上述配置后,使用以下清单逐项确认环境就绪:

  1. Android 端:traced 与 traced_probes 进程运行正常
  2. 内核支持:/sys/kernel/tracing 目录可访问,包含 available_events 文件
  3. ADB 连接:adb devices 显示设备状态为 device
  4. 权限就绪:adb shell perfetto --version 返回版本号
  5. 桌面端 UI:浏览器打开 Perfetto UI 页面,无白屏或报错
  6. trace 写入:/data/misc/perfetto-traces/ 目录存在且可写
实战建议:在正式进行 Camera HAL 性能分析前,先使用 perfetto -c - --txt -o /data/misc/perfetto-traces/verify_trace 采集一段 5 秒的简单 trace,然后通过 adb pull 拉取到桌面端,拖入 Perfetto UI 验证可视化是否正常。这一步可以提前发现权限或配置问题,避免在正式分析时浪费时间。

2.6 常见问题与排查

问题现象 可能原因 解决方案
perfetto: command not found 系统版本低于 Android 10 或 ROM 裁剪 手动推送 perfetto 二进制:adb push perfetto /data/local/tmp/
Permission denied 写入 trace selinux 策略限制 adb shell setenforce 0(临时关闭)或使用 /data/local/tmp/ 目录
UI 页面加载空白 浏览器 WebGL 未启用或版本过旧 使用 Chrome 90+ 或 Firefox 90+,开启硬件加速
trace 文件拉取失败 文件权限不足 adb shell chmod 644 /data/misc/perfetto-traces/*.trace