Lua tracy 使用文档
Tracy 是什么
Tracy 是个通用性能分析工具,项目地址为:wolfpld/tracy: Frame profiler (github.com)
它会以火焰图的形式展示出 Lua 代码的耗时,方便你定位性能热点、优化代码
启动方式
在下面 2 种方式中选择一种即可
使用《Y3 开发助手》启动(推荐):
- 在 VSCode 中安装《Y3 开发助手》
- 切换到《Y3 开发助手》面板,勾选“启用 Tracy”后使用助手启动游戏
- 或者先启动游戏后点击《自定义视图》中的“启动 Tracy”按钮
手动启动:
-
启动游戏,然后在游戏中执行 Lua 代码
enable_lua_profile(true)
(请在游戏初始化事件或计时器等待 1 帧后再执行,直接在加载 Lua 的过程中执行可能会导致游戏闪退) -
找到 Tracy 工具,路径在编辑器安装目录下 game\Package\ExternalResource ,如果找不到需要在在编辑器安装目录下 game\LocalData\Patch\ExternalResource\tracy 中去找
-
确保 “Client address” 里填的是 “127.0.0.1”,然后点击 “Connect”
如何分析卡顿
顶部的柱条是每帧花费的时间,花费的事件越长柱条就越长。上图红色的毛刺表示这帧发生了卡顿,我们来对他进行进一步分析。
我们点击一下这个毛刺,视图便会定在这帧附近。使用鼠标滚轮可以缩放选择范围,要注意的是缩放时会以保持你鼠标位置为中心进行缩放。按住鼠标右键可拖动视图。
这里会以火焰图的形式展示 Lua 函数的调用关系以及耗时占比。然后再点开 is_prime
可以看到详细信息
展开 Zone trace
即可看到详细的调用堆栈与调用位置,我们可以看到耗时发生在 test.lua
的 212 行,是个叫做 is_prime
的函数
找到对应的代码,发现果然有问题,把红框处的 num
改为 math.sqrt(num)
后游戏不再卡顿。
然后我们点击上方的 Find zone
按钮,输入刚刚的函数名 is_prime
后回车,便可看到下方的界面
这张图上我们可以看到此函数一共执行了 231 次,总耗时 11.05 毫秒,平均耗时 47.84 微秒。
根据下方的火焰图可以得知,最快的时候只要 1.46 微秒,但最慢的时候要 112.31 微秒。整个图形分布符合试除法的特性。