UPA性能分析工具使用详解

自从WeTest宣布与Unity官方共同推出Unity性能分析工具UPA(Unity Performance Analysis)以来(Hi,我们和Unity合作了全新的性能分析工具),我们收到了非常多热情的开发者的反馈。为了更好与开发者沟通。我们开辟了UPA官方论坛。

UPA的官方论坛将分享UPA的使用及常见问题,Unity官方团队性能分析的技术积累分享,欢迎开发者们加入!

UPA官方论坛:http://forum.china.unity3d.com/forum-upa-1.html

快捷访问:

访问 Unity官方社区Unitychina.cn。

访问[技术交流]-[UPA技术交流]版面。

特别提醒:UPA的预约测试将在12月21日结束,需要试用的开发者抓紧预约哦。

 今天我们将为大家分享UPA性能分析工具使用详解。

UPA的测试模式

UPA目前支持3种测试模式,分别是:深度性能测试、资源分析测试、Mono内存测试。

深度性能测试

UPA是一款更适合开发、测试做深度性能分析的工具。拥有四大特性:

● 无需ROOT或接入SDK,本地APK拉起测试,自助使用,简单易用;

● 增加单帧模块和渲染数据,直击性能瓶颈;

● 提供问题列表,Unity官方团队优化建议;

● 全面兼容Unity 2017版本及Android 7.0版本。

资源分析测试

资源分析测试详细列出了单帧所有资源及资源的详细信息。例如:如纹理的长宽,格式,资源的生命周期,资源重复情况,关卡切换时保留资源等。并且提供了资源快照对比的功能,方便使用者快速解决资源问题。

Mono内存测试

Mono内存测试是解决Mono内存泄漏问题的利器,提供了Mono内存快照对比的功能,可以快速定位泄漏的Mono内存,同时展示对象间的引用关系,方便使用者快速解除引用,释放内存。此外,Mono内存测试报告还列出了函数的GC Alloc情况,以便减少不必要的Mono内存分配,降低GC的频率。

如何进行UPA性能测试

深度性能测试

手机安装待测游戏的development版本。

下载最新版WeTest助手并安装,打开WeTest助手,点击“UPA测试”,选择待测游戏。

完成测试后,点击悬浮框中的“终止”图标即可,测试过程中可按需打点,记录关键场景。

资源分析测试和Mono内存测试

准备一台本地ROOT手机,下载最新版本WeTest助手并安装。打开WeTest助手,点击“UPA测试”,拉到底部,点击“资源测试”或“Mono内存测试”,选择待测游戏。完成测试后,点击悬浮框中的“终止”图标即可。

UPA性能测试报告解读

您可以登录wetest.qq.com,在右上角选择“我的报告”,进入报告记录页面,选择左边栏的“客户端性能报告”,然后筛选“Unity测试”,即可查看所有UPA类型的测试报告。

深度性能测试

概况栏:可以查看该次测试的详细信息,以及整体性能情况。

整体性能数值会和腾讯的游戏性能指标结合,对该次测试的游戏性能进行评价。

UPA根据Unity官方技术团队的经验,对游戏性能数据进行多方位分析,得出游戏存在的详细性能问题列表,并附上对应的优化方案,方便使用者定位及解决性能问题。

对于一些无法确是否存在问题的性能指标,UPA会列出具体数值,供使用者参考。

CPU栏:主要包括了模块耗时信息,针对游戏帧率较低及卡顿问题。

上图展示了帧时间及各子模块的时间,包括渲染模块,脚本模块,物理模块,GC模块,光照模块,UI模块等。点击曲线上的某帧,可以通过数据及图形更直观的查看该帧的耗时情况。

单帧函数可以通过耗时或者GC Alloc进行排序,也可以展开查看下一级的子函数信息。对于比较重要的函数,UPA将其单独列为一栏,以便查看函数耗时及调用趋势。主要包括对象激活,实例化等函数。

内存栏:包括了引擎内存,Mono内存,资源内存等各种内存数据,主要针对游戏内存占用较高问题。

UPA首先会列出Total Reserved和Total Used内存曲线,可以查看游戏整体内存占用情况,Total Unused曲线则反映了游戏的整体内存浪费情况。

接下来UPA展示了Unity,Mono,GfxDriver,Fmod,Profiler等模块的内存占用情况,每个模块都包含Reserved,Used和Unused曲线。此外每个模块都采用Total Reserved内存值作为背景对比,可以直观看出该模块在整体内存中的占比。

由于资源内存一般是游戏内存优化的重点,UPA还列出了纹理,网格,音频,动画及材质资源的内存曲线。

图形栏:包括了游戏的渲染数据,用来分析渲染上是否存在瓶颈。UPA会列出Draw calls,Set pass calls,面数,顶点数,VBO等指标,方便使用者了解游戏整体的渲染性能。

合批(Batch)是渲染优化中非常重要的一点,UPA专门对合批的数据进行了分析,并列出了通过合批可以节省的Draw call数量,方便使用者在是否合批上进行选择。

对于比较重要的函数,UPA将其单独列为一栏,以便查看函数耗时及调用趋势。主要包括Camera.Render,Shader.Parse,Shader.CreateGPUProgram等函数。

资源分析报告

资源测试结论:主要展示资源测试的总体情况,对资源重复率、GameObject数量、纹理资源、网格资源、动画剪辑、音频大小、关卡间保留资源、对象拷贝数量等每个纬度分别给出结论(通过、警告、不通过),在此基础之上给出当次测试的综合结论。

资源重复率:是指内存中同一时刻,存在两份或者以上相同的2D纹理、网格、动画剪辑、音频等资源。一般是相同的一份资源被打包到了多个Assetbundle中,如果这些Assetbundle都被加载进内存,内存中就会存在多份相同的资源。

该项目主要展示了重复率峰值、建议优化内存、重复数量、内存优化大小、内存数目优化等数据,也可通过右上角“导出资源重复率数据”获取详细的重复率数据。

重复率峰值:测试过程中重复资源大小占比的最高值,每一时刻重复率的计算公式(重复率=(当前值-优化值)/当前值)100%。

建议优化内存:测试过程中当前值与优化值的最大差值。

重复数量:测试过程中重复数量(当前值-优化值)的最大值。

内存优化大小:展示内存大小占用走势,将内存中重复资源。大小超过标准(20%)部分标红,点击图中超标点,可以查看该点详细的资源信息(包括资源类型、资源名称、资源大小和重复数量),图中黑色竖条虚线为游戏场景名。 

内存数目优化:展示内存数目占用走势,通过查看某一时刻当前值与优化值情况,获取当前可优化数目(可优化数目=当前值—优化值)。

重复资源Top 20:该表格主要展示内存中重复的资源,按照资源大小默认排序展示的Top 20,包括资源类型、资源名称、资源大小、重复数量。

GameObject数量:展示GameObject数量走势,通过点击可查看每个时间点的GameObject数量,也可通过黑色竖条虚线,了解每个场景的GameObject走势。

纹理资源:纹理资源对应Unity的Texture2D资源,该项目主要展示纹理峰值、超标资源数、RGB24数量、RGB32数量。

● 纹理峰值:测试过程中纹理资源占用的内存最大值。

● 超标资源:分辨率(高度或宽度)超过1024的资源数量。

● RGB24数量:真彩色不带alpha通道纹理资源数量。

● RGBA32数量:高质量真彩色带alpha通道纹理资源数量。

纹理大小:该项主要展示纹理资源占内存大小的趋势,通过黑色竖条虚线,了解每个场景具体的纹理资源走势,红色横条虚线为50M的资源超标警示线。

点击图中任意一点,可以查看该点详细的纹理资源信息(资源类型、资源名称、资源大小、高度、宽度、RGB格式、mipmap数量)。

超标纹理Top 20:该表格主要展示建议优化纹理资源,默认按照资源大小降序排列。

点击任意一个资源名称,可以获取该资源影响区域。

网格资源:纹理资源对应Unity的Mesh资源,该项目主要展示网格峰值、超标资源数。

网格峰值:测试过程中网格资源占用的内存最大值;

超标资源数:测试过程中网格资源vertex数量超过500的资源数量;

网格大小:该项主要展示网格资源占内存大小的趋势,通过黑色竖条虚线,了解每个场景具体的纹理资源走势,红色横条虚线为20M的资源超标警示线。

点击图中任意一点,可以查看该点详细的网格资源信息,包括资源类型、资源名称、资源大小、Vertex数量、Triangle数量。

超标网格Top 20:该表格主要展示建议优化网格资源,默认按照资源大小降序排列。点击任意一个资源名称,可以获取该资源影响区域。

点击任意一个资源名称,可以获取该资源影响区域。

动画剪辑:存储着所有可使用于角色动画或简单动画的动画数据,对应Unity的Animation Clip,该项目主要展示动画剪辑峰值。

动画剪辑峰值:测试过程中动画剪辑资源占用的内存最大值;

动画剪辑大小:该项主要展示动画剪辑资源占内存大小的趋势,通过黑色竖条虚线,了解每个场景具体的动画剪辑资源走势,红色横条虚线为15M的资源超标警示线。

点击图中任意一点,可以查看该点详细的动画剪辑资源信息。包括资源类型、资源名称、资源大小、帧率、时长。

资源Top 20:该表格主要展示测试过程中动画剪辑资源,默认按照资源大小降序排列,内存占用Top 20。

点击任意一个资源名称,可以获取该资源影响区域。

音频剪辑:被音源所使用来表现被导入到Unity的音频资产。Unity同时支持单声道和立体声音频资产,对应Unity的Audio Clip,该项目主要展示音频剪辑峰值。

动画剪辑峰值:测试过程中音频剪辑资源占用的内存最大值;

音频剪辑大小:展示音频剪辑资源占内存大小的趋势,通过黑色竖条虚线,了解每个场景具体的动画剪辑资源走势,红色横条虚线为15M的资源超标警示线。

点击图中任意一点,可以查看该点详细的音频剪辑资源信息。包括资源类型、资源名称、资源大小、声道、频率、时长、Samples。

资源Top 20:该表格主要展示测试过程中音频剪辑资源,默认按照资源大小降序排列,内存占用Top 20。

点击任意一个资源名称,可以获取该资源影响区域。

关卡间保留资源:从场景A切换到到场景B过程中保留的2D纹理、网格、动画剪辑、音频等资源大小,该项目主要展示关卡间保留资源峰值、超标关卡数,以及每个场景切换保留的资源占内存大小情况。

● 保留资源峰值:从场景A切换到到场景B过程中保留资源的最大值。

● 超标数:场景切换过程中保留资源超标预警线(20M)的次数之和。

点击某个柱状图,可以查看场景间切换保留资源的详细资源信息。

对象拷贝数量:使用Render.material不恰当导致material对象进行拷贝的数量。包括资源类型、资源名称、拷贝数量、资源堆栈。

其它资源

Mono内存测试报告

Mono性能测试报告主要展示堆内存峰值、已用内存峰值。

● 堆内存峰值:测试过程中已分配的堆内存最大值。

● 已用内存峰值:测试过程中已使用的堆内存最大值。

图中红点标出了手机客户端测试过程中具体的标记点。Snapshot表格提供下载功能,可以下载每个快照点详细的Mono内存情况。

添加对比:选择任意两个快照,点击对比生成对比数据,生成对比数据的新表,可以查看快照间新增数据、快照间保留数据,对象被引用次数。

下载对比报表:可以查看详细的对象引用关系。

UPA性能指标注解

FPS:游戏运行时每秒所运行的帧数(简称FPS,Frames Per Second) 。该项目主要展示FPS均值、大于25(或18帧)比例、GC平均耗时、GC次数。

FPS情况:该项主要展示游戏过程中FPS的趋势,通过黑色竖条虚线,了解每个场景具体的FPS走势,红色横条虚线为25(18帧)的FPS超标警示线,通过横轴下方的缩放条,可以对局部FPS曲线进行放大。

点击图中任意一点,可以查看该点详细的帧时间以及各帧的Drawcall数量。

点击任意一帧可查看该帧的函数耗时详细情况。包括函数名、函数时间、时间占比。

函数时间总表:测试过程中所有函数单次耗时占用Top 20。

点击总表中任意一个函数名,在FPS情况曲线中会展示所有该函数出现的位置。

CPU:游戏运行时CPU的占用比率。该项目主要展示游戏测试过程中CPU小于60%比率,CPU均值。

● CPU小于60%比率:游戏测试过程中CPU占比小于60%占测试过程的比率。

● CPU均值:游戏过程中平均每秒的CPU占用。

网络流量:可监测到运行时间的流量变化、平均流量以及精确到秒的具体流量数值。

Mono内存:托管堆内存,本次测试C#脚本对象占用内存;该项目主要展示游戏测试过程中堆内存峰值,已用内存峰值,MONO内存占用趋势。

● 堆内存峰值:测试过程中已分配的堆内存最大值。

● 已用内存峰值:测试过程中已使用的堆内存最大值。

PSS内存: Proportional Set Size 实际使用的物理内存。比例分配共享库占用的内存。该项主要展示PSS峰值、PSS均值,以及PSS内存占用趋势。

● PSS峰值:测试过程中PSS内存占用的最大值。

● PSS均值:测试过程中PSS内存占用的平均值。

Drawcall趋势:Unity每次在准备数据并通知GPU渲染的过程称为一次Draw Call。该项主要展示Drawcall峰值和Drawcall的走势。

Drawcall峰值:测试过程中Drawcall数量的最大值。

小结

UPA性能分析工具使用详解今天就为大家介绍在这里,欢迎大家访问UPA官方论坛(unitychina.cn)来与Unity的官方技术支持工程师进行交流!需要试用UPA的开发团队抓紧预约!

✬如果你喜欢这篇文章,欢迎分享到朋友圈✬

关于腾讯WeTest

腾讯WeTest是腾讯游戏官方推出的一站式游戏测试平台,用十年腾讯游戏测试经验帮助广大开发者对游戏开发全生命周期进行质量保障。 腾讯WeTest提供:兼容适配测试;云端真机调试;安全测试;耗电量测试;服务器压力测试;舆情监控等服务。

原文发布于微信公众号 - 腾讯WeTest(TencentWeTest)

原文发表时间:2017-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python小白到大牛

python老司机带你玩玩炫酷的3D渲染,酷毙了!

自从学会了turtle模块后,画了不少简笔画。像小猪佩奇、哆啦A梦等等,但是这些依然不能让身边人感受到python的强大,依然是每次装逼必被打脸。就像你用tur...

3172
来自专栏CDA数据分析师

Python告诉你:单词软件火了,但真的有那么多人在背单词吗?

0x00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛? 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛? 别急,Python...

2267
来自专栏人工智能头条

机器学习数据采集入门经验分享

1154
来自专栏PPV课数据科学社区

【学习】Python可视化工具概述-外文编译

本文由 PPV课 - korobas 翻译,未经许可,禁止转载! 原文翻译链接:http://pbpython.com/visualization-tools...

3967
来自专栏xingoo, 一个梦想做发明家的程序员

我的AI之路 —— OCR文字识别快速体验版

还记得前一阵某小盆友拿过来一个全是图片的ppt,让我把里面的文字给抠出来(我当时很震惊!!!),随后在网上随便找了个OCR的在线文档转换软件,就给转过来了——这...

4192
来自专栏媒矿工厂

IP现场直播场景下生产端延迟分析与设计

在现场制作过程中,人们常常需要对多个几乎同时到达的音视频数据流进行实时编辑处理。如果这些数据流之间存在比较明显的延迟,就有可能影响到制作过程的效率。因此,设计这...

1903
来自专栏谈补锅

apns关于APP数字角标的理解

  前两天群里有兄弟在吐槽,做远程推送的时候:老板要求APP桌面图标的右上角显示红色未读数字(数字角标)要精准,有多少未读通知就显示数字几;但是后台的弟兄在发送...

1783
来自专栏linux驱动个人学习

GPU与CPU的区别

1573
来自专栏张善友的专栏

CAP理论十二年回顾:"规则"变了

CAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显式处理分区情形,系统设计师可以做到优化数据一致...

2739
来自专栏云成本管理

云成本管理方法论(二)——云使用管理

本篇文章将基于云成本管理模型对云使用管理中四个管理维度(管理对象、管理时点、判定规则和管理措施)进行更具体的分析。

4805

扫码关注云+社区