性能
Performance 工具会在打开期间对所选应用和设备采样,并以实时图表显示最近两分钟的数据。在工具栏中选择应用;如果不选,则只显示整个设备的数值。
测量内容#
| 数值 | Android | iOS 模拟器 |
|---|---|---|
| 应用 CPU | /proc/<pid>/stat 的用户 + 系统时间,以占所有核心的比例表示 | 主机进程的 CPU 时间(ps),以占 Mac 所有核心的比例表示 |
| 设备 CPU | /proc/stat,所有核心的忙碌时间 | —(模拟器共享 Mac 的 CPU) |
| 应用内存 | 常驻集大小(VmRSS) | 主机进程的常驻集大小 |
| 设备内存 | /proc/meminfo 中的 MemTotal − MemAvailable | — |
| 帧率 | 每秒渲染的帧数,来自 dumpsys gfxinfo | 第 4 阶段,使用 Instruments 追踪 |
| 卡顿帧 | 自上次采样以来卡顿帧的占比 | 第 4 阶段 |
| 电池 | 来自 dumpsys battery 的电量和温度 | — |
每次 Android 采样都是一次 adb shell 调用,一次性运行所有命令,因此每 500 ms 采样一次的开销依然很低。每次采样都会查找应用的进程 id:应用重启后,图表会继续显示新进程的数据。
如何读图#
- CPU 百分比是占整个设备的比例,与 Android Studio 的显示方式一致。在 4 核模拟器上,一个核心满载就是 25%。
- 帧率只在应用绘制时才会变化。静止的屏幕不渲染任何帧,这是好事。
- 卡顿帧是错过截止时间的帧,由平台的
gfxinfo统计。 - 将鼠标悬停在图表上可读取精确数值。只有一个数据系列的图表没有图例;标题会说明它显示的数值。
控件#
| 控件 | 作用 |
|---|---|
| 0.5 s · 1 s · 2 s | 两次采样之间的间隔。 |
| Pause | 停止采样;图表保留已有的数据。 |
| Clear(垃圾桶) | 清空图表。 |
离开该工具时采样会停止,因此它不会在后台运行。
图表下方有两张按需测量的卡片:Start time(指南)和 Energy(指南)。两者在运行期间都会改动设备(应用会被停止并重新打开;电池在电池服务看来被拔掉了电源),结束后会还原。
通过命令行#
emulabzip perf --app com.example.app
emulabzip perf --app com.example.app --interval 500 --json | jq .appCpu