2. 性能基础概念
在 Android 系统性能基线与量产验收中,所有测试、判定和优化最终都要落到一组可量化、可复现的指标上。如果对指标定义理解不一致,就会出现“实验室数据很好、用户体感很差”或“同一台机器两次测试结论相反”的情况。本节把最常用的七类指标——响应时间、吞吐量、帧率、内存占用、CPU 利用率、功耗、温升——放在同一张关系图中理解,并说明它们之间的耦合与制约。
一、核心指标的定义
响应时间指从用户或系统发起一个操作,到该操作产生可感知结果所经历的时间。它通常包含排队、调度、计算、I/O、渲染和合成等阶段。Android 中常见的响应时间指标有应用冷启动耗时、Activity 切换耗时、点击到首帧显示耗时(TTID)、点击到完全显示耗时(TTFD)。响应时间关注的是“单次操作的快慢”,属于延迟类指标。
吞吐量指单位时间内系统完成的有效工作量,例如每秒完成的事务数、每秒处理的请求数、每秒渲染的帧数。吞吐量关注的是“单位时间能做多少事”,属于容量类指标。响应时间与吞吐量往往存在权衡:提高并发度可以提升吞吐量,但可能拉长单次响应时间。
帧率指显示系统每秒实际提交并显示的帧数,单位 fps。Android 常见目标为 60fps、90fps、120fps。与帧率强相关的是帧耗时和掉帧数:一帧的预算在 60Hz 下约为 16.67ms,在 120Hz 下约为 8.33ms。帧率是响应时间在图形渲染链路上的“逐帧切片”,它直接决定滑动、动画和游戏是否流畅。
内存占用指进程或系统在某一时刻持有的物理内存与虚拟内存规模,包括 Java 堆、Native 堆、图形内存、文件映射和共享库等。Android 中常用 PSS、RSS、USS、Dalvik/ART Heap、Graphics、Gfx dev 等口径。内存占用过高会触发 GC、LMK 杀进程或压缩内存,间接恶化响应时间和帧率。
CPU 利用率指在统计窗口内 CPU 处于非空闲状态的时间占比,可细分为用户态、系统态、I/O 等待和中断等。它反映计算资源的繁忙程度,但高利用率不一定代表性能差,低利用率也不一定代表流畅——关键要看是否出现长任务、调度延迟或大小核迁移。
功耗指单位时间内系统消耗的电能,常用 mA、mW 或 mAh 表示。功耗由 CPU、GPU、屏幕、射频、传感器、外设等共同贡献。功耗与性能通常正相关:提高频率、增加并发、提升亮度都会增加功耗。
温升指设备表面或内部关键点位在测试过程中相对初始温度的变化量,单位 ℃。温升是功耗在时间维度上的积分结果,会触发温控降频,从而反过来限制 CPU/GPU 性能,导致帧率和响应时间恶化。
二、指标之间的关系
这些指标不是孤立的,而是通过“资源—时间—热量”三条链路相互耦合。下面的关系图展示了它们之间的主要影响方向。
从图中可以看出三条主要链路:第一,CPU 利用率和内存占用是“资源底座”,它们通过调度延迟、GC 停顿影响响应时间和帧率;第二,CPU/GPU 负载直接决定功耗,功耗随时间累积形成温升;第三,温升触发温控降频,反过来压制 CPU 和 GPU 性能,使帧率和响应时间变差。这就是典型的“性能—功耗—热”三角约束。
三、指标口径与采集方法
不同指标需要不同的采集工具和口径,混用会导致结论失真。下表列出常用指标、典型口径与采集方式。
| 指标 | 典型口径 | 常用采集方式 | 关注点 |
|---|---|---|---|
| 响应时间 | 冷启动耗时、TTID、TTFD | logcat、Perfetto、Systrace、自动化埋点 | 首帧与完全显示是否达标 |
| 吞吐量 | 每秒事务数、每秒请求数 | 压测工具、服务端日志、客户端统计 | 并发下的稳定性 |
| 帧率 | 平均 fps、掉帧率、帧耗时 P90/P99 | dumpsys gfxinfo、Perfetto、SurfaceFlinger | 滑动与动画是否卡顿 |
| 内存占用 | PSS、RSS、USS、Heap | dumpsys meminfo、procstats、Perfetto | 是否持续增长或触发 LMK |
| CPU 利用率 | user/sys/iowait 占比、大小核分布 | top、/proc/stat、Perfetto | 长任务与调度延迟 |
| 功耗 | mA、mW、mAh | PowerMonitor、Battery Historian、fuel gauge | 场景化功耗与待机功耗 |
| 温升 | 表面温度、内部关键点 ΔT | 热成像、温度传感器、thermal zone | 是否触发温控降频 |
四、案例与场景:同一场景下的指标联动
以“高帧率游戏 30 分钟”为例。前 5 分钟 CPU 大核高频、GPU 满载,帧率稳定在 120fps,功耗约 3500mW,表面温度从 28℃ 升到 38℃。第 10 分钟温升超过阈值,thermal 触发降频,CPU 大核从 2.8GHz 降到 2.0GHz,GPU 频率下降,帧率跌到 80fps 并出现周期性掉帧,响应时间(点击到画面反馈)从 40ms 增加到 70ms。此时如果只看平均帧率,可能仍显示“良好”,但 P99 帧耗时已经明显恶化。这说明:温升是慢变量,功耗是快变量,帧率和响应时间是最终表现,必须联合观察。
五、常见误区与复盘
- 只看平均值,不看分位数。平均帧率 58fps 可能掩盖了每秒一次的 200ms 卡顿,应同时看 P90、P99 和掉帧次数。
- 把 CPU 利用率高等同于性能差。利用率高说明资源被使用,关键要看是否存在长任务、频繁调度和大小核抖动。
- 忽略内存与响应时间的关系。内存压力会触发 GC 和 LMK,直接表现为启动变慢、切换卡顿,不能只把内存当作独立指标。
- 用短时功耗推断续航。功耗具有场景依赖性,必须按场景分别测量,并关注温升后的降频补偿。
- 口径不统一。同一指标在不同工具、不同版本、不同采样窗口下结果可能不同,验收前必须固定采集脚本和判定阈值。
# 常用采集命令示例
adb shell dumpsys gfxinfo com.example.app framestats
adb shell dumpsys meminfo com.example.app
adb shell top -H -p $(adb shell pidof com.example.app)
adb shell cat /proc/stat
adb shell dumpsys thermalservice
理解这些指标的定义与关系,是后续建立性能基线、设计验收用例和定位量产问题的前提。只有把“单次快慢、单位时间容量、逐帧流畅、资源占用、能量消耗、热约束”放在同一张图上,才能避免局部优化带来的整体退化。