Tracy 是一款实时、纳秒级分辨率的混合帧和采样剖析器,可用于远程或嵌入式遥测游戏和其他应用程序。它可以对 CPU(C、C++11、Lua)、GPU(OpenGL、Vulkan、Direct3D 11/12、OpenCL)和内存进行剖析。它还能监控线程所持有的锁,并显示竞争发生的位置。Tracy 可以像其他统计分析工具(如 VTune、perf 或 Very Sleepy)一样,对取样的调用堆栈数据进行统计分析,但它主要侧重于对源代码进行手动标记,以便逐帧检查程序的执行情况。你将能清楚地看到哪些函数被调用,在这些函数中花费了多少时间,以及它们在多线程环境中是如何相互影响的。相比之下,统计分析可能会让你看到代码中的hot spots,但却无法准确找出每隔几秒就会出现的半随机帧卡顿的根本原因。尽管 Tracy 以帧剖析为目标,重点分析实时应用程序(如游戏)中的帧时间,但它也适用于不使用帧概念的实用程序。
1.1. 初始化连接界面:
button功能介绍:
📇Manual:点击该按钮,可以跳转到用户使用手册。
🌎Web:点击该按钮,会跳转到Tracy官方主页以及功能演示视频的网页。
💬Chat:点击该按钮,可以跳转到该工具的讨论社区。
🤍Sponsor:点击该按钮,可以给开源社区的建设者们提供资金支持。
🔧:Abort Tracy。
button:可以查看历史连接记录,快速重连之前的IP和对应的端口。
Connect:想要实时捕获,输入IP和port之后点击connect可以查看实时性能。
Open saved trace:如果你想打开保存好的数据文件,你可以点击该按钮,查看捕捉文件的程序性能。
1.2. 连接成功信息弹窗:
Save trace:使用 Save trace(保存跟踪)按钮将当前配置文件数据保存到文件中。
Stop:点击stop按钮,断开与客户端的连接。
Discard:按Discard按钮用于丢弃当前配置文件数据。
1.3. profiler 主窗口:
1.3.1. ⚙️Options:
-
Draw empty labels :默认情况下,没有任何内容显示的线程会被隐藏。启用此选项后,这些线程还是会显示出来。
-
- Draw frame targets:如果启用,当前所选帧集中任何帧的时间区域、超过指定目标 FPS
值的时间区域将在时间线视图上以红色背景标记。 -
Draw context switches:勾选该选项,显示在timeline上线程状态的切换。
-
Darken inactive threads:勾选该选项,将inactive threads在Main Thread Zone
绘制,颜色加深。 -
Draw CPU data:勾选该选项以绘制CPU数据。
-
Draw CPU usage graph:勾选该选项会显示CPU使用率图。
-
Draw stack samples:勾选该选项,将会在Main Thread timeline
上方以点的方式绘制堆栈样本,鼠标移动到点上,会显示具体信息。 -
Draw CPU zones:勾选该选项,可以显示 CPU 区段。
-
Zone colors:内核态的调用颜色会比用户态颜色更深。
-
Zone name shortening:调用接口参数是否显示,有以下选项:
Disabled: 不缩短区域名称,名称始终以全名显示。(例如 bool ns::container::add(const float&))。 Minimal length : 只有函数名即可。
Only normalize : 仅去掉函数参数,但不删除名称空间(如 ns::container<>::add() )。
AS needed :只有在没有空间显示完整的区名时,才会执行名称缩短步骤。直到名称适合可用空间,或缩写不再可行(例如:container<>:: add()
AS needed + normalize : 同上,但区段名称归一化总是要执行的、即使整个区域名称符合可用空间。 -
Draw plots:勾选该选项,可以显示CPU 使用率时间线。
-
Visible threads:点击该选项,可以指定某些thread是否被展示。
-
Visable frame sets:点击该选项,可在此处启用或禁用帧集显示。
1.3.2. Messages:切换消息日志窗口,该窗口显示客户端发送的自定义消息。
当你的程序中的代码很庞大、很复杂的时候,你或许会想到打log去调试相应的代码,Messages的功能就在于可以让你快速定位到你的log所在thread。
Tracy 提供了消息日志功能。您可以使用(例如,典型的调试输出)。或者使用TracyMessageL(text) 宏来发送字符串字面信息。如果你想对信息进行颜色编码(例如,使关键信息更容易看清),可以使用 TracyMessageL(text) 宏、可以使用 TracyMessageC(text, size, color) 或 TracyMessageLC(text, color) 宏。
参数:
text:字符串
size:指定显示字符串的大小
color:你可以为你的log进行颜色设置
你也可以在左上角Filter messages中搜索你想要的某一个log 字符串
运行之后的效果:
1.3.3. Find zone:点击按钮可切换查找区段窗口,通过该窗口可检查区段行为统计
-
Histogram:Self time和Running time不可以同时勾选!!!!
-
Log values:勾选该选项,可以在y轴上查看调用次数。 Log time:勾选该选项,可以在x轴上查看时间分段。 Cumulate
-
time:更改直方图分档值的计算方式。
-
Self time:删除分析区段中的子区段时间,从而只显示在区段本身(或非仪器功能调用)中花费的时间。或非仪器功能调用中花费的时间。当运行时间激活时无法选择。
-
Running time:- 删除区的线程执行被操作系统暂停的时间由于其他线程抢占、等待系统资源、锁竞争等原因而被操作系统暂停的时间。仅在
-
profiler执行上下文切换捕获时可用。当 Self time间激活时无法使用。
Found zones 根据以下标准分组:
线程 - 在此模式下,可以查看哪些线程在执行区段。 用户文本 - 根据自定义用户文本分割区段。
区域名称 - 根据调用设置的名称分组区域。
调用堆栈 - 根据起始调用堆栈分组区段。
父区 - 根据父区对区段进行分组。这种模式依赖于区段层次结构,而不是调用堆栈信息。
无分组 - 禁用区段分组
1.3.4. Statistics:查看时间轴视图可以让你对事物有一个更具体的看法。不过,有时你想查看程序行为的总体概览。例如,您想知道哪个函数占用了程序最多的执行时间。统计窗口恰好能为您提供这些信息。
statistics主要有两种模式:Instrumentation mode && Sampling
勾选Instrmentation,可以看到以下基本信息:Name、Location、Total time、Counts、MTPC
Sampling与Instrmentation有相同之处,但也有几点不同
@ Address:Sampling可以勾选Address选项查看程序的二进制地址
Show all:Samping可以勾选Show all选项查看该程序的所有调用
1.3.5. Memory:(打开抓取的tracy文件,目前没有memory信息,待补充
1.3.6. Compare:该按钮的功能是将程序之间的性能进行比较,在开始工作时,您需要记录一条代表程序通常行为的参考轨迹。然后,在代码优化完成后,再保存记录优化后的程序。最后,打开优化后的程序,在比较窗口中选择 i Open second选项,并加载原来的程序。
通常情况下,轨迹是用颜色和符号编码的。当前轨迹用黄色符号标记,外部轨迹用红色 v 符号标记。