当一个 APP 或游戏各种功能越来越多时,性能优化的重要性就不言而喻了,况且现在 APP 或游戏的功能逐渐趋同,提升用户体验已从产品设计本身转到了 APP 或游戏的流畅性上,这也让越来越多的开发者更加关注性能优化与测试。前段时间 PerfDog 研发团队曾带来《腾讯游戏性能实战案例分享之帧率陡变 1.0》和《APP&游戏需要关注 Jank 卡顿吗?》两篇关于帧率与 Jank 的专业分析文章,本次我们就来看看在性能优化测试中会遇到的哪些名词。

 

FPS

FPS 是图像领域中的定义,是指画面每秒渲染帧数,通俗来讲就是指动画或视频的画面数。FPS 是测量用于保存、显示动态视频的信息数量,每秒钟帧数越多,所显示的动作就会越流畅。FPS 也可以理解为我们常说的刷新率,1 秒内游戏画面或者应用界面真实平均刷新次数,俗称帧率/FPS。

    1.Avg(FPS):平均帧率 (一段时间内平均 FPS)

    2.Var(FPS):帧率方差 (一段时间内 FPS 方差)

    3.Drop(FPS):降帧次数 (平均每小时相邻两个 FPS 点下降大于 8 帧的次数)

 

可以参考下面的表格,用户打游戏的时候延迟不应该大于 100 毫秒,否则用户的体验就会非常差。100300 毫秒用户就可以感受到延迟,再多到了1秒的话用户的注意力会转移,10秒以上用户就会抛弃这款应用。

 

1

 

Jank

1s 内卡顿次数,类似 Android 的 Jank 卡顿和 iOS 的 FramePacing 平滑度统计原理。帧率 FPS 高并不能反映流畅或不卡顿。比如:FPS 为 50 帧,前 200ms 渲染一帧,后 800ms 渲染 49 帧,虽然帧率 50,但依然觉得非常卡顿。同时帧率 FPS 低,并不代表卡顿,比如无卡顿时均匀 FPS 为 15 帧。所以,平均帧率 FPS 与卡顿无任何直接关系。

 

关于 Jank 的详细内容可以查看《APP&游戏需要关注 Jank 卡顿吗?》这篇文章。

 

PerfDog 计算方法:同时满足两条件,则认为是一次卡顿 Jank.

    1.当前帧耗时>前三帧平均耗时 2 倍。

    2.当前帧耗时>两帧电影帧耗时 (1000ms/24*2=84ms)。

同时满足两条件,则认为是一次严重卡顿 BigJank.

    1.当前帧耗时>前三帧平均耗时 2 倍。

    2.当前帧耗时>三帧电影帧耗时 (1000ms/24*3=125ms)。

 

计算思路:考虑视觉惯性,假设以前三帧的平均帧耗时为参考,作为 vsync 时间间隔,连续两次 vsync 没有新渲染画面刷新,则认为是一次潜在卡顿,也就是说下一帧耗时大于前三帧平均帧耗时 2 倍,则认为一次潜在卡顿。同时单帧耗时满足大于两倍电影帧耗时 1000ms/24*2 (由于人眼低于 24 帧才能辨别画面不连续性),则认为是一次真正卡顿。同时若单帧耗时大于 3 倍电影帧耗时,则认为是一次严重卡顿。

 

注解:为什么是两次 vsync?GPU 一般是 3 重缓冲 buffer,当前帧已占用一个 buffer,即剩余 2 缓冲 buffer,人眼一般可容忍 2 帧延迟。为什么是两帧电影帧耗时?低于 24 帧画面,人眼就能感知到画面不连续性,电影一般都是 24 帧。即电影帧耗时 1000ms/24=41.67ms,两帧电影帧耗时也就是 41.67ms*2,三帧电影帧耗时是 41.67ms*3。

    1.BigJank:1s 内严重卡顿次数

    2.Jank(/10min):平均每 10 分钟卡顿次数。

    3.BigJank(/10min):平均每 10 分钟严重卡顿次数

 

FTime

上下帧画面显示时间间隔,即认为帧耗时。

    1.Avg(FTime):平均帧耗时

    2.Delta(FTime):增量耗时 (平均每小时两帧之间时间差>100ms 的次数)

 

2

 

CPU Usage

Total 整机/App 进程,CPU 使用率其实就是你运行的程序占用的 CPU 资源,表示你的机器在某个时间点的运行程序的情况。使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。使用率的高低与你的 CPU 强弱和程序优化的好坏有直接关系。

 

CPU Clock

各个 CPU 核心的频率和使用率

 

Memory 

内存用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。只要移动端在运行中,CPU 就会把需要运算的数据调到内存中进行运算,当运算完成后 CPU 再将结果传送出来,内存占用多少决定了移动端是否能稳定运行。Android PSS Memory 实际使用的物理内存,统计结果和 Android Java API 标准结果一致,与 Meminfo 也一致。iOS 是统计 FootPrint,注:OOM 与 FootPrint 有关,与系统、机型无关。只与 RAM 有关,如 1G 内存机器。FootPrint 超过 650MB,引发 OOM。

 

Xcode Memory 

XCode Debug Gauges 统计方式即 XCode Memory。

 

Real Memory

Xcode Instrument 统计方式即 Real Memory,实际占用物理内存。注:物理内存与系统策略有关,关注意义不大

 

Swap Memory

Swap Memory,部分设备支持 Swap 功能,在启用 Swap 功能后,系统会对 PSS 内存进行压缩,Swap 增加,PSS 会相应减少,由于压缩会占用 CPU 资源,同时相应会导致 FPS 降低

 

Virtual Memory

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

 

3

 

内存耗用
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

 

OOM

OOM,全称 “Out Of Memory”,就是内存溢出,一般是由于程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使计算机内存被耗尽的现象。重启计算机即可,但根本解决办法还是对代码进行优化。

 

内存溢出可以引发很多的问题:
    1.程序卡顿,响应速度慢(内存占用高时 JVM 虚拟机会频繁触发 GC)
    2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉。反之内存占用越小,在后台存在的时间就越长)
    3.直接崩溃(OutOfMemoryError)

 

ANR

在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(Application Not Responding)对话框。用户可以选择 “等待” 而让程序继续运行,也可以选择 “强制关闭”。所以一个流畅的合理的应用程序中不能出现 ANR,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示 ANR 给用户。默认情况下,在 android 中 Activity 的最长执行时间是 5 秒,BroadcastReceiver 的最长执行时间则是 10 秒。

 

Wakeups

线程唤醒次数。注:超过 150 进程很大可能会被系统 kill

 

CSwitch

上下文切换测试。注:单核超过 14000 进程会被系统 Kill

 

4

 

GPU Usage

GPU 使用率,PerfDog 目前支持高通芯片手机

 

GPU Frequency

GPU 频率,PerfDog 目前支持高通芯片手机

 

GPU Utilization

Render/Tilter/Device

    1.Render:渲染器利用率 (像素着色处理阶段,若占比高,说明是 PS 阶段出现瓶颈,shader 过于复杂或纹理大小、采样复杂等)

    2.Tilter:Tilter 利用率 (顶点着色处理阶段,若占比高,说明是 VS 阶段出现瓶颈,顶点数太多等原因)

    3.Device:设备利用率 (整体 GPU 利用率)

 

Network

Recv 目标进程接收流量速率,Send 目标进程接收、发送流量速率。

 

CTemp

CPU 温度

 

BTemp

电池温度

 

Battery Power

整机实时 Current 电流、Voltage 电压、Power 功耗(注:PerfDog 目前在 Android 平台每秒获取多次;在 iOS 平台 20s 获取一次,目前最精准的统计方式,结果和 Battery life 结果一致,支持所有 iOS 机型)

 

Energy Usage

即为 Xcode Energy Impact。监控应用使用的能耗情况 (包括 CPU、GPU、NetWork、Location、Display (iPhone X only)、Overhead)。

注:和 Xcode Energy Impact 结果一致。有线模式下测试。Total Energy<270 为 Low,270 < Total Energy < 1000 为 High,Total Energy>1000 为 Very High。

 

上面对性能优化测试中会遇到的一些名词做了简单的总结,难免会有一些遗漏,欢迎小伙伴们前往 PerfDog 社区(https://bbs.perfdog.qq.com/)交流补充。

 

PerfDog 作为最新的移动全平台性能测试分析工具已经支持上述提到的绝大多数性能参数的测试,例如手机测评者最关心的游戏 PFS、GPU 使用率、CPU 温度、电池功耗等和开发工程师与测试工程师最关心的 CPU 使用率、内存占用,网络流量速度等。如果您也对性能优化测试感兴趣,不妨前往 PerfDog 官网下载试用。后续 PerfDog 研发团队还会针对不同的性能参数继续为大家带来高质量的深度技术解析内容,敬请期待。


↙↙↙阅读原文可查看相关链接,并与作者交流