Skip to content

性能监控

Tapilot 在跑测试的同时采集设备性能指标,输出到 run.md 或可视化图表,用来:

  • 建立性能基线(每次发版对比)
  • 定位掉帧/卡顿(FPS drop)
  • 发现内存泄漏(长跑内存持续涨)
  • 监控电量消耗(每 10 分钟耗电是否异常)

采集的指标(Android)

指标来源说明
CPU 使用率top / dumpsys cpuinfo整机 + 指定 package
内存dumpsys meminfoTotal PSS / Java Heap / Native Heap
FPSdumpsys gfxinfo --reset + framestats每秒平均帧率 + jank count
电量 / 温度dumpsys batterylevel / temperature / charging
网络流量cat /proc/net/xt_qtaguid/statsrx/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/stream

Server-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 版只能拿全局指标。

Released under MIT License.