腾讯出品UPA性能分析工具的初体验

发表于2018-01-11
评论3 7k浏览

本文首发于知乎专栏:MACK的游戏开发笔记,欢迎各位关注。


使用过很多工具分析和优化游戏性能(zhuanlan.zhihu.com/p/29zhuanlan.zhihu.com/p/28zhuanlan.zhihu.com/p/31)。这次腾讯出了UPA也简单对比尝试了一下。因为刚好在一个上线测试版本末期,就用了做了一次性能回归也和UWA简单对比一下,因为时间有限并且已经经过多伦优化了所以并没有进行深度分析。


前言

平时查找性能问题会使用多种手段,简单看看使用Unity的Profile和Memprofile,渲染的使用Xcode的GFC和NVIDIA的TGD,深度分析会使用XCode的TimeProfiler和Allocations,而每个版本末期会使用UWAT自动生成报告看一下全局结果再有针对的分析轻松省力。个人感觉UPA的功能介于UWA和GOT之间,可以指定好测试用例自己或交由测试跑(类似GOT可以定制化更快速),测试完之后又可以自动出报告还有历史对比。


UPA有三大功能,Unity深度性能分析,资源分析和Mono内存分析。需要注意的是测试版本必须是Development版本,资源分析和Mono内存分析必须是MONO版。这次测试使用了官方推荐的高配手机oppoR9,建议不要拿低端机型测试,性能太差做MONO测试的时候会非常卡甚至可能拉不起来。


虽然深度性能测试不需要root,但是为了使用完整功能专门对oppo
R9进行了root,新的系统越来越难Root了,需要刷机安装可Root的固件包(参考shuame.com/faq/root-tut)。


Unity深度性能分析

分析完之后可以看到概括,包括各项硬性指标是否达标,官方优化建议,最耗时的模块Top10。和UWA的类似,UWA的更优雅,UPA的更直接。可以看出两者不同的风格,UPA更直接并且给出了硬性指标,符合大企鹅的霸气风格,不达标就别想上腾讯平台!


概览可以看到内存和GC过高,面数过高,CPU偏高。因为是测试版为了快速定位帧同步的bug开启了实时战斗日志记录。如果是正式版,只有发生过不同步的设备才会开启日志记录,所以实际上GC和CPU会低一些,不过还是偏高的还在持续优化中。面数这块一方面是为了减少卡顿有些预加载,另一方面美术的场景都是用小物件拼的并且非常密集,因为场景经常修改一直没有优化合并。。。


  • CPU:包括了性能占比饼状图,Top列表,关键帧截图,对象激活数,实例化数等各种。相比下来UWA更完善一些,GC调用,渲染模块性能,物理模块性能,动画模块性能,粒子模块性能,UI模块性能,加载模块性能。


UPA可以看到每一帧的开销和随着时间轴的走势,并且可以看到该帧的截图,消耗占比的饼状图,消耗Top的堆栈,还有这帧的建议。如上图是战斗中一帧,可以看到开销主要在渲染Camera.Render,Graphic.PresentAndSync上,逻辑BehaviourUpdate和LateBehaviourUpdate,动作Animator.Update,UI,粒子上。因为是带物理的射击MOBA,角色召唤物野怪道具比较多,子弹比较多,所以逻辑,物理,UI和粒子的开销较高,每个角色有上下半身融合物理也有些高。Overhead,是Unity没统计到的时间,用总计时间减去剩余的时间,一般包括C++到C#层的调用开销,场景复杂度,垂直同步等。因为已经经过几轮优化了,所以开销分布比较均匀零碎没有明显的性能瓶颈。


  • 内存:内存占比,分配曲线,纹理资源,网格资源,动画资源,音频资源,材质资源,这块和UWA非常像。


几个模块的分析界面都差不多,可以看到全局的消耗概况,消耗曲线,还可以点到消耗曲线上看到这一帧的截图。上图是Mesh资源的消耗,可以看到吃鸡模式的战斗场景Mesh占用最高,因为场景也最大。比较特殊的是我们使用了FMODStudio,音频的统计这边为0需要使用FMOD自己的工具或者XCode分析。


  • 图形:这块UPA是图形概况,合批核模块耗时会列出Draw
    calls,Set pass calls,面数,顶点数,VBO等指标,而UWA是Overtdraw和Mipmap。两者各有优势,Overdraw和Mipmap更容易发现问题一些。如果真的是渲染上的性能问题还是要用显卡厂商出的性能分析工具深度分析,可以通过Null
    Driver, Null HardwareI,最简shader,4像素贴图等模式快速定位。
  • 其他:其他例如温度,电量,网络(UPA在通用侧蚀力)两者都有统计。UWA更多了重要参数解析和项目运行日志。


通用性能

这个功能没能使用成功,拉起游戏之后,显示游戏成功启动,然后就黑屏系统也死了。


资源分析


这块功能感觉是非常有用,可以看到资源的占用情况,不用自己检查美术资源了。但是很遗憾,因为我们修改了Unity源码导致这个功能用不了。。。只能看看例子过过干瘾了。另外Unity3D的线上资源优化服务也用不了最高支持到5.3。


MONO

MONOGC的问题一直都是Unity开发的重大难点,内存占用过高轻则触发GC导致游戏卡顿,重则内存爆炸导致游戏闪退。另外频繁的申请和释放内存也会消耗CPU,消耗电量。使用MONO测试会卡很多,游戏的另外一个模式30个人超大地图加载会非常非常慢,开启MONO之后大概需要2分钟左右,导致游戏结束都无法测试。。。


  • MONO堆内存:这个就是一些全局的内测分配信息。


可见GC开销有些高,主要是在战斗日志前面解释过。


  • SnapShot:内存快照对比,这个功能比较实用,可以记录多个内存快照,可以对比任意两个快照间的内存分配差异。有快照间新增Top50和快照间保留Top50两个功能。可以用开解决内存泄漏和内存膨胀等问题。


这是一场团战的内存快照记录,可以看到新增的内存主要是UI,战斗日志和技能的开销,也符合预期。常驻的内存也是UI,网络,迷雾以及数学库的一些查找表(空间换时间)。UI这块确实开销很高,特别是大量的UI文字的合并。其实已经做过很多优化了,但是因为要显示的战斗信息非常多非常复杂,开销还是很高,后续优化的工作量巨大。


  • Top50:顾明思议,列出了排名前50的GC开销堆栈

可以看到分配高的是记录Log的字符串操作


报告对比

这个功能个人感觉非常有用,可以对比两次测试结果的关键数据,如上图左侧是大厅的分析数据,右侧是战斗的数据。也可以纵向对比多次测试的性能水平,非常实用。


总结:

从上面的各项功能体验可以看到,UPA各项功能非常完善,使用起来也非常简单,可以非常方便的集成到开发测试的迭代流程中,作为性能review的标杆和提供全局分析,节省大量人工。

UPA和UWA,挖掘机技术哪家强呢?个人感觉两者基本功能大致相近,小功能上各有千秋,两个工具使用一款即可,当然也可以结合着使用互补长短。双方的付费策略一个按时长收费每个月送一个小时免费测试时间,一个按季度收费每个月可以免费评测两次但体验不到完整功能,对于开发者来说都非常超值,免费够用付费也是物超所值,可以节省大量的时间。

不得不说腾讯的产品化做的真是非常出色,首先产品就做的相当出色并且经过腾讯内部大量真实项目验证和迭代,非常完善之后又作为一个产品对外推出,部分产品甚至开源,非常开放。每份报告可以评分,有实时的客服反馈,还有产品群,里面都是产品经理和程序开发。有什么问题和建议可以立即得到反馈,用了几款腾讯的组件都是这个模式非常给力。

最后需要说明的是,UPA只是初步体验,UWA用的是免费版很多功能体验不完整,如果有些出入和错误敬请谅解。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引