原文由黑子发表于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社区,点击原文链接可与作者间接交换。