专栏首页WeTest质量开放平台团队的专栏如何用UPA优化性能?先读懂这份报告!
原创

如何用UPA优化性能?先读懂这份报告!

作者:徐森, 腾讯WeTest UPA团队测试开发 高级工程师

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

原文链接:http://wetest.qq.com/lab/view/375.html

WeTest UPA是WeTest和Unity联合出品的一款Unity游戏性能优化的工具,自上线以来受到了很多Unity游戏开发人员和测试人员的关注,同时也有一些用户反馈不知道应该如何解读UPA报告,下面我们对UPA报告的解读方法进行总结,帮助大家最大化利用UPA报告,解决游戏性能问题。

在正式开始前,需要强调一点,由于游戏的Development版本本身会对游戏的性能产生一定影响,所以UPA报告中的性能数据只能作为性能优化的参考,不能用来衡量游戏的真实性能。如果需要测试游戏真实的性能情况,可以使用WeTest助手的通用测试功能,对游戏最终上线的版本进行测试。


一、概述


打开一份UPA报告时,最先看到的就是概述页面,这也是我们推荐用户第一时间关注的页面。概述页面一开始会列出测试的基本信息,并根据腾讯游戏的性能标准,给出本次测试的结果(通过,不通过和警告):

1.png

接下来,会列出本次报告详细的性能数据:

2.png

一般来说,游戏的性能问题主要有两方面:帧率和内存。帧率分为CPU耗时和GPU耗时,内存问题分为游戏逻辑内存(在Unity游戏中即Mono内存)和资源内存。

上述的详细性能数据都包含其中:帧率反映CPU耗时和GPU耗时情况,ReservedMono内存反映游戏逻辑内存情况,纹理资源、网格资源、动画资源和音频资源反映资源内存情况,DrawCall和Tris反映GPU耗时情况。通过上述数据,用户可以大概知道游戏的性能问题出在哪方面。

除了详细数据以外,UPA还结合Unity现场支持专家们的经验,对常见问题进行了总结,并在报告中自动进行分析:

3.png

针对这些问题,我们也总结了相应的优化建议:

4.png

根据提供的优化建议,用户可以快速的解决一些常见性能问题。另外,我们的问题库及经验库也会不断更新优化,带给用户更多实用的优化经验。

通过概述页面,我们可以大致了解到游戏的性能数据,出现的性能问题,以及对应的优化建议。但只有这些是不够的,如果性能问题比较复杂,就需要更详细的数据帮助我们定位及优化,下面就来看看UPA提供的详细性能数据有哪些。

二、CPU模块


CPU模块主要提供了CPU耗时相关的详细数据。在定位CPU相关性能问题时,我们可以从两方面入手:

1、整体耗时

如果游戏的整体帧率都比较低,需要重点关注某个模块或者某个函数是否一直耗时较高,首先,看一下模块耗时:

5.png

游戏的FPS均值13.71较低,同时渲染模块耗时(RenderingTime)一直较高,可以尝试优化渲染相关性能。其次,我们也可以看一下耗时排名Top10的模块,并尝试优化:

6.png

2、单帧耗时

如果游戏整体帧率正常,偶尔卡顿的话,就需要关注单帧耗时较高的帧。通过下图可以方便找到单帧耗时较高的情况:

7.png

针对耗时较高的帧,查看该帧详细的模块耗时情况:

8.png

模块耗时可以展开,查看模块间的调用关系,并最终确定导致单帧耗时较高的模块。

由于有些模块属于引擎内部模块,用户可能不太清楚其具体作用,我们也对一些模块的作用进行了说明:

9.png

三、图形模块


图形模块反映了渲染耗时情况,并通过一些指标侧面反映了GPU的压力。在渲染导致游戏卡顿时,需要重点关注图形模块。

1、模块耗时

UPA提供了一些渲染相关的模块耗时信息,通过这些信息我们可以判断游戏的摄像机使用是否合理,以及Shader相关的耗时是否较高:

10.png

Camera.Render模块反映了游戏过程中摄像机的数量和渲染耗时。

11.png

Shader相关模块反映了Shader处理的耗时。

2、合批

除了摄像机和Shader方面的优化,合批也是图形优化中非常重要的一点。由于GPU是单独的硬件,其性能消耗较难采集,因此一般用一些性能指标间接反映GPU的压力情况,最典型的就是Drawcall(Unity5.0以后改为SetPasscall)指标。在Unity引擎中对Drawcall最直接的优化方法就是合批(Batch)。

合批又分为静态合批(StaticBatch)和动态合批(DynamicBatch),其原理就是把GPU的压力分一些到CPU或内存,因此开启合批会带来额外的CPU或内存消耗,需要我们进行权衡。

13.png

以静态合批为例,UPA会列出开启静态合批以后节省的Drawcall数量(图中黄线部分),并以总Drawcall数量作为背景进行比较,用户可以清晰看出开启静态合批以后带来的收益,以此决定是否进行合批。

3、其他数据

除了上述数据意外,UPA还提供了每帧的VBO、面数等渲染指标,方便有经验的用户利用这些指标进行渲染性能优化:

14.png

四、内存模块


内存模块反映了游戏各方面的内存占用情况,首先我们需要关注游戏整体的内存占用:

15.png

Total Reserved表示引擎分配的内存,Total Used表示引擎实际使用的内存,两者的差值(图中红线部分)表示空闲的内存。通过上图我们可以知道引擎分配内存是否在合理范围,空闲内存是否较多。

如果引擎分配内存较大,或者空闲内存较多,都是不合理的,这时就需要知道问题出在哪个部分,Unity引擎分配的内存分为四个部分,在UPA报告中都以曲线展示:

1、Unity

这部分表示引擎本身逻辑需要使用的内存,资源内存也包含在其中,如果需要进行优化,建议直接优化资源方面的内存,UPA中列出了纹理、网格、动画、音频和材质等资源的内存占用,可以针对性进行优化(以纹理资源为例):

16.png

2、Mono

Mono内存表示游戏中脚本分配的内存,游戏逻辑由开发人员自己编写,并且一般比较复杂,因此较容易出现内存问题(虽然Mono本身提供了垃圾回收机制,但仍然可能出现内存泄漏)。

17.png

对于Mono内存,我们需要关注总内存Reserved及空闲Unused,防止内存泄漏。

3、GfxDriver和Fmod

GfxDriver和Fmod内存分别表示Unity底层渲染模块和音频模块的内存,GfxDriver内存较高的话建议对Shader和Texture等资源进行优化,Fmod内存较高的话建议对AudioSource和AudioClip等资源进行优化。

4、Profiler

这部分表示Unity Profiler分配的内存,不会带到上线版本,在确认内存占用情况时需要去除该部分内存。

五、总结


在UPA报告中,展示了游戏的整体性能情况,并针对常见的性能问题提供了问题列表及优化建议。对于CPU耗时和GPU耗时部分提供了详细的性能数据,包括各模块耗时,以及各种渲染指标,用户可以利用这些详细性能数据定位并优化游戏的性能问题。

在内存方面,UPA提供了各部分的内存曲线,使用户可以了解各部分内存分配情况,但是对于详细定位及优化问题还缺少关键数据。针对内存优化中最常见的资源内存优化及Mono内存优化,UPA分别提供了资源测试和Mono内存测试类型,帮助大家获取更详细的内存数据,更方便的优化内存问题。


UPA—— 一款针对Unity游戏/产品的深度性能分析工具,由腾讯WeTest和unity官方共同研发打造,可以帮助游戏开发者快速定位性能问题。旨在为游戏开发者提供更完善的手游性能解决方案,同时与开发环节形成闭环,保障游戏品质。

点击链接:http://wetest.qq.com/cube/ ,下载WeTest助手APP ,立即使用UPA。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • H5学习从0到1-H5的超链接以及图片链接(6)

    一墨编程学习
  • 月薪1万的程序员纠结是否去月薪5千的创业公司,网友:脑子进水了

    在大公司里过着朝九晚五的生活,每个月拿1万的月薪。还是去创业公司奋斗一把,但是每个月工资只有5000块钱。你会怎么选择?最近一名大厂的程序员就遇到了这样一个问题...

    一墨编程学习
  • 这就是程序员花钱买手办的理由?

    据说,某程序大师, 经常随身带一只小黄鸭, 在调试代码的时候, 会将小黄鸭放到桌面上,然后详细地向鸭子解释每行代码, 大师在解释每一行代码的过程中, 代码中不完...

    zhaoolee
  • 为何 987654321/123456789 的值是 8.0000000729

    有时候,发现 987654321/123456789=8.0000000729 为什么后面还有几个数字? 本文告诉大家,后面几个是如何算的

    林德熙
  • C# 已知点和向量,求距离的点

    已知一个点 P 和向量 v ,求在这个点P按照向量 v 运行距离 d 的点 B 。

    林德熙
  • WPF 使用 SharpDX

    先介绍一下 SharpDx ,一个底层封装的 DirectX 库,支持 AnyCpu ,支持 Direct3D9, Direct3D11, Direct3D12...

    林德熙
  • 程序员抄袭代码现象普遍, 却能拿到年薪30万, 你怎么看?

    你们知道程序员最熟悉,最熟练,最常用的两个快捷键是哪两个吗?没错,估计你现在心中所想的就是:和,俗名为:复制和粘贴。

    一墨编程学习
  • 计算机网络学习记录(不断更新)

    平时TTL减为0时最后一个经手的路由器会返回TTL-Exceeded报文,到目的主机后由于端口大于30000,会返回Port-Unreachable报文,这样就...

    xiaoxi666
  • 如何在VS2017中使用快捷键格式化代码?

    2、再按住Ctrl键,接着按一下K键,接着按一下F键。(注意:Ctrl键在按后面这2个键的时候一直是按着的,直到F键按完才松开)。也就是俗称的:Ctrl+K+F...

    黑泽君
  • 招聘本科程序员好,还是专科有经验的程序员?网友答案很现实!

    大家可能已经发现,最近几年来的各种招聘,很多岗位都要求本科以上学历,小型的创业互联网公司艰苦的工作岗位,才有部分专科岗位 。这对于专科生来说,看下面这位HR的经...

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券