游戏性能指标
对不同主流机器(一般来自TOP20配置,覆盖90%以上的设备)根据不同硬件能力建立高、中、低等多档性能指标(机器分档),游戏按照该指标对应多个画质选项进行适配。
CPU负载:一帧内执行的指令数
测试指标:综合CPU平均占用小于60%、单核CPU峰值占用小于90%
GPU负载:一帧内执行的shader指令数
FPS:游戏每秒运行的帧数
测试指标:核心场景FPS均值、核心场景默认要求90%数值不低于60FPS
① GPU瓶颈
影响因素有:DrawCall数(同屏对象数、合批)、图元数(一般为三角形数)、shader复杂度、纹理采样、透明物件、OverDraw、RenderState频繁切换、带宽(Bandwidth)占用高
场景地图可通过热力图来布点来监控 如:DrawCall数为350,图元数为35w
优化手段:合批、简化shader、遮挡剔除、裁剪、Billborad、Impostor
使用GPA等进行截帧分析
② CPU瓶颈
影响因素有:游戏逻辑、剔除算法、Cache Missing
优化手段:分帧、复用(内存池)、缓存、预加载、预计算、异步、多线程
使用VTune等进行函数耗时分析
③ 传输瓶颈
影响因素有:VBO(Vertex Buffer Object,顶点缓冲对象)顶点数据量、IBO(Index Buffer Object,索引缓冲对象。又称EBO,Element Buffer Object,元素缓冲对象)、Uniform Buffer(着色器常量)
卡顿:发生瞬间掉帧的次数
测试指标:关键路径和核心体验操作的卡顿率不高于1%、关键路径和核心体验操作没有严重卡顿问题
内存:包括虚拟内存和物理内存
测试指标:占用的物理内存峰值不超过2GB
D/UE4 : [GameActivity] Used memory: 505063 (VmRSS: 465316 kB)
① 虚拟内存:
Private Bytes // 进程Committed的虚拟内存字节数 对应win7任务管理器中的【提交大小】,资源管理器中的【提交】
Peak Private Bytes // 进程Committed的虚拟内存的最高峰字节数
Virtual Size // 进程Reserved的虚拟地址空间字节数
Page Faults // 发生过的缺页中断次数 对应win7任务管理器中的【页面错误】
虚拟内存地址空间碎片 // 不可用的虚拟内存空间,造成的原因有:
a. windows保留虚拟地址空间起始地址必须是系统分配粒度的整数倍(64KB),大小必须是系统页面大小的整数倍(4KB)
b. windows提交虚拟地址空间起始地址和大小必须是系统页面大小的整数倍(4KB)
② 物理内存:
Working Set = WS Private + WS Shareable // 进程占用物理内存总字节数 对应win7任务管理器中的【工作设置(内存)】,资源管理器中的【工作集】
WS Private // 进程独享的物理内存字节数(如:堆内存+栈内存+cow机制创建的内存) 对应win7任务管理器中的【内存(专用工作集)】,资源管理器中的【专用】
WS Shareable // 进程可与其他进程共享的物理内存字节数(如:exe及dll代码段、数据段等) 对应win7资源管理器中的【可共享】
WS Shared // 进程已与其他进程共享的物理内存字节数,WS Shared<=WS Shareable
// 若只启动一个exe实例,那么exe的代码段、数据段等不会被共享,因而就不统计在WS Shared中
Peak Working Set // 物理内存的最高峰字节数 对应win7任务管理器中的【峰值工作设置(内存)】
物理内存碎片:// 不可用的物理内存,包括内部碎片(能明确指出属于哪个进程)和外部碎片(不属于任何进程)
内部碎片 -- 对象内存对齐
外部碎片 -- 与页面分配算法有关,频繁的分配与回收内存会导致大量的、连续且小的页面块夹杂在已分配的页面中间
③ 托管内存:
函数级别GC Alloc大小与次数
④ 内存相关的问题
a. 32位系统虚拟内存地址空间不足
b. 内存泄漏
c. 托管内存用完引用不释放导致无法被gc回收
d. 内存抖动:频繁分配和释放,GC Alloc引发卡顿等性能问题
e. 内存碎片
f. 内存越界(栈溢出、堆破坏等)
资源:
资源管理、资源重复率、资源大小、资源动态下载、资源加载卡顿、资源句柄泄露
Mesh、贴图、材质、动画、特效、音频、UI、字体
显存:纹理、RenderTarget、VBO、IBO、Uniform Buffer、shader
包体大小:游戏安装包大小(初始安装包、资源包、动态静默下载)
UI面板响应速度:从用户点击或滑动等操作开始,到UI面板的反应时间
启动速度:游戏启动到可交互界面的时间
载入地图速度:进入游戏地图的时间
网络响应速度:建立连接的速率、网络传输的速率、服务器的性能
分辨率(端游):1280×720、1600×900、1920×1080、2560×1440、3840×2160
分辨率(手游):按短边算有:2160(4K)、1440(2K)、1080(高清)、720(准高清)、640、480(标清)、360(流畅)、270、240、180
手游特有指标:
弱网络:由于网络制式(2G/3G/4G/wifi)之间网速差异大,用户地理位置变动使得网络发生切换,信号被遮挡后强度减弱,人口密集区网络拥塞严重,从而导致网络出现抖动、延时、丢包,甚至断线
具体应对措施:客户端超时重发(每条消息都带唯一ID)、心跳包探测、断线重连(简化登录鉴权,不用走完整登录流程)、客户端发生crash下次进入提示重回;服务器延迟下线机制
流量:单位时间内通过网卡的数据总量
具体应对措施:a. 紧凑协议结构 b. 去掉本地可以计算得到的数据 c. 协议压缩 d. 协议合并 e. 按照优先级来设定不同包的发送频率
电量:单位时间内消耗的电荷数量 注:profiler工具要用wifi模式来测试,不能用usb模式来测试(usb会给手机充电)
温度:手机发烫程度。太烫手机比较容易关核。ue4定时会打印如下log(详见BatteryReceiver.java):
[GameActivity] Battery: status = 2, rawlevel = 70, scale = 100 nativeBatteryEvent(stat = 2, lvl = 70 temp = 28.50 °C)
性能开源项目