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微秒。整个图形分布符合试除法的特性。