一、性能标准参考说明
经常有人问”我游戏或者APP性能标准是多少,多少CPU、内存合适?“
不同类似APP、不同类似游戏,不同档位机型,CPU、内存占用完全不样,可能都不是一个量级。很难有个统一标准。
以内存为例如下:Android平台对单个进程是没有特别限制,只要VirtulMomory不超过进程地址空间(一般是4G),系统剩余内存Ram不低于LKM,进程就不会OOM。
一档机型:
【性能基线】OPPO Reno/荣耀 9X
【内存消耗】最高PSS<=1400MB
【帧率】>=25FPS
【流畅度】卡顿率<=2%
二档机型:
【性能基线】华为P20/VIVO X20
【内存消耗】最高PSS<=1200MB
【帧率】>=25FPS
【流畅度】卡顿率<=2%
三档机型:
【性能基线】OPPO A5/荣耀畅玩7X
【内存消耗】最高PSS<=1000MB
【帧率】>=18FPS
【流畅度】卡顿率<=10%
【CPU占有率】(不区分机型)
综合CPU平均占用(90%)小于60%
单核CPU峰值占用(90%)小于90%
参考:2020年中国移动游戏质量白皮书
二、软件性能数据采集的相关名词解释
1.FPS
定义:1秒内游戏画面或者应用界面真实平均刷新次数,俗称帧率/FPS
Avg(FPS):平均帧率(一段时间内平均FPS),传统常说的FPS,1秒内平均画面刷新次数。
Var(FPS):帧率方差(一段时间内FPS方差)
Drop(FPS):降帧次数(平均每小时相邻两个FPS点下降大于8帧的次数
2.Jank
定义:1s内卡顿次数
注意:帧率FPS高并不能反映流畅或不卡顿。比如:FPS为50帧,前200ms渲染一帧,后800ms渲染49帧,虽然帧率50,但依然觉得非常卡顿。同时帧率FPS低,并不代表卡顿,比如无卡顿时均匀FPS为15帧。所以平均帧率FPS与卡顿无任何直接关系。
一次卡顿Jank:
①Display FrameTime>前三帧平均耗时2倍。
②Display FrameTime>两帧电影帧耗时 (1000ms/24*2≈83.33ms)。
一次严重卡顿BigJank:
①Display FrameTime >前三帧平均耗时2倍。
②Display FrameTime >三帧电影帧耗时(1000ms/24*3=125ms)。
备注:帧率低,并不是顿卡,如帧率都是只有几帧了,还有什么顿卡而言?
3.FrameTime
定义:两帧画面间隔耗时(也可简单认为单帧渲染耗时)。
4.Vsync
Android 显示系统:Vsync机制
VSync是Vertical Synchronization(垂直同步)的缩写,是一种在PC上很早就广泛使用的技术,可以简单的把它认为是一种定时中断。而在Android 4.1(JB)中已经开始引入VSync机制,用来同步渲染,让AppUI和SurfaceFlinger可以按硬件产生的VSync节奏进行工作。
Vsync=16ms
5.电影帧
电影帧率(18-24),一般是24帧。电影帧单帧耗时:1000ms/24≈41.67ms。电影帧率是一个临界点。低于这个帧率,人眼基本能感觉画面不连续性,也就是感觉到了卡顿。
6.Stutter(卡顿率)
定义:测试过程中,卡顿时长的占比。即Stutter(卡顿率)=卡顿时长/总时长
Stutter计算思路:基于PerfDog Jank的基础上,一次Jank卡顿,会有一次卡顿时间Jank time。测试过程中可能有多次Jank卡顿,即有多次卡顿时间Jank time。测试总时长为Time。
Stutter(卡顿率) = ∑Jank time / Time
说明:Jank为卡顿次数,Stutter为卡顿率,Jank和Stutter趋势有一致性,但并非完全线性,因为每次Jank卡顿严重性是不一样的。同时也说明了,没有Jank卡顿出现,自然也就卡顿率是0了
相关问题:
1.FPS帧率与卡顿是否有关系?
总结:帧率高,未必流畅。
三、影响
APP和游戏到底需不需要关注Jank卡顿及卡顿率呢?答案是需要的,并且还是重点关注!
APP也需要关注FPS、Jank及卡顿率。只是需要区分使用场景,如:
1) 静态页面窗口
只需关注FPS,理论FPS应该为0,否则,说明有冗余刷新,容易引起手机发热及耗电。
2) 有滚动动画页面窗口
只需关注FPS,FPS处于合适值即可,无需高频刷新。
3) 快速滑动页面窗口
需要关注FPS、Jank及卡顿率。手机交互灵敏度就是来源于此,Android系统才出黄油计划Jank。一般滑动状态下,帧率越高越好,Jank越小越好。
4) 播放视频页面窗口
需要关注FPS、Jank及卡顿率,视频卡顿直接影响用户。视频一般帧率18-24帧,Jank=0。比如微信播放视频、视频播放器等。