UWA性能报告精读

仿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性能报告精读)