性能跟踪是Easylogging++其中一个非常显著的功能,而且使用起来也十分简单。如果在Windows平台下使用性能跟踪,其原理是基于WIndows API函数GetSystemTimeAsFileTime实现的。在Easylogging++的介绍中,该功能可以跟踪到微秒级别。在Windows平台下使用性能跟踪的话,建议只在精度为毫秒级的情况下使用。
如果你想在程序中使用性能跟踪功能,只需要在你想要开始跟踪的地方加上下面其中一个宏定义即可:
·TIMED_FUNC(obj-name),主要用来检测整个函数的性能,一般放在函数的首行
·TIMED_SCOPE(obj-name, block-name),主要用来检测一定范围内的代码性能;
·TIMED_BLOCK(obj-name, block-name),主要用来检测某一段代码块的性能;
其实上面三个宏定义是差不多的,都是使用了el::base::PerformanceTracker这个类,而且日志的输出也都是在这个类的析构函数中控制的,使用时灵活运用就可以了。另外,如果把宏TIMED_SCOPE(obj-name, block-name)中的参数block-name用函数名来赋值之后就变成了宏TIMED_FUNC(obj-name),而宏TIMED_BLOCK(obj-name, block-name)的定义实际上就是在一个只有一次循环的For循环中使用了宏TIMED_SCOPE(obj-name, block-name)的定义。
这里特别说明一下TIMED_BLOCK(obj-name, block-name)这个宏定义,其源码如下:
#define TIMED_BLOCK(obj, blockName) for (struct { int i; el::base::PerformanceTracker timer; } obj = { 0, \
el::base::PerformanceTracker(blockName, ELPP_MIN_UNIT) }; obj.i < 1; ++obj.i)
这段代码中在 Visual Studio 的C++编译器里是编译不过的,如果直接就调用宏 TIMED_BLOCK(obj-name, block-name) ,编译器会提示“error C2332: “struct”: 缺少标记名”之类的错误