-
CPU使用情况分析器
CPU使用情况分析器显示您在游戏中花费的时间。选中时,下窗格显示所选帧的分层时间数据。查看Profiler Window
的文档,了解更多关于探查器时间线的信息。
- Hierarchy mode:显示分层结构的时间数据。
- Group Hierarchy mode:时间数据分组为逻辑组(如渲染,物理,脚本)。因为任何Group的子项也可能处于不同的小组(例如,某些脚本也可能称为渲染功能),所以Group时间百分比通常加起来超过100%。
上下拖动图表标签以重新排列CPU图表的堆叠方式。
选择个别项目
在下窗格中选择某个项目时,其对CPU图表的贡献将高亮显示(其余灰显)。再次点击一个项目取消选择它。
Render.OpaqueGeometry选中并在图表中突出显示其贡献。
在分层时间数据中,Self是指在特定函数中花费的时间,不包括调用子函数所花费的时间。在上面的截图中,41.1%的时间花在Camera.Render函数中。这个函数做很多工作,调用各种绘图和裁剪函数。排除所有这些功能,只有2.1%的时间花在Camera.Render函数本身上。
Time ms和Self ms列显示相同的信息,但以毫秒为单位。Camera.Render以0.01ms但是,包括所有的函数调用,0.21ms消耗。该GC Alloc显示多少内存被分配在当前帧,稍后由垃圾收集器收集。保持这个值在零防止垃圾回收器使您的帧率波动。
CPU Profiler 的Others部分记录了所有不属于渲染、脚本、物理,垃圾收集或垂直同步。这包括动画、AI、音频、颗粒、网络、加载和PlayerLoop。
物理标记(Physics markers)
下面的描述简要说明了各个高级物理分析器标记的含义。
- Physics.Simulate:所谓从FixedUpdate。这个更新的物理状况来指导物理引擎(PhysX)运行仿真。
- Physics.Processing:所谓从FixedUpdate。这是所有非布料物理作业处理的地方。扩展此标记显示了物理引擎内部正在进行的工作的低级细节。
- Physics.ProcessingCloth: 所谓从FixedUpdate。这是所有布料物理作业处理的地方。扩展这个标记将显示物理引擎内部正在进行的低层次细节。
- Physics.FetchResults:所谓从FixedUpdate。这就是物理模拟结果从物理引擎中收集到的地方。
- Physics.UpdateBodies:所谓从FixedUpdate。这是所有物理体的位置和旋转更新以及发送这些更新信息的地方。
- Physics.ProcessReports:所谓从FixedUpdate。这一阶段是运行一次物理FixedUpdate已得出结论,并在所有响应仿真结果的各个阶段的处理。接触,接头断裂和触发更新和信息在这里。有四个不同的子阶段:
- Physics.TriggerEnterExits:所谓从FixedUpdate。这就是OnTriggerEnter和ontriggerexit事件处理。
- Physics.TriggerStays:所谓从FixedUpdate。这是ontriggerstay事件处理。
- Physics.Contacts:所谓从FixedUpdate。这就是OnCollisionEnter,oncollisionexit和oncollisionstay事件处理。
- Physics.JointBreaks:所谓从FixedUpdate。这就是与关节断开有关的更新和信息。
- Physics.UpdateCloth:从更新调用。这是关于布料及其蒙皮网格的更新。
- Physics.Interpolation:从更新调用。这个阶段涉及所有物理对象的位置和旋转的插值。
性能警告
CPU Profiler能够检测并警告您一些常见的性能问题。在查看CPU使用时,出现在下面窗格的警告栏中。
Profiler警告指示静态碰撞已被移动
Profiler可以检测到的具体问题是:
- Static Collider.Modify(昂贵的延迟成本)
- Static Collider.Move(昂贵的延迟成本)
- Static Collider.Create(昂贵的延迟成本)
- Animation.DestroyAnimationClip [触发器RebuildInternalState]
- Animation.AddClip [触发器RebuildInternalState]
- Animation.RemoveClip [触发器RebuildInternalState]
- Animation.Clone [触发RebuildInternalState]
- Animation.Deactivate [触发器RebuildInternalState]
在上面的截图中,Profiler显示了Static Collider.Move警告。该**Warning **栏表明,该警告已在当前帧被触发12次。术语“延迟成本”意味着,尽管事件Profiler中的条目可能表现出较低的成本(在这种情况下为0.00ms),但是该操作稍后可能触发更多的系统要求操作。
CPU Profiler Timeline
内存记录:本机内存性能分析
本机内存性能分析允许您在Unity本机内存管理系统中剖析活动,并评估它如何影响运行时性能。在Unity内存管理中搜索不需要的或资源密集型的分配模式时,这可能很有用。
要分析Unity的本机内存管理,您需要记录它。要访问本机内存录制模式(在Unity中称为Mem Record),请转到Window > Profiler打开Profiler窗口。选择CPU Usage Profiler(如果不可见,请单击AddProfiler > CPU),然后选择Profiler下的下拉菜单。接下来,点击Timeline,然后选择Mem Record。
选项 | 功能 | 对性能的影响 |
---|---|---|
None | 模式禁用。这是默认选择。 | N/A |
Sample only | 录内存分配,重新分配,解除分配,活动类型和系统。 | Low |
Callstack (fast) | 与“ Sample only”具有相同的功能,但是也会记录从原始分配站点到callstack从本地符号转换为脚本符号的缩短调用堆栈。实际上,你只能看到最深的脚本符号的调用堆栈。 | Medium |
Callstack (full) | 这与“ Sample only”具有相同的功能,但还会记录完整的脚本到本机和本机到脚本的转换。 | High |
注意:当活动的Profiler仅连接到独立播放器时,仅支持低影响的仅限样本模式。
记录的内存分配样本以鲜红色显示在Profiler窗口中。
点击记录旁边的高细节按钮启用高细节模式。选择一个样本来显示分配类型和系统。如果为选定的分配样本记录了callstack,则关联的callstack符号也将被解析并显示:
使用Mem记录
有一些情况下,其中的纪念品记录功能非常有用。例如:
- 学习一个系统正在做很多小的分配而不是几个大的分配。
- 学习什么时候一个工作线程意外地分配内存(例如通过意外的MemLabel使用)。
- 发现锁定争用(当多个线程同时尝试访问本机内存系统时)。
- 查找内存碎片来源(对于低内存设备尤其重要)。
时间线的高细节视图
CPU使用情况分析器时间轴的高细节视图至少每个由Unity的CPU使用情况分析器记录的样本都给出一个宽度的像素。
这使您可以查看框架中所有活动的完整概览,包括线程同步或内存分配等短暂活动。
要启用“ 高细节”视图,请转到“ 窗口” >“ 分析器”以打开“分析器”窗口。选择CPU Usage Profiler(如果不可见,请单击添加Profiler > CPU),然后选择Profiler下的下拉菜单,然后单击时间轴,然后选择高细节。
对照
以下两张图显示了CPU使用情况分析器时间轴的高细节视图和普通视图之间的区别。
高细节视图
普通视图
作者:su9257_海澜
链接:https://www.jianshu.com/p/698e31a0a1fb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。