美文网首页
UWA性能报告精读

UWA性能报告精读

作者: 骆天涯 | 来源:发表于2017-11-22 21:10 被阅读143次

    仿UWA对Unity项目进行性能分析<一>

    最近在对项目的Unity部分进行性能分析,查找profiler的一些指标定义时,恰巧搜到了UWA的博客,看了以后感觉受益颇多。尤其是最后一部分的案例分析,包含了性能分析的参数和指标,可以作为Unity部分性能测试的范本。

    《六龙争霸》测评精讲这篇为例,从帧率(CPU性能)指标入手,分析了《六龙争霸》在渲染、内存、资源三大块的优化情况。

    细读了一下整篇报告,发现除了texture纹理类型这块没有找到数据来源,猜测是通过解析资源的assetbundle,其余数据均来自Unity Profiler的日志数据,经过统计和二次计算。恰好手上有profiler的数据,所以准备依样画葫芦来做一个类似的报告,看看自己项目的性能与UWA认可的标准的差距。

    本篇是第一篇,是对《<六龙争霸>测评精讲》的深入解读,整理一下各模块数据的来源,因此所有截图都来自此博客和网络,没有任何原创。

    当然,懒如我,第二篇是什么时候,还不知道。

    CPU性能

    报告中CPU性能数据包括4个:

    • 总帧数
    • CPU耗时均值
    • CPU耗时>33ms帧占比(FPS<30)
    • CPU耗时>50ms帧占比(FPS<20)
    《六龙争霸》CPU性能概览-三星S3(From Blog)

    不难看出,其实只要对每帧的CPU耗时进行不同维度的统计计算,即可得到上述信息。
    CPU耗时这个指标,使用过Unity Profiler的不会陌生,是Profiler界面的第一栏。点击选中某帧后,会在下面窗口显示该帧生成时各函数的耗时,如下图所示。

    Unity Profiler - CPU Profiler(From Unity Manual)

    列表右上角的CPU指标即为该帧生成时CPU耗时。

    渲染模块

    《六龙争霸》渲染性能-三星S3(From Blog)

    渲染模块的参数同样是4个:

    • max Drawcall
    • max Triangles
    • avarage 半透明渲染CPU耗时
    • avarage 不透明渲染CPU耗时

    折线图是每一帧的半透明和不透明渲染的CPU耗时,也就是计算后两个指标的具体数值。
    同样的,CPU耗时依然来自Profiler的CPU Usage部分。
    半透明渲染函数:Camera.Render/Drawing/Render.TransparentGeometry
    不透明渲染函数:Camera.Render/Drawing/Render.OpaqueGeometry

    DrawCalls和Triangles是渲染参数,来自Profiler的Rendering部分。

    RenderProfiler.png

    物理模块

    《六龙争霸》物理模块性能 - 三星S3 (From Blog)

    包括图中4个指标和文中提到的Rigidbodies,物理模块有5个指标

    • avarage 物理计算CPU耗时
    • max Number of Contacts
    • max Static Colliders
    • max Dynamic Colliders
    • Active Rigidbodies

    CPU耗时同样来自于CPU Usage
    函数名为:Physics2D.FixedUpdate/Physics2D.Callbacks/Physics2D.Simulate
    不过,这个需要确认,我们项目用不到物理模块,我没有找到博客图中所示的Physics.Simulate不代表没有此函数,所以先定位到这个Physics2D。
    剩余指标来自

    Unity Manual - Physics Profiler

    动画模块

    由于我所在项目无使用,所以简单提一下。
    CPU耗时同上,函数为:

    • Animators.Update
    • Animation.Update(这个也没有找到)
    • MeshSkinning.Update

    Animation Clips在Memory Profiler窗口中可以间接获得。图见下章

    内存模块

    Unity的内存分为两行数据,一行是Reserved, 一行是Used,如下图所示的Memory Profiler。

    Unity Manual - Memory Profiler

    Used和Reserved的差值则为用于该部分的空闲内存,这与Unity的内存管理机制有关。当我们需要评估应用所占内存大小的时候,需要用到Reseved的值;需要评估代码的内存管理时,数值则需要以Used为准。两者的差值代表着代码对内存管理的优劣,由于Unity不会将申请的内存还给系统,所以需要更为合理的内存管理机制来降低空闲内存的大小。

    《六龙争霸》内存模块性能分析 - 三星S3

    参考博客中的数值,可以看到需要关注的6个内存数值为

    • Reserved Total
    • Used Total
    • Reserved Unity
    • Used Unity
    • Reserved GFX
    • Reserved Mono

    空闲内存 =
    (Reserved Total - Used Total) - (Reserved Unity - Used Unity)

    资源模块

    报告中的资源模块包括四种类型的资源:

    • Textures 贴图
    • Meshes 网格
    • Animation Clips 动画
    • Audio Clips 声音

    其中共同的性能指标为

    • 数量峰值
    • 内存峰值

    这些都可以在Memory Profiler中获取到。

    GC调用

    Instantiate实例化这个没有找到,因此只对GC的部分做统计
    GC的数据同样在CPU Usage的表格部分。会通过如下类似的方式进行调用:

    BehaviourUpdate/BehaviourUpdate/----.Update()/GC.Collect|0 B|0.97|0.97

    意味着在该帧调用了GC,引起GC调用的是BehaviourUpdate/BehaviourUpdate/----.Update()函数,该次GC耗时为0.97ms

    粒子系统

    CPU耗时,同样在CPU Usage的表格部分。
    函数为:ParticleSystem.Update

    参考资源

    1. 《六龙争霸》测评精讲
    2. Unity Manual - Profiler
    3. Optimizing Graphics Performance

    相关文章

      网友评论

          本文标题:UWA性能报告精读

          本文链接:https://www.haomeiwen.com/subject/mglovxtx.html