返回介绍

使用内置分析器测定性能

发布于 2021-06-19 18:03:25 字数 4428 浏览 994 评论 0 收藏 0

Unity iOS 和 Android 都带有内置分析器。它包含在附加元件的所有版本中,而专业版独有的功能。(但专业版附加元件确实配有更加高级的分析器。)内置分析器从设备上正在运行的游戏中发出控制台消息。这些信息每 30 秒写入一次,让您深入了解提供 游戏运行方式。理解这些信息的含义并非易事,但它们至少可以让您快速确定游戏是 CPU 还是 GPU 绑定,或者如果是 CPU 绑定,那么是 CPU 脚本代码还是降低运行速度的 Mono 垃圾集合。您可以在本页稍后了解如何配置内置的分析器。

分析器能告诉您什么

下面是一个内置分析器输出的实例。

iPhone/iPad Unity internal profiler stats:
cpu-player>    min:  9.8   max: 24.0   avg: 16.3
cpu-ogles-drv> min:  1.8   max:  8.2   avg:  4.3
cpu-waits-gpu> min:  0.8   max:  1.2   avg:  0.9
cpu-present>   min:  1.2   max:  3.9   avg:  1.6
frametime>     min: 31.9   max: 37.8   avg: 34.1
draw-call #>   min:   4    max:   9    avg:   6     | batched:    10
tris #>        min:  3590  max:  4561  avg:  3871   | batched:  3572
verts #>       min:  1940  max:  2487  avg:  2104   | batched:  1900
player-detail> physx:  1.2 animation:  1.2 culling:  0.5 skinning:  0.0 batching:  0.2 render: 12.0 fixed-update-count: 1 .. 2
mono-scripts>  update:  0.5   fixedUpdate:  0.0 coroutines:  0.0 
mono-memory>   used heap: 233472 allocated heap: 548864  max number of collections: 1 collection total duration:  5.7

所有时间都是以毫秒/帧为单位。您可以查看最后 30 帧内的最小、最大和平均时间。

General CPU Activity

cpu-player显示游戏 Unity 引擎内部执行代码以及在 CPU 执行脚本所花费的时间。
cpu-ogles-drv显示在 CPU 上执行 OpenGL ES 驱动程序代码所花费的时间。很多因素都可以影响驱动程序统计,如绘制调用的数目、内部渲染状态的数目变化、渲染管线的设置,甚至是处理顶点的数目。
cpu-waits-gpu显示等待 GPU 完成渲染期间,CPU 的闲置时间。如果这个数字超过 2-3 毫秒,就最有可能说明应用程序是填充率/GPU 处理绑定。如果这个值太小,配置文件将跳过显示此值。
msaa-resolve应用抗锯齿所需时间。
cpu-present在 OpenGL ES 中执行 presentRenderbuffer 命令花费的时间量。
frametime代表游戏帧花费的总时间。请注意,iOS 硬件始终锁定为 60Hz 刷新率,所以您总会得到 ~16.7ms (1000ms/60Hz = ~16.7ms) 的倍数时间。

渲染统计

draw-call #每帧绘制调用的数量。尽可能保持低值。
tris #用于渲染的三角形总数。
verts #用于渲染的顶点总数。如果仅使用静态几何体,建议将这一数值保持在 10000 以下。但如果使用大量蒙皮几何体,则应保持更低的值。
batched引擎自动批处理的绘制调用、三角形和顶点数量。将这些数字与绘制调用和三角形总数对比,您将了解场景准备批处理的好坏程度。在对象中分享尽可能多的材质,以提高批处理。

详细的 Unity 播放器统计信息

播放器详情 (player-detail) 部分提供 引擎内部运行的详细分解:-

physx物理花费的时间。
animation骨骼动画花费的时间。
culling摄像机视景外剔除对象花费的时间。
skinning应用动画至蒙皮网格花费的时间。
batching批处理几何体花费的时间。批处理动态几何体比静态几何体成本要更加昂贵。
render渲染可见对象花费的时间。
fixed-update-count此帧中执行的 FixedUpdates 的最小和最大数量。过多的 FixedUpdates 将严重影响性能。此处提供 了一些简单的指引,帮助您设置较好的固定时间增量值。

详细的脚本统计信息

mono-scripts 部分提供 了 Mono 运行时执行代码所花费时间的详细分解:

update在脚本中执行全部 Update() 函数花费的时间。
fixedUpdate在脚本中执行全部 FixedUpdate() 函数花费的时间。
coroutines脚本协同程序内部花费的时间。

脚本分配的内存的详细统计信息

mono-memory 部分向您介绍了 Mono 垃圾回收器如何管理内存:

allocated heap可供分配的内存总量。如果给定的分配堆中内存不足,将触发垃圾回收。如果在回收之后,内存依然不够,那么分配堆的容量将扩展。
used heap当前对象用完的分配堆中的部分。每次创建新的类实例(不是结构体),这个数字都将增长,直到下一次垃圾回收。
max number of collections最后 30 帧垃圾回收通过的数量。
collection total duration最后 30 帧,所有垃圾回收通过的总时间(毫秒)。

配置

iOS

iOS 默认禁用分析器。如需启动,必须打开 Unity 生成的 XCode 工程。选择 iPhone_Profiler.h 文件并将

#define ENABLE_INTERNAL_PROFILER 0

一行更改为

#define ENABLE_INTERNAL_PROFILER 1

在 XCode 菜单栏中选择查看 (View) > 调试区 (Debug Area) > 激活控制台 (Activate Console),显示输出的控制台 (GDB),然后运行您的工程。Unity 将每 30 帧向控制台窗口输出统计信息。

Android

Android 默认启用分析器。只需在构建时勾选播放器设置中的开发构建 (Development Build),启动设备时,统计资料将显示在 logcat 中。如需查看 logcat,您需要 adb 或 Android Debug Bridge。若符合条件,运行 shell 命令adb logcat 即可。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文