ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

15分钟跑通Tracy Profiler:用纳秒级时间线揪出卡顿元凶

15分钟跑通Tracy Profiler:用纳秒级时间线揪出卡顿元凶 15分钟跑通Tracy Profiler用纳秒级时间线揪出卡顿元凶【免费下载链接】tracyFrame profiler项目地址: https://gitcode.com/GitHub_Trending/tr/tracy帧率曲线突然掉了一个尖刺你翻遍日志找不到是哪段逻辑吃掉了2毫秒。 打日志排查更慢等你抓到现场异常早没了。 Tracy Profiler帧分析器是一款实时、纳秒精度的混合帧采样分析工具。它作为独立进程运行在你玩游戏时逐线程记录每个周期在干什么接上时间线视图后卡顿就变成了可以缩放的色块。一句话定位实时应用的示波器Tracy之于实时应用性能就像示波器之于电路程序不需要知道自己正被观察波形自顾自地流过去。它的本质由三点构成客户端-服务器架构客户端库嵌进你的程序服务器是独立的图形界面。两者走网络通信同一局域网里的手机、嵌入式设备也能接上分析。帧采样混合手动标记区域Zone带精确时间戳的代码段拿到微秒级边界不想改代码时调用栈采样sampling定期抓取线程正在执行的函数链会告诉你线程此刻在哪。极低开销单个事件纳秒级开着分析器跑程序行为几乎不变。三行CMake接入最小示例先拿到源码git clone https://gitcode.com/GitHub_Trending/tr/tracy。然后在项目的 CMakeLists.txt 里加三行add_subdirectory(tracy) target_compile_definitions(mygame PRIVATE TRACY_ENABLE) target_link_libraries(mygame Tracy::TracyClient)客户端真正编译的源文件只有public/TracyClient.cpp一个TRACY_ENABLE 是总开关不定义它时所有宏都会被剔除。再在游戏主循环末尾放一个帧标记#include tracy/Tracy.hpp while (running) { Update(); Render(); FrameMark; // 一帧的结束标记 }编译前先构建 Tracy 仓库本身产出服务器 GUIcmake -B build -DCMAKE_BUILD_TYPERelease cmake --build build产出的可执行文件就是服务器。现在先启动它再启动你的游戏记得用开了 TRACY_ENABLE 的构建。服务器会通过局域网广播自动发现客户端主界面右上方出现连接时间线上会开始流动绿色帧块——每一块就是一帧宽度即帧时长。追一个3ms到12ms的尖刺缩放到全局视角能看到一条平时稳定在3ms的线程某一帧突然拉到12ms上方帧统计条同步变红。从哪下手在可疑函数里放 ZoneScoped。它是 RAII 宏函数入口开区域、出口自动关不用手动配对void ProcessPhysics(float dt) { ZoneScoped; // 自动命名为 ProcessPhysics // 物理计算 }重新跑一遍时间线上那个12ms的块就被细分成了函数色块。往下钻的时候区域也可以起自定义名字并高亮void CheckCollision(Entity a, Entity b) { ZoneScopedN(CollisionTest); // 自定义名称 ZoneColor(0xff40ff); // 品红色高亮 }接下来打开统计视图Statistics按总耗时排序会发现12ms里有9ms在 CollisionTest 内部双击该区域放大单击函数名就会带出源码。源码视图提供逐行耗时占比旁边并排是反汇编disassembly机器码的汇编表示方便对照热点指令这里的根因是碰撞的宽相粗筛检查每帧遍历整个实体列表而那帧实体数恰好到峰值。改成隔帧执行尖刺消失。想留下修复前后的证据可以用 Compare 视图叠加两次抓取的统计差异。顺带一提采样视图默认开启Linux 上以10kHz频率抓调用栈可用 TRACY_SAMPLING_HZ 调整。它补上了手动标记覆盖不到的代码比如系统库内部。避坑指南新手最容易踩的四个坑连上了但时间线一片空白。根因编译时没定义 TRACY_ENABLE宏全部被剔除。 解法单独建一个开 profiling 的构建配置再编译配置细节见官方手册。分析出的耗时比线上大一倍。根因你分析的是 Debug 构建未优化代码和断言检查完全改变了程序行为。 解法永远用 Release优化配置做分析并开启 -marchnative 这类本机指令集选项。时间线有段空白不知道线程在干什么。根因那段代码没有 Zone 标记且采样没开。 解法确认 TRACY_NO_SAMPLING 没有被启用采样默认是开的。链接报错符号后面带一串奇怪后缀。根因Tracy 把构建选项编码进符号名做链接期自检客户端库和应用程序的选项不一致。 解法两边用同一套 TRACY_* 选项编译。接下来可以探索的方向GPU 时间线接上后服务器会为 GPU 单开一行按图形 API 各自有头文件如public/tracy/下的 TracyVulkan.hpp、TracyOpenGL.hpp提交命令队列后时间线上会出现对应的色块。零改动分析动不了源码时纯靠采样也能先看清线程去向再决定在哪里补标记。Python 与数据导出python/tracy_client/下有 Python 绑定统计表格可用csvexport/里的工具导出 CSV进电子表格继续分析。完整示例examples/ToyPathTracer 展示了渲染器里完整的埋位方式配合官方手册逐章对照。Tracy 最容易被低估的恰恰是采样一行标记代码都不写它也会周期性拍下每个线程的调用栈快照告诉你程序那一刻正在执行什么——分析器不等程序配合自己就会开始工作。【免费下载链接】tracyFrame profiler项目地址: https://gitcode.com/GitHub_Trending/tr/tracy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表