- kernel/log.h: add rusage()-based fallback for systems without clock_gettime().

This commit is contained in:
Siesh1oo 2014-03-10 14:36:07 +01:00
parent 40e0b79495
commit 8111938e96
1 changed files with 16 additions and 0 deletions

View File

@ -23,6 +23,8 @@
#include "kernel/rtlil.h"
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <vector>
extern std::vector<FILE*> log_files;
@ -65,9 +67,23 @@ struct PerformanceTimer
}
static int64_t query() {
#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
struct timespec ts;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
return int64_t(ts.tv_sec)*1000000000 + ts.tv_nsec;
#elif defined(RUSAGE_SELF)
struct rusage rusage;
int64_t t;
if (getrusage(RUSAGE_SELF, &rusage) == -1) {
log_cmd_error("getrusage failed!\n");
log_abort();
}
t = 1000000000ULL * (int64_t) rusage.ru_utime.tv_sec + (int64_t) rusage.ru_utime.tv_usec * 1000ULL;
t += 1000000000ULL * (int64_t) rusage.ru_stime.tv_sec + (int64_t) rusage.ru_stime.tv_usec * 1000ULL;
return t;
#else
#error Dont know how to measure per-process CPU time. Need alternative method (times()/clocks()/gettimeofday()?).
#endif
}
void reset() {