GOT Online|解密游戏性能优化秘籍

这篇具有很好参考价值的文章主要介绍了GOT Online|解密游戏性能优化秘籍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着UWA GOT Online功能的不断迭代,GOT Online为解决各种游戏性能问题(如内存占用、CPU耗时、GPU耗时和卡顿)提供了丰富的高效、准确且便捷的数据获取方式和分析建议。本文总结了GOT Online(SDK 2.4.7版本)中的关键优化要点,涵盖了数据获取、数据分析和性能优化等方面。不论你是哪个段位的工程师,这篇文章都是一本值得仔细研读的宝典。

阅读引导

  1. 卡顿优化 
  2. GPU优化 
  3. 内存优化
  4. Lua性能优化
  5. 能耗优化
  6. 更多提升使用体验的优化项

卡 顿 优 化

卡顿分析
在卡顿点分析功能下,UWA在每帧耗时曲线中列举出了运行过程中的所有卡顿帧。选中任意卡顿点,即可在查看这一帧的详细数据。除了耗时、占比、调用次数外,在Timeline中还可以清晰地看到主线程和子线程的进程情况,便于开发者对这些异常节点的耗时情况进行详细分析。

在重点函数分析页签下,UWA对测试过程中容易发生卡顿的重点函数进行了分类和整合,开发者可以更高效地排查项目中的卡顿情况,定位卡顿原因。

>> 如何快速定位你的卡顿

>> 卡顿分析界面:重点函数分析和卡顿点分析

>> GPU Counter、Timeline功能

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

资源管理
在资源管理模块下,UWA列出了各个资源的加载耗时、频率情况,开发者可以准确定位到是哪个资源造成的耗时瓶颈,查看到每个资源的加载/卸载、每个GameObject的实例化/激活等具体耗时情况。

>> GOT Online Resource模式下的资源管理模块

在Resource模式下,或在Overview模式开启Resource模式时,勾选资源管理模块,即可在资源管理模块查看到AssetBundle加载&卸载、资源加载&卸载、资源实例化&激活的四大模块。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

在资源管理汇总界面,UWA将需要注意的加载耗时、频率TOP 10的问题资源直接列出,通过对这些重点对象快速处理,能在短时间内达到立竿见影的优化效果。同时,也可以重点分析不同加载接口的使用情况,比如在“资源加载&卸载”界面,用户可以看到被加载的资源属于哪个AssetBundle,用了哪个接口以及加载的耗时、次数等。


GPU 优化

SoC信息
在SoC GPU信息模块下,开发者可以从更宏观的角度对设备的GPU运行情况进行监控,在观察GPU运行状态、判断是否存在GPU降频情况的同时,也可以快速定位GPU压力较大的场景,更有针对性地进一步分析这些场景的性能压力来源。

>> GPU篇:SoC GPU信息、GPU Counter性能指标

GPU Counter
经过对GPU Counter功能不断的完善和迭代,GPU Counter模块已经支持Mali、Adreno、PowerVR三个品牌芯片的设备,包括九个重要GPU参数模块。开发者可以通过GPU耗时、GPU活动来定位项目哪些场景的性能瓶颈来自GPU,并通过GPU着色、带宽、图元这些详尽的参数,更高效便捷地定位GPU压力来源、制定性能标准。

>> GPU Counter、Timeline功能

>> Mali GPU Counter模块新增GPU图元处理和GPU Shader Cycle

>> GPU Counter支持Adreno、PowerVR芯片

>> SoC GPU信息、GPU Counter性能指标


内 存 优 化

PSS显存 & 内存占用 & 资源内存
在运行信息页下的PSS内存模块中,开发者可以查看测试过程中的PSS显存数据,结合资源内存数据,对项目的闪退风险进行管控。

在内存占用页,开发者可以快速总览项目中纹理、网格、动画、音频等各类资源的内存占用情况和趋势、了解项目的内存分布,以及细分定位到哪些资源存在问题,大幅节省逐个资源排查的时间。

在资源内存页,UWA会根据测试时是否开启Resource模式、是否手动dump等情况,不同程度地展示资源的具体信息。在这个页面下,开发者可以在采集Overview模式数据的同时,也能获取到和Resource模式一样全面的资源数据。

>> PSS显存、内存占用、堆内存对象快照

>> 内存篇:PSS显存、内存占用、堆内存对象快照

>> GOT Online支持多模式采集、Mono分析支持IL2CPP打包

当测试中未开启Resource模式时,资源统计模块会统计主要场景(测试起始帧、每千帧、场景切换帧和结束帧等)中纹理、网格、Shader、字体、RenderTexture、粒子系统等主流资源的数量和大小;而当开启Resource模式后,则会对上述资源的使用详情做更详细的采集。

以纹理资源为例,开启Resource模式后,可以在报告中获取纹理资源的内存占用、数量峰值、宽度、高度、生命周期和是否开启了R/W等属性,以便开发者对纹理的使用情况做更详细地排查。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

当在Overview模式下发现Mono存在问题时,就可以使用Mono模式,对Mono的分配和驻留情况进行具体分析。

多线程统计Mono分配
Mono模式除了主线程外,也可以获取到子线程的堆内存分配情况。使用Mono模式,开发者可以更全面地对项目的Mono分配和驻留进行分析,也能够更放心地使用子线程来分担主线程的性能压力。

>> 多线程统计

Mono倒序调用分析
在堆内存具体分配模块下,可以使用倒序调用分析功能对Mono分配情况进行查看。开发者可以通过这个功能,更便捷地定位到分配Mono堆内存的深层子函数,定位内存问题的瓶颈。

>> Mono堆内存倒序调用分析

驻留堆内存分配函数
在堆内存泄漏分析下,即可查看驻留堆内存分配前10位的函数。通过对两次采样间的内存变化比较,开发者可以快速地捕捉具体的泄露函数、泄露的具体内存和变量数据。

>> GOT Online新版本中暗藏的小心机

堆内存对象快照
通过堆内存对象快照,开发者可以对场景中的堆内存对象情况进行详细采样。在对场景中的Mono驻留问题有一个直观了解的同时,高效锁定Mono堆内存瓶颈,并着手优化。

>> 堆内存对象快照

“堆内存泄漏分析”中的“驻留堆内存分配函数”以及“堆内存对象快照”页,方便开发者对运行时的堆内存对象驻留情况进行详细地分析。

在测试时,根据测试开始前设置的Dump规则,在每固定间隔帧或手动Dump时,UWA会对堆内存对象进行数据采集。

开发者可以在“堆内存对象快照”页中的堆内存对象柱状图表中,从“堆内存对象大小”和“堆内存对象个数”两个维度,快速定位到哪些场景中存在需要优化的堆内存驻留问题。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

堆内存对象分为Managed Object和内存碎片两部分,其中内存碎片中包含了“空闲激活内存”和“空闲碎片内存”。进行堆内存分配时,会优先使用“空闲激活内存”中可用的内存块,其次才会从“空闲碎片内存”中查找可用的内存块。

在柱状图下方,会显示选中帧所有类型的Managed Object大小、对象类型总数、对象类型个数、内存碎片占比。右侧饼状图会展示前10位和其他类型的对象和的占比,以便开发者对这一帧的堆内存对象情况有一个更直观的了解的同时,快速锁定Mono堆内存瓶颈。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

同时,在饼图下方的对象类型表中,也将展示出这一帧所有对象的类型、大小、占比、对象个数等信息。在展开对象类型后,开发者就可以快速定位到调用此对象类型的所有函数和选中函数的倒序调用路径。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

通过这张表格,可以更精确地定位堆内存分配的出处,并通过在代码中搜索对应的子函数,更高效地对其堆内存分配进行优化。


Lua 性 能 优 化

Lua性能分析
在Lua报告中,开发者可以看到测试时总体堆内存、堆内存具体分配和Mono对象引用的数据,开发者可以在此页签中对项目的Lua内存的分配和占用情况进行分析。

>> Lua,是时候和你走走心了!

>> UWA支持Lua CPU耗时分析

Lua倒序调用分析
Lua报告支持倒序调用分析,在倒序调用分析页下,开发者可以直接定位到最底层的Lua堆栈,一眼挑出耗时最大、分配最多的始作俑者,高效地解决问题。

>> GOT Online新版本中暗藏的小心机

在倒序模式下,某结点展开后的直接函数列表为对该结点函数有所调用、并产生堆内存的父函数,因此可以直接定位到最底层的原因,再也不用为深不见底的堆栈而无脑“点点点”了。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

Mono 对象引用
在Mono对象引用模块下,开发者可以直观地查看Mono端已经被Destroy但Lua端却依然被索引的变量的对象的数量和走势,并通过对比模式将采样点做比较,更便捷地定位C#层的内存泄漏问题。

>> Lua代码优化

在任意一种Lua插件中,都存在类似的机制:在C#层维护一个Cache来引用那些被Lua访问过的C#层对象,防止出现以下的问题:当Lua中再次访问该C#对象时,该对象可能已经被C#层的GC回收掉了,从而导致逻辑错误。所以,在Lua中始终保留某个C#层对象的引用,将会导致其无法被释放,当这样的引用越来越多,就会导致C#层的内存泄漏。

为了便于用户排查这种情况,我们在Mono对象引用的报告页面中对上述的Cache中C#层对象进行了汇总,统计了Cache中出现的对象类型和各个类型的对象总数。当该对象继承自UnityEngine.Object时,还将统计该类型中已经被Destroy的对象数量,如下图所示:

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

所以,对于判断Lua引用导致Mono泄露的一个简单的方法就是查看Destroyed总数是否为零。因为它表示的是Mono端已经被Destroy但Lua端却依然被索引的变量总数,理论上应该是趋向于0的。如果它持续很高,甚至还有不断走高的趋势,那么很大概率是泄露了,如下图所示:

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

对于某些数量持续上涨的对象类型,包括Destroy数量和走势等,还可以在图表下通过对比两个不同采样点的对象引用,从而进一步定位Lua中不合理的引用,分析增量的合理性。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

补充说明:关于排查泄露的需求,建议长时间测试,毕竟泄露问题一旦发生,聚沙成塔就很快了。


能 耗 优 化

功率
在耗电量页,可以查看测试过程中的功率数据。便于开发者通过观察测试过程中设备的功率和电流情况,对项目的功耗情况进行分析。

>> GPU Counter功能支持Adreno、PowerVR芯片

温度变化量
在温度变化量页,UWA支持CPU温度、GPU温度和电池温度数据,开发者可以通过这些硬件的温度情况,定位设备发热原因。

>> Mali GPU Counter模块新增GPU图元处理和GPU Shader Cycles

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA


更 多 提 升 使 用 体 验 的 优 化 项

自定义参数
使用UWA自定义参数截取需要分析的代码,即可在自定义参数下的自定义代码段和自定义变量页对代码进行检测和跟踪后。通过这个功能,开发者可以更灵活地定位代码瓶颈和反馈代码问题。

>> 支持自定义变量和代码段检测

函数释义Tips
在Overview报告的各个模块的函数堆栈下,UWA结合结合丰富的优化经验,UWA对优化过程中的常见函数进行了标注。有了这些贴心的Tips,开发者就可以快速归因并给出整改方法,让优化的效率更上一层。

>> 对比分析、Batches数量、函数释义Tips

在Overview报告的各个模块的函数堆栈下,新增了函数释义的Tips。结合丰富的优化经验,UWA对优化过程中的常见函数进行了标注。将鼠标移动到函数名右侧的“ ! ”上,即可查看函数的释义、耗时来源、优化方式等信息。

GOT Online|解密游戏性能优化秘籍,充电一刻| UWA优化日,游戏开发,游戏性能优化,UWA

对比分析
通过报告右侧的快捷入口,即可对Overview报告中不同的场景进行全面地对比分析。开发者可以在快速定位问题的同时,便捷且充分地在团队内部搭建起监控流程,定期对项目的性能情况进行数据汇总,形成更高效便捷的性能数据监控闭环。

>> 对比分析、Batches数量、函数释义Tips

场景分割
通过使用场景概览-场景管理下的场景分割的功能,开发者即可针对不同场景、UI 界面等模块,更精细化地统计具体场景的耗时情况,进一步为数据分析带来便利。

>> 支持资源加载分析、场景分割

可通过在“场景概率-场景管理”中点击“新增场景分割线”按钮,输入分割的位置和场景名,即可在页面上看到最新的数据分析。


更多UWA GOT Online使用技巧等待你的探索,也欢迎大家提出建议和需求!免费试用可以前往www.uwa4d.com,注册用户即可获得15天的试用权益!文章来源地址https://www.toymoban.com/news/detail-601719.html

到了这里,关于GOT Online|解密游戏性能优化秘籍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 游戏性能优化

    Unity性能优化主要包括以下方面: 1 .渲染性能 。包括减少Draw Calls、减少三角面数、使用LOD、使用批处理技术、减少实时光源等,以提高游戏的帧率和渲染效率。 2. 内存性能 。包括使用对象池、使用合适的纹理、使用异步加载资源等,以减少内存占用和提高游戏的流畅度。

    2024年02月09日
    浏览(36)
  • 游戏中UI的性能优化手段

    UI方面有许多性能优化的技术或手段,以下是其中一些常见的例子: 惰性加载:对于长列表、大图等需要加载大量数据和资源的组件,可以采用惰性加载的方式,即在用户需要时再进行加载。这样可以减少初始加载时间和内存占用,提高页面响应速度和用户体验。 虚拟滚动:

    2024年02月05日
    浏览(34)
  • Unity游戏开发客户端面经——性能优化(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 性能优化 常问问题总结,有帮助的可以收藏。 性能优化,主要聚焦在 内存、 CPU、GPU 三大方向上。 1.1 详细介绍    Unity内存占用组成 Unity(基本

    2024年03月22日
    浏览(57)
  • Android性能优化之游戏引擎初始化ANR

    近期,着手对bugly上的anr 处理,记录下优化的方向。 借用网上的一张图: 这里的anr 问题是属于主线程的call 耗时操作。需要使用trace 来获取发生anr前一些列的耗时方法调用时间,再次梳理业务,才可能解决。 问题1 java 调用栈: 从调用栈中发现onActivityResult()执行对游戏侧的

    2024年02月15日
    浏览(48)
  • 游戏性能优化指南:如何最大程度提升Unity游戏的帧率和流畅度

    FPS (Frames per Second):显示当前游戏帧率。帧率越高,游戏画面越流畅。为提高帧率,可减少游戏对象数量、优化渲染方式等。 Draw Calls :显示当前帧需要渲染的次数。过多的Draw Calls会导致游戏运行缓慢。降低此指标可通过优化场景、材质或使用批处理技术等方式。 Tris :显

    2024年02月06日
    浏览(80)
  • Android性能优化之修复游戏中内存泄漏(java层)

    游戏在bugly上内存OOM越来越严重,因此,近期对内存进行优化。从java层的内存进行优化开始,通过LeakCannary或者adb shell 获取到内存快照,发现好几处内存泄漏点。 1.单例类持有Activity : 查看内存快照,该闪屏页面Activity(包含引用对象)可回收3.8M的内存; LeakCannary的内存分析也

    2024年02月15日
    浏览(60)
  • Cocos 微信小游戏内存与性能优化指南(iOS端)

    前言 由于微信小游戏普通模式是基于 C++ 渲染层与 JS 编译引擎在原生平台模拟 HTMLCanvas 渲染能力的方案,其中 JS 代码的编译执行效率会极大影响游戏运行的性能。通常 JS 引擎都提供了 JIT 能力用于提高编译速度,这使得小游戏能够在 Android 端取得优异的性能。但是在 IOS 端由

    2024年02月08日
    浏览(39)
  • 顶级工程师教你移动端游戏性能优化!Unity官方教程!

    ** 本期将给大家介绍如何提高资源、项目配置和图形的性能。所有教程均来自Unity官方,感兴趣的朋友可以去Unity官网查看完整教学内容。 降低或禁用 Accelerometer Frequency(加速度计频率) Unity每秒钟是会以一定次数统计移动设备的加速度计状态的。如果我们的程序不会用到加

    2024年02月20日
    浏览(49)
  • Twitter优化秘籍:置顶、列表、受众增长

    在 Twitter 上,将你的一条推送文置顶到个人数据顶部是提高可见性和吸引关注者的绝佳方式。无论你是个人用户还是企业,此功能都可以让你的重要信息常驻在众人眼前,即使你发布了新的推文。接下来,我们将分享一些优化建议,帮助你合理地使用此功能。 1、置顶要点:

    2024年02月07日
    浏览(43)
  • NumPy 秘籍中文第二版:七、性能分析和调试

    原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍以下秘籍: 使用 timeit 进行性能分析 使用 IPython 进行分析 安装 line_profiler 使用 line_profiler 分析代码 具有 cProfile 扩展名的性能分析代码 使用 IPython 进行调试 使用 PuDB 进行调试 调试是从软件

    2023年04月17日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包