性能监控
Tapilot 在跑测试的同时采集设备性能指标,输出到 run.md 或可视化图表,用来:
- 建立性能基线(每次发版对比)
- 定位掉帧/卡顿(FPS drop)
- 发现内存泄漏(长跑内存持续涨)
- 监控电量消耗(每 10 分钟耗电是否异常)
采集的指标(Android)
| 指标 | 来源 | 说明 |
|---|---|---|
| CPU 使用率 | top / dumpsys cpuinfo | 整机 + 指定 package |
| 内存 | dumpsys meminfo | Total PSS / Java Heap / Native Heap |
| FPS | dumpsys gfxinfo --reset + framestats | 每秒平均帧率 + jank count |
| 电量 / 温度 | dumpsys battery | level / temperature / charging |
| 网络流量 | cat /proc/net/xt_qtaguid/stats | rx/tx bytes per uid |
iOS
目前仅覆盖基础:
- 内存 / CPU(
simctl spawn top或 XCTest) - FPS 受限(需要 instrumented build)
完整 iOS 性能建议用 Xcode Instruments,Tapilot 做"粗粒度"采集。
使用方式
1. MCP tool — 一次性采集
metrics({ serial: "<device>", package: "com.example.app" })返回:
json
{
"cpu_percent": 23.5,
"memory_mb": { "total_pss": 180, "java_heap": 64, "native_heap": 78 },
"fps": { "avg": 58.2, "jank_count": 2 },
"battery": { "level": 85, "temperature_c": 32 },
"timestamp": "2026-04-22T14:00:00Z"
}2. HTTP API — 流式
bash
curl -N http://localhost:3210/devices/<serial>/metrics/streamServer-Sent Events 每秒推一次,画实时图用。
3. 测试包里自动带
pnpm test-pack <id> 跑完产出的 run.md 自动附 metrics 摘要:
markdown
## 性能
- CPU 峰值: 45% (step 7)
- 内存峰值: 245 MB PSS
- FPS 平均: 57.8, jank: 5 次 (step 3, 8, 12, ...)
- 电量: 85% → 83% (共 10 分钟)4. 桌面应用 metrics 页面
时间轴图表,实时显示当前采集到的指标。
性能基线用法
在 CI 里检查
yaml
# .github/workflows/perf.yml
- run: pnpm test-pack login-flow --device emulator-5554
- run: node scripts/check-baseline.js tests/reports/latest/run.md
# 如果 CPU 峰值 > baseline * 1.2 → fail历史对比
桌面应用 /metrics 页面可以选两个 run 对比,找出哪一步的哪个指标变差。
典型陷阱
| 现象 | 可能原因 |
|---|---|
| CPU 只看到系统级,抓不到某个 app | 权限不足,adb shell 用户空间无法读取受保护的 /proc/pid |
| FPS 一直 60 但用户感觉卡 | SurfaceFlinger 统计的是 drawn frames,不是 GPU rendered;换 dumpsys gfxinfo framestats 看 JankCount |
| 内存从首屏就很高 | App 初始化加载大量资源,不是泄漏;连续跑 10 分钟看趋势才准 |
| 电量无变化 | Android 13+ 部分型号不让非系统 app 读电量,改看系统级 |
配置
无需外部依赖,metrics 模块走 adb 本地命令即可。dumpsys 权限对 debug 版 app 最完整,release 版只能拿全局指标。