关于游戏:手游前端性能测试

30次阅读

共计 8287 个字符,预计需要花费 21 分钟才能阅读完成。

原文由黑子发表于 TesterHome 社区,点击原文链接可与作者间接交换。

导读

目前游戏行业曾经出现精品化状态,行业对测试岗位的要求也越来越高,前端性能测试仅仅是用工具测试出相干数据(自动化测试即可满足,包含自动化脚本,或者自动化录像),并告知研发,曾经不能满足测试要求。所以性能测试岗同学须要具备更多硬性技能,本篇文章适宜性能测试老手;别离从测试场景,测试工具,而后测试数据概念,之后到和开发、美术同学在优化中的沟通,以及最初罕用的优化办法策略,逐个开展介绍。

一、测试场景

1. 导读

前端性能测试,关注用户在玩游戏过程中的性能方面的体验,包含是否卡顿,是否 crash,是否手机发热,是否耗电过快等,不论用户的手机是高配机,中配机器,还是很渣的低配机器,都须要关注用户性能体验(有同学问,为什么还这么关注低配机用户的感触,他们能充钱吗?游戏是一个生态,比方 5% 的 RMB 用户须要残余 95% 的屌丝用户来烘托;另外游戏口碑等都须要思考所有用户的体验等)。

2. 卡顿

游戏晦涩是游戏比拟根本的性能指标,尤其在外围玩法的时候。从测试角度看,更多关注游戏的 fps 数据、卡帧率、bigjank 值等

3.crash

用户不心愿游戏过程中呈现 crash 状况,测试关注 crash 率数据

4. 发热

手机发热之后除了体感不好,另外不同的手机厂商会抉择降频或者锁核,从而导致游戏卡顿。手机发热起因较多(比方运行高功耗 app、在充电中、不良电池、爱护壳不能散热、所处环境温度低等),这里关注的是怎么升高游戏的功耗,其实更多是怎么升高 GPU 和 CPU 的使用率

耗电过快

手机电池毫安数自身就是手机的重要指标,耗电快无疑是硬伤。

二、测试工具介绍

1.perfdog

腾讯出品的性能工具,无需 root 或者越狱。PerfDog 反对挪动平台所有应用程序(游戏、APP 利用、浏览器、小程序、小游戏、H5、后盾零碎过程等)
装置,应用教程等参考官网具体介绍:
https://bbs.perfdog.qq.com/ar…

2.UWA

针对 unity 和 unreal 引擎的游戏或者 VR 产品提供服务,包含资源监测(动静和动态,收费),性能诊断和优化(免费),lua 性能剖析,自动化测试,社区问答等
UWA GOT 是 UWA 推出的本地性能测评工具,须要装对应 sdk,无需越狱或者 root。
UWA 成立 2015 年,目前积攒了不少用户和测试数据,是目前比拟支流的测试工具和社区。
装置和应用,官网具体介绍:
https://uwa-public.oss-cn-bei…

3.UPR

UPR 开始于这两年(2019 开始,wetest 的性能之前和 untiy 配合,起初 wetest 自研了 Perfdog,游戏性能移交给 unity 本人做了),目前 UPR 在积攒用户中,所以是收费的,而且技术支持比拟好(有什么问题反馈比拟及时,甚至会现场解决),UPR 的一些性能还在欠缺和开发中
URP 分手机和桌面版,能够带 sdk 和不带 sdk,当然,没有继承 UPR sdk 的测试数据会少。
装置和应用,参考官网介绍:
https://upr.unity.cn/instruct…

4. 其余测试工具

比方腾讯 GT,网易的 Emmagee,以及 google 的工具等等

5. 自研测试工具

对应一些厂商,比方调用引擎给的接口等办法,来获取相干性能数据,来实现工具的目标。

三、测试数据概念介绍

1. 内存

个别关注:
①pss 内存(理论应用的物理内存)的大小(ios 和 andriod 机器个别都是分三档机器,每档机器的 pss 内存规范不一样,规范数值随着硬件设施晋升也在逐步而变高)
②内存透露(内存透露后,内存越来越大,可能会因为申请分配内存越来越慢导致的卡顿,或者 crash 等)
③内存资源重复率:资源重复是指内存中同一时刻,存在两份或以上雷同的纹理、网格、动画、音频等资源。个别是雷同的一份资源被打包到多个 AB 包中,如果这些 AB 都被加载进内存,内存中就会存在多份雷同的资源

2.bigjank

PerfDog 计算方法:同时满足两条件,则认为是一次卡顿 Jank.
1、以后帧耗时 > 前三帧均匀耗时 2 倍。
2、以后帧耗时 > 两帧电影帧耗时 (1000ms/24*2=84ms)。
同时满足两条件,则认为是一次重大卡顿 BigJank.
1、以后帧耗时 > 前三帧均匀耗时 2 倍。
2、以后帧耗时 > 三帧电影帧耗时(1000ms/24*3=125ms)。

3.FPS

帧率,规范要求比方:外围游戏场景默认要求 90% 数值都不低于 25FPS;

晦涩度

比方:外围游戏场景,默认要求卡顿率不高于 2%

4.CPU

比方:综合 CPU 均匀占用 (90%) 小于 60%,单核 CPU 峰值占用(90%)小于 90%
另外要关注单核 CPU 使用率,以及是否所有内核都在应用,以及应用是否均匀等
还有 CPU 的曲线是绝对平滑,还是锯齿重大

5. 工具中罕用数据

cpu:
①frameTime:同一帧的耗时
②Rendering Time:以后帧渲染耗时;drawcall 越高,这部分开销越大
③ScriptTime:以后帧函数耗时
④PhysicsTime:以后帧物理耗时
内存:
代码中的内存 –Mono 内存(mono 内存,内存池,只增不减);资源中的内存占用 –Native 内存
①ReservedMono:个别是脚本调配的内存
②pss 内存:个别用于定位多局战斗、场景跳转、关上敞开 UI 中是否有内存透露
③total_reserved 内存:unity_reserved 内存 +GFX 内存 +FMOD 内存 +Mono 内存 +Profiler 内存
④mono reserved:调配的 mono 内存(绿线局部),只升不降,须要严格控制。mono 内存示意游戏中脚本调配的内存
⑤gfxdriver_reserved:示意渲染模块的内存,如果比拟高须要对纹理资源和 Shader 进行优化。
⑥fmod_reserved:示意音频模块的内存,如果比拟高须要对音频资源进行优化
⑦内存资源重复率:资源重复是指内存中同一时刻,存在两份或以上雷同的纹理、网格、动画、音频等资源。个别是雷同的一份资源被打包到多个 AB 包中,如果这些 AB 都被加载进内存,内存中就会存在多份雷同的资源

其余数据能够参考:
https://segmentfault.com/a/11…

四、研发(开发和美术)概念介绍

1. 导读

在和研发同学沟通时,须要对研发上的一些概念,以及罕用的优化思路,办法有所理解,能够依据问题数据,提供一些优化倡议。

2. 图集 atlas

是通过专门的工具,将多张图片合并成一张大图,并通过 plist 等格局的文件索引的资源
NGUI 强调图集,图集要布局好,否则常常会呈现图集不够用等问题;UGUI 弱化用户对图集的概念,在打包的时候主动生成图集。各有优缺点
目前研发团队中次要应用的则是 Unity 本身的 UGUI 零碎 和 Asset Store 上的 NGUI 插件

3. 画布 canvas

Canvas 画布是承载所有 UI 元素的区域。Canvas 实际上是一个游戏对象上绑定了 Canvas 组件。所有的 UI 元素都必须是 Canvas 的自对象。如果场景中没有画布,那么咱们创立任何一个 UI 元素,都会主动创立画布,并且将新元素置于其下

4.Collider

碰撞体

5. 网格 mesh

mesh 就是咱们所说的三角网格。三角网格就是由一系列三角形组成的多边形网格,次要用于模仿简单物体的外表,事实上游戏开发过程中美术给咱们的人体、车辆模型都是由一个或多个三角网络 (mesh) 组成的。
工具:mash baker,可能无效合并网格以及网格所应用的材质,来无效缩小渲染批次所带来的开销

6. 纹理 Texture

纹理即“纹路”,每个物体外表上不同的样子,譬如说木头的木纹状。纹理就是一段有法则、可反复的图像

7. 贴图 Map

贴图是图,最简略的模式是 ps 之类的软件做进去的一张图,这些图在 3D 中用来贴到物体的外表,用来体现物体的“纹理”
最有名的是 lighting map,即光照贴图,光照贴图是生成或者绘制进去,用于物体外表模仿光照成果的

8. 材质 Material

材质次要是用来体现物体对光的交互(反射、折射等)性质的。譬如金属对光的反射和毛毯对光的反射性质齐全不一样,那么对 3D 程序来说,这样的差异就通过材质这个属性来计算出不同的色彩。
材质,实质是数据集:体现物体对光的交互,供渲染器读取的数据,包含贴图,纹理,光照算法等

9. 着色器 shader

实际上就是一小段程序,它负责将输出的 Mesh(网格)以指定的形式和输出的贴图或者色彩等组合作用,而后输入,模仿真实世界中的光影成果,这个成果是由物体外表材质、灯光、观察者的视角等多种因素独特决定的
Unity 中所有的渲染都应用着色器实现

10. 材质球

U3D 引擎中材质的预览形式为一个球体,材质球是什么样子,通常由贴图决定
纹理 — 贴图 —> 通过 shader—-> 材质球 —> 材质球贴到具体的模型上,生成模型 1,模型 2 ……

11.Alpha 通道

指一张图片的通明和半透明度
对于 16bit 存储的位图,每 5 个 bit 别离示意红黄蓝,最初一个 bit 是示意阿尔法通道,0 或 1,所以要么通明要么不通明;对于 32 位存储的位图,每 8 个 bit 别离示意红黄蓝,最初 8 位示意阿尔法通道,就有 256 种通明可能

12.draw call

简称 DC,由 CPU 收集美术的资源信息,传递给 GPU,告诉 GPU 进行一次渲染过程叫 DrawCall。是 cpu 告诉 gpu 干活的一种命令

  • 为什么 drawcall 多了会影响帧率

    • 在每次调用 Draw Call 之前,CPU 须要向 GPU 发送很多内容,包含数据,状态,命令等。在这一阶段,CPU 须要实现很多工作,例如查看渲染状态等

    而一旦 CPU 实现了这些筹备工作,GPU 就能够开始本次的渲染。

    • GPU 的渲染能力是很强的,渲染 300 个和 3000 个三角网格通常没有什么区别,因而渲染速度往往快于 CPU 提交命令的速度。
    • 如果 Draw Call 的数量太多,CPU 就会把大量工夫破费在提交 Draw Call 命令上,造成 CPU 的过载。因而造成 Draw Call 性能问题的首恶是 CPU

提交大量很小的 Draw Call 会造成 CPU 的性能瓶颈,即 CPU 把工夫都破费在筹备 Draw Call 的工作上了。把很多小的 Draw Call 合并成一个大的 Draw Call, 这就是批处理的思维。

13. 渲染通道 pass

每个 pass 都会耗费一个 drawcall,在满足渲染成果的状况下,尽可能减少渲染通道的数量

14.Lightmap

其实就是打了灯光的贴图,通常是对游戏场景中动态物体上,贴了一层带灯光效果的贴图
长处:省去了很大光照相干的计算,缩小了性能的耗费
毛病:多了一层纹理,咱们应用了灯光贴图必定多了一层纹理。另外动态贴图无奈扭转灯光的方向,比方灯泡被用户打碎了,灯光效果还在,理论要干掉

15.mipmap

也是贴图。应用 Mipmap 后,贴图会依据摄像机间隔的远近,抉择应用不同精度的贴图
Mipmap 技术有点相似于 LOD 技术,然而不同的是,LOD 针对的是模型资源,而 Mipmap 针对的纹理贴图资源
毛病:会占用内存,因为 mipmap 会依据摄像机远近不同而生成对应的八个贴图,所以必然占内存!
长处:会优化显存带宽,用来缩小渲染,因为能够依据理论状况,会抉择适宜的贴图来渲染

16.LOD

在游戏场景中,依据摄像机与模型的间隔,来决定显示哪一个模型,个别间隔近的时候显示高精度多细节模型,距离远的时候显示低精度低细节模型。
长处:可依据间隔动静地抉择渲染不同细节的模型,从而进步渲染的效率
毛病:减轻美工的累赘,要筹备不同细节的同一模型,同样的会略微减少游戏的容量

17. 烘焙

物体外表的反光或者暗影,记录到模型里,造成新的贴图,运行的时候,显卡和 CPU 不须要进行对环境光成果的运算了。实际上就是 lightmap 的生成过程

18. 面数 Tris

模型上的三角形面数,对应不同类型的模型,个别有不同的规范,比方小怪多少面,精英怪多少面,boss 多少面,随着游戏制作精度和硬件的进步,面数的规范也随着变多

19.bloom

Bloom 放在前期特效中,是实现光线绽开,灯光溢出的成果
特效有有 2 个最常见的前期:Color Grading(调色)和 Bloom(泛光 / 辉光)
参考链接:
https://zhuanlan.zhihu.com/p/…

20.GC

垃圾回收,一种内存管理机制(针对堆内存)
参考链接:
https://www.jianshu.com/p/db4…

21.AssetBundle

资源打包,简称 AB 包,次要思考打包策略和加载策略,比方:把须要同时加载的 Asset 尽量打包到同一个 AB 里。例如模型,其纹理和动画
参考链接:
https://zhuanlan.zhihu.com/p/…

22. 渲染技术汇总

https://blog.csdn.net/poem_qi…

五、开发优化工具介绍

不同的项目组,有不同的优化工具,也有共用的。

1. 常见的共用优化工具

Unity Profiler,Unity Memory Profiler, XCode Instrument. XCode Instrument 内又蕴含了很多工具,其中最罕用的有 Time Profiler,Allocation 以及 Capture GPU Frame。adb 命令
比方:XCode Allocation,会统计内存的调配和开释状况,从而看出是否存在内存透露状况(比方主城 – 战斗 – 主城,内存快照的状况下)

自研优化工具

比方:场景优化时:依照格子(比方 4 米 * 4 米)获取场景内的热点数据;比方依照场景摄像机内的物件个数和物件类别的比例曲线,比方场景中,反复材质查看工具等

六、罕用的优化办法策略

1. 导读

①性能优化是一个长期的过程
②性能优化不然而程序部门的事件,而是需整个项目组独特配合和致力的后果,个别项目组每个部门都会有对应的专职人员
③好的优化工具至关重要
④不同的机器设备,展现的美术品质是不一样的,所以针对机型(分三档机器)有不同的优化策略
⑤每个核都充分利用,多线程渲染技术(unity5 以上就开始反对了)
⑥在不同的场景,工夫和空间的抉择(工夫换空间,还是空间换工夫,CPU 和 GPU 能够调换,CPU 和内存能够调换、内存和磁盘能够调换)
⑦不必要渲染的货色不渲染(比方 UI 层级,不显示的 UI 不渲染;不在摄像机内的不渲染;遮挡缩小渲染;imposter,LOD,minimap 等)。不用加载的内容不加载(比方大表拆分按需加载;图集拆分按需加载等;AB 包加载策略等)。能压缩的都压缩(这个好了解)
⑧性能优化不是一劳永逸的事件,是持久战;即使是曾经上线多年的长线产品,性能测试也是判若两人在开掘性能点并优化
参考:
https://segmentfault.com/a/11…

2. 场景优化

①关注场景的热点数据(比方依照 2 米一个计算范畴单位),通过调整物件的地位,优化物件的资源等来优化热点问题
②增加要害遮挡物,来缩小相机内的渲染量
③LOD 技术的使用,或者 imposter 技术的使用等
④近景物件包含角色怪物等平滑渲染(多帧实现渲染)
等等(办法还有很多)

3. 同屏人数优化

①同屏人次要集中的场景点,第一是要场景拆散,比方拍卖行和交易地点离开,一个室内,一个室外;第二是缩小对应场景的物件耗费
②计算策略优化,优先渲染离本人近的角色和场景物件
②成果优化,比方同一类型的特效到肯定数量后不在渲染等
④同屏时用户角色是动静的,不停的加载和开释,做平滑解决(按帧管制渲染数目办法等)。防止霎时加载导致的卡顿
⑤同屏战斗时,尤其国战,同角色 avatar 一样
⑥Imposter(伪装者,或者叫替代物) 技术:(基本原理用相机把模型各个角度的图片拍下来,而后依据玩家相机的角度选取不同的图片显示)
等等(办法还有很多)

4.UI 优化

比方:
①格局
②尽可能将动静 UI 元素和动态 UI 元素拆散到不同的 UIPanel 中(UI 的重建以 UIPanel 为单位),从而尽可能将因为变动的 UI 元素引起的重构管制在较小的范畴内
③带通道和不带通道图集,尽量离开
④同一个 UI 界面或者同一个性能点的 ui 资源放在一个图集,能够缩小 drawcall
等等(办法还有很多)
参考:
https://www.cnblogs.com/wetes…

5.GC 优化

GC 的时候会占用大量计算资源,如果 GC 之后发现内存仍然不够用,须要再次调配(unity 非官方数据一次大略 6MB),那么就更耗资源了。GC 优化个别有:
①对象池技术 — 重复使用对象(比方子弹,须要频繁的生成和销毁)
②缩小内存垃圾的数量(比方:不要在频繁调用的函数中重复进行堆内存调配,后者应用缓存技术)
③减缓 GC 的工夫,不要在要害时候 GC 操作;在非敏感期被动 gc
④其余技术手段,比方装箱,list,字符串等导致 GC 的解决方案
等等(办法还有很多)
参考:
https://www.cnblogs.com/u3ddj…

6. 内存优化

内存性能起因次要有这几点:内存碎片过多(内存池解决)、内存频繁创立销毁(对象池解决)、内存加载慢、内存占用过高。
①资源(贴图,模型,动画,声音等)有损压缩,每种资源都有最优的压缩形式和格局等。
②脚本和配置,及时卸载,以及拆分等
③第三方 shader 库,冗余预编译宏占用
④AB 包打包策略和加载策略,都会影响内存占用。AB 主动打包工具(公共包合并,AB 包要在 10MB 内),游戏类型逻辑强关联打包模式,比方 moba,把一个英雄的所有资源打到一个包里。
比方:
第三方库内存占用,延时加载和模块隔离办法(第三方库内存透露,或者占用过大,不便解决)
比方技能表,常驻优化计划
去掉内存中同时存在的雷同资源(比方特效资源)

Unity 资源内存优化,资源内存占用排行榜 (优化性价比):贴图 > 动画 > 网格 > 音频 > 材质
一、贴图优化
1. 升高分辨率
2. 拆分通明通道
3. 调整压缩格局(比方带阿尔法通道的贴图拆分 2 两张,别离压缩;格局转换大略是原来 1 / 4 的内存)
4. 禁用 Mipmap
5. 启用 Use Crunch Compression
1 张 512*512 位图,安卓:RGBA ETC2(带通道)占用 256KB,RGB ETC2(不带通道)占用 128KB 内存;在 iOS:RGBA PVRTC(带通道)和 RGB PVRTC 都占用 128KB 内存
二、动画优化
1. 减小动画长度
2. 缩小骨骼数量
3. 缩小关键帧密度
4. 缩小动画精度
三、网格优化
1. 缩小顶点
2. 开启 Optimize Mesh 选项
四、音频优化
倡议较长的音频应用.mp3 或.ogg 格局,较短的音频应用.wav 或.aiff 格局

7.CPU 优化

办法:
宏观办法:从每一帧中发现问题(次要办法)
宏观办法:从统计中发现问题,比方一局战斗,每个模块和函数的耗时和调用次数统计,也不便不同版本的比照(工具或者日志来统计)
分类:
①GC,GCAlloc 耗时
②渲染耗时(合并批处理,缩小 drawcall:比方应用动、动态批处理,GPU Instance 技术)
③逻辑耗时(比方循环查找,比方大量服务器音讯集中处理等)
④其余引擎耗费(动画,物理)
参考:
https://gameinstitute.qq.com/…

8.GPU 优化

GPU 的计算目前看,大部分还是能胜任,设置错错无余的。所有在 CPU 优化计划里,有一部分就是把 CPU 做的事件,让 GPU 做。
GPU 优化思路:
①缩小渲染批次
②同一个 drawcall 里,缩小渲染类型
③平滑渲染

9. 细节点

①模型尽量不要做成多个物体挂点组合的形式,如果多个物体用到不一样的材质,那额定产生的 DC 可是很酸爽的
②如果模型是带动作的话, 模型的顶点数和骨骼数也是模型动作制作时的重要规范。
③图片占用内存的大小与图片大小、色彩深度、图片格式无关,与美术是否对图片资源进行压缩无关(android 用 ETC1,ios 用 pvrtc,不带 alpha 通道图片能够用 jpg)

10. 性能监控

①外部监控(上传资源时性能监控,和版本测试时,性能监控;从而及时发现问题)
②外网性能监控,比方 wetest APM 监控零碎。

12. 耗电相干

工具:比方 google 的 Battery Historian
优化思路:
①计算优化。算法、for 循环优化、Switch..case 代替 if..else、避开浮点运算
②防止 Wake Lock 使用不当
③应用 Job Scheduler 治理后台任务
④升高亮度等

七、总结

手游性能测试的外围竞争力,更多是设计正当的测试用例,在测试结束后剖析数据,并依据问题数据提供合理化的优化倡议;从而给研发团队提供高效服务,体现价值。

原文由黑子发表于 TesterHome 社区,点击原文链接可与作者间接交换。

正文完
 0