在资源紧张的嵌入式平台做开发时,经常需要对所实现的功能进行性能优化,这时就还需要评估优化的效果!
对代码进行性能评估时,获取当前时刻非常重要,c++和c版本的获取当前时刻的实现,分别如下,
//c++
#include <time.h>
#define MICRO_IN_SECOND 1000000
#define NANOS_IN_SECOND 1000000000
double currentTimeInMiliSeconds() {
struct timespec res;
double ret = 0;
clock_gettime(CLOCK_MONOTONIC, &res);
ret = (double)(res.tv_sec * NANOS_IN_SECOND + res.tv_nsec) / MICRO_IN_SECOND;
return ret;
}
double t1 = currentTimeInMiliSeconds();
//需要统计时间的code
double t2 = currentTimeInMiliSeconds();
cout<<"ProcessFrameArrive time " << t2 - t1 << endl;
//c
#include <time.h>
UINT32 perf_get_current(VOID)
{
UINT32 rt;
struct timeval tv;
struct timezone tz;
gettimeofday(&tv,&tz);
rt = (UINT32)(((UINT64)(tv.tv_sec) * 1000000) + (UINT64)((tv.tv_usec) & 0xFFFFFFFF));
return rt;
}
UINT32 time1 = perf_get_current();
UINT32 time2 = perf_get_current();
printf("t2(%dus)-t1(%dus) is %dms\n", time2, time1, (time2-time1)/1000);
//统计fps
#define FRM_TIME_MSR 30 ///< number of frames to measure the time and fps
unsigned long lTimeStart = 0, lTimeEnd = 0, lTimeDiff = 0;
GETTIME(&lTimeStart);
//in while
if((mFrmCnt%FRM_TIME_MSR) == 0) {
GETTIME(&lTimeEnd);
lTimeDiff = lTimeEnd - lTimeStart;
lTimeStart = lTimeEnd;
printf("%u frames took %lu usec (%5.2ffps).",
FRM_TIME_MSR, lTimeDiff,
(FRM_TIME_MSR*1000000.0)/((float)lTimeDiff));
}