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;
}