2. Perfetto 环境搭建:Android 端配置与桌面端 UI 安装
Perfetto 性能分析工具链由 Android 端数据采集与桌面端可视化分析两部分组成。本章将完整搭建从设备端到 PC 端的分析环境,确保 Camera HAL 性能数据能够被正确采集、传输与呈现。
2.1 环境概览与组件关系
Perfetto 的架构分为三层:数据源层(Android 内核与 HAL)、采集传输层(Perfetto 守护进程与 adb)、分析展示层(Perfetto UI)。下图展示了各组件之间的协作关系:
关键理解: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 环境验证清单
完成上述配置后,使用以下清单逐项确认环境就绪:
- Android 端:
traced与traced_probes进程运行正常 - 内核支持:
/sys/kernel/tracing目录可访问,包含available_events文件 - ADB 连接:
adb devices显示设备状态为device - 权限就绪:
adb shell perfetto --version返回版本号 - 桌面端 UI:浏览器打开 Perfetto UI 页面,无白屏或报错
- 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 |