minitrace使用
文章目录
- minitrace使用
- 简介
- 获取
- 用法
- 结果查看
- 例程解析
简介
minitrace
是一个轻量级的跟踪库,用于创建和记录程序的运行时跟踪,以便进行性能分析。 在C++
程序中插入性能监控点,通过记录函数或任务的开始和结束时间,生成trace.json
文件。 minitrace
生成的trace.json
文件可以通过Chrome
的Trace Viewer
(内置于Chrome
浏览器中的工具)进行可视化。
获取
github
上面的是基于C语言实现的,地址为:https://github.com/hrydgard/minitrace.git
- 可以在行为树的仓库中找到
c++
版本的,地址:https://github.com/BehaviorTree/BehaviorTree.CPP.git
3rdparty/minitrace
用法
- 参照
README.md
结果查看
- 打开
Chrome
浏览器,并输入chrome://tracing
进入Trace Viewer
界面 - 加载(load)
trace.json
文件 - 查看和分析数据:加载成功后,可以在界面看到各线程的运行时间等性能数据
例程解析
#include <unistd.h>
#include <iostream>
#include "minitrace/minitrace.h"using namespace minitrace;int main(int argc, const char *argv[])
{int i;// 初始化 minitrace 库,并指定输出跟踪数据的文件路径mtr_init("trace.json");// 设置进程和线程的名称,这些信息会在跟踪数据中显示MTR_META_PROCESS_NAME("minitrace_test");MTR_META_THREAD_NAME("main thread");int long_running_thing_1;int long_running_thing_2;// 定义两个整数变量,用于跟踪两个长时间运行的任务。MTR_START 宏用于标记任务的开始MTR_START("background", "long_running", &long_running_thing_1);MTR_START("background", "long_running", &long_running_thing_2);// 使用 MTR_BEGIN 宏开始跟踪名为 "outer" 的事件,并使程序暂停 80 毫秒MTR_BEGIN("main", "outer");usleep(80000);// 循环三次,每次开始一个名为 "inner" 的事件,暂停 40 毫秒,然后结束该事件,再暂停 10 毫秒for (i = 0; i < 3; i++) {MTR_BEGIN("main", "inner");usleep(40000);MTR_END("main", "inner");usleep(10000);}// 记录第一个后台任务的中间步骤,并再次暂停 80 毫秒MTR_STEP("background", "long_running", &long_running_thing_1, "middle step");usleep(80000);// 结束 "outer" 事件的跟踪MTR_END("main", "outer");usleep(50000);// 记录一个名为 "the end" 的即时事件MTR_INSTANT("main", "the end");usleep(10000);// 结束两个后台任务的跟踪MTR_FINISH("background", "long_running", &long_running_thing_1);MTR_FINISH("background", "long_running", &long_running_thing_2);// 刷新跟踪数据到文件,并关闭 minitrace 库mtr_flush();mtr_shutdown();return 0;
}