如何读懂UWA性能报告?

如何读懂UWA性能报告?

当我们在UWA网站(www.uwa4d.com)提交了性能检测的项目后,会在2天时间内收到一份测评报告。这个报告中包含大量性能数据,一些开发者表示对这些性能参数不甚理解。这些数值是怎么得来的,具体代表什么意思,说明性能是偏高还是偏低了?合理范围是多少?接下来该怎么优化?今天起,我们将以连载的方式为大家详细说明UWA报告该怎么看。

在被各位技术大大吐槽之前,小编先解释下:由于本菇凉本来对Unity没什么基础,完全是靠着这两年跟着技术大大们耳濡目染学了点三脚猫功夫,所以本文初衷是为了自己总结学习,如果也能给UWA的新朋友一些思路那就极好了。各位大神如果乐意或者方便,尽量也多提点下小编,力的作用是相互的,交流学习亦是如此。


性能总结,反应项目性能的状况以及严重性

UWA Tech Doc

1. 总体帧数:真人真机测试十分钟左右得到的帧数(专业会员15分钟左右)
你也许会问:游戏帧数越高越好吗?
理论上来说,是的。以一秒30帧为例,10分钟测试下来,理想的性能帧数可以跑到16000~18000帧左右。所以,如果你的项目帧数较低,那么你的游戏可能正在经受一定的帧率卡顿问题。

2. GC次数:测试过程中系统垃圾回收操作(Garbage Collection)的调用次数
需要注意的是,每次GC调用均会造成一定程度上的卡顿,降低了项目运行的流畅度。如果开发人员的逻辑代码分配堆内存过大过快的话,则GC调用的次数也会随之增加。那么标准是什么呢?我们建议把这个频率控制在1000帧/次以上,当然数值越大越好!

3. CPU均值:测试过程中平均每帧的CPU占用
UWA提供了多种测试机,覆盖了市面上高/中/低档的主流机型,如小米系列、三星系列等。一般来说,相同测试条件下,设备性能越好,CPU耗时的均值肯定是越低的。


很多朋友上来直接问,我们项目想优化到50+、60的fps,这个可能吗?

UWA Tech Doc

CPU耗时超过33ms的帧数耗时超过了68%(请注意,UWA的建议是低于10%),超过50ms的帧数耗时达到35%,我相信开发者看到这个数据的时候,一定是这样的:

UWA Tech Doc

莫着急,其实谁的项目优化前不是这样呢?等优化N轮后再晒晒美丽的性能数据吧,只要功夫深,铁杵磨成绣花针!

UWA Tech Doc

好的,那么我们喝口凉水压压惊,继续来看下面CPU占用走势图:
UWA Tech Doc
各个模块的CPU耗时走势图在这里是一清二楚的,也就是告诉大家哪些模块需要你们大动刀子了。未来的连载篇中我们会就具体模块给大家作一一介绍。


谈优化必谈内存

UWA报告中先给出了两个大指标:总内存和堆内存,也是项目负责人、发行运行商比较关注的指标。同样,由于内存模块是重中之重,UWA报告中对该模块进行了深度剖析,包括Reserved Total,Used Total等细分指标,能反应内存分配是否合理、堆内存是否增加过多以及是否存在内存泄露等重大问题。我们回头会逐一说明。
UWA Tech Doc
上图中,项目(卡牌类型)的总内存峰值为289MB,堆内存峰值为76MB,小编觉得有点过高了哦。那么内存把控多少是比较合理的呢?

1、内存
我们建议把内存把控在150MB以内。这是经过了大量的项目优化后的经验数值。其实,对于目前市场主流的Unity游戏来说,其内存占用主要集中在120~200MB。同时,顾及到例如iPhone 4和512MB/768MB等低端Android机型,其应用的自身总体内存占用不可超过200MB(iPhone 4的安全线应该在180MB左右),所以我们将Reserved Total设定在150MB,这是Unity引擎的自身内存分配。另外,某些渠道对Android游戏的PSS内存进行了严格的限制。一般要求游戏的PSS内存在200MB以下。这是我们将Reserved Total内存设定在150MB的另外一个重要原因。

不过呢,考虑到现在设备越来越高端,不少开发团队为了彰显美术表现力而舍弃了低端设备。 个人也觉得稍微高出这个标准也是无可厚非的事,更何况《六龙争霸》都在三星S3上跑到了221MB呢,当然未来UWA也会不断更新我们的测评机制,给大家一个更有时效性和差异性的标准啦。

2、堆内存
我们建议把堆内存把控在40MB以内。目前Unity所使用的Mono版本有这么个特点,即:Mono的堆内存一旦分配,就不会返还给系统。这意味着Mono的堆内存是只升不降的。在移动设备上的内存占用可谓是寸土寸金,因此我们要着重对堆内存把把关。


哪些函数是造成性能问题的罪魁祸首呢?

根据二八定律,80%的性能问题出在20%的性能瓶颈之中。我们的总结报告中也给大家罗列出来了。

1.高CPU占用函数

请输入图片描述
2.高堆内存分配函数
请输入图片描述
该部分所列出的代码函数既包含引擎模块函数,也包含自己的逻辑代码函数。小编再次提醒,由于这些函数占据了项目80%的性能开销,所以一定要各个击破!另外在UWA报告中的“代码效率”一栏中,我们也能查看到每个函数的具体调用情况,包括其调用次数、耗时分布、相关堆栈等信息,我们将在后期给大家做出详解。


关于任务列表

另外要提一下的是,测评报告还根据性能状态给出了优化任务列表,按照问题的严重程度设置了优先级,并对每个优化任务给出了需要检查或优化的步骤。
请输入图片描述

小编建议大家按照上面的顺序来进行优化,特别是在项目非常紧急的情况下,因为很多性能问题其实是相互牵制的,比如堆内存分配过高会加速GC的到来等等。当我们把这些大头都优化一轮之后再提交上来复测下,说不定效果立竿见影呐!

今天的分享就到这里,明天我们继续讲解UWA报告中的渲染模块,欢迎各位开发者捧场,如果着急要看更多数据的朋友,不如现在就到www.uwa4d.com提交项目进行测评啦。