UWA 新功能 | 优化方法进阶—定位子函数的开销
- 作者:admin
- /
- 时间:2017年08月17日
- /
- 浏览:4047 次
- /
- 分类:万象更新
通常情况下,通过代码堆栈去定位项目性能瓶颈是最一针见血的方法,并且UWA的线上性能测评报告中已经支持了该功能。今天,我们在原有功能的基础上加大分析力度—支持子函数代码堆栈信息查看,帮助大家更为精准地定位CPU性能瓶颈和堆内存泄漏。
一、子函数的堆栈信息
1、查看子函数的CPU走势
在以前的UWA性能测评报告中,我们可以查看渲染模块Camera.Render的总体CPU耗时,如下图:
这种逐帧查看的办法可能存在一些关键信息漏失的隐患。为此,我们在原有功能基础上增加了子函数走势查看功能:点开主函数的堆栈信息,我们就可以查看其任意一个子函数的CPU完整走势,从而更为精准地定位性能瓶颈。
下图是个例子,即通过依次选择Culling和CameraEffect.OnPreCull,能直接定位到部分场景中Culling计算瓶颈(黄色区域)。
具体操作方法可见如下视频:
2、堆内存泄露问题的定位效率进一步提升
当一个项目的堆内存发生泄漏时,我们会在UWA的Mono测评报告中看到类似下面的图:
在我们通过堆内存的具体分配堆栈来进行泄露点的定位时,一般情况下,我们会认为下图中红框函数为堆内存泄露的主要对象(其驻留内存最大为1.22 MB),并对其进行详细的检测。
但事实上,当我们分别选择这两个函数,会发现红框函数在整个项目运行阶段的堆内存分配非常平稳,并不存在上升趋势,真正造成泄露的是上图中的蓝框函数。
红框函数的堆内存走势非常平稳
蓝框函数的堆内存上升明显
在UWA以前的报告中,我们需要花费大量的时间来对其进行检测、分析和验证,而现在,只需要点击两下Checkbox即可进行判定。通过该方法,能有效减少研发团队定位泄漏的时间,并更精准地定位泄漏点。
*上述新功能为专业会员权限。
二、项目性能排名功能
该功能将测试项目与UWA数据库中的的参数指标进行比较,让研发团队更明确自身项目在同类型/全类型项目中的排名情况,并且客观认识到某些模块上的优势和不足,从而帮助研发团队更加高效地判断优化的优先级。
该功能主要有以下部分:
1、总体性能排名
总体性能在宏观上主要反应在CPU、内存和耗电量三个指标中,而CPU中又分为渲染、UI、动画、粒子系统和加载等重要引擎模块,内存则分为纹理、网格、动画片段、音频片段和材质等重要资源。
我们不仅将测试项目与同设备的测试数据进行排名,同时,还将与相同类型的的性能数据进行比较。如下图,项目A是一款ARPG项目在设备红米Note2上的总体性能排名,其在CPU耗时方面相当不错,优于70%的同设备(红米Note2)上测试的所有项目;并且优于67%同设备(红米Note2)上测试过的所有ARPG项目。
同时,在引擎模块中,其渲染、物理和加载模块都非常优秀,UI模块次之,而粒子系统模块则相对耗时较高,仅高于10%的同设备同类型测试,这意味着接下来的研发过程中,研发团队需要加强对粒子系统的优化。特别是对于研发工期较为紧张的团队,我们建议优先考虑粒子系统优化,而不是渲染和加载模块,因为同样的时间投入,粒子系统带来的优化效果更加立竿见影,性价比更高。
2、各模块重要参数排名
在UWA测评报告中,我们对Unity引擎的各个主要模块以及各种主流资源的具体参数中都进行了排名,从而更为细致地让用户看到项目需要完善的地方。
比如,下图中该项目的内存占用为245MB,虽然要高于UWA的推荐值,但在整个行业的同类型游戏中,该项目仅高于28%的项目。
但是,仍需要注意的是,该项目虽然整体内存使用低于行业平均值,但其GFX内存占用则超过了83%的同类型行业数据,这说明该项目的GFX内存仍有较大空间可以下降,研发团队可以直接通过检测纹理、网格等资源数据来即刻对其进行优化和完善。
以上即为排名功能的主要使用场景,用户可以根据自身实际情况来查看对其更有针对性的性能瓶颈参数,并对其进行快速完善。我们希望通过该功能可以让研发团队看到自己的优势和不足,高效提升自己项目的游戏品质。另外,我们也不会不断更新和细分行业数据,以求做到更精准、更全面、更有建设性。
以上介绍的子函数堆栈信息和项目性能排名两大功能目前已在UWA 网站上线,研发团队提交性能测评即可体验!(传送门:www.uwa4d.com)
关于UWA
由侑虎科技开发的游戏/VR应用性能优化平台,目前提供 1)性能检测与优化 2)资源检测与分析 3)UWA GOT 三大工具。同时,我们也会为大家开发更省心的功能,希望通过它们可以减少开发者反复测试定位问题的时间,从而将更多的精力集中在项目开发和解决问题中。我们将以实力和态度诠释我们对性能优化的定义:解决你的性能问题,方为“优化”。