9 #define SCARAB_API_EXPORTS 20 double thorax_timebase = 0.0;
25 #define CLOCK_MONOTONIC 1 26 #define CLOCK_PROCESS_CPUTIME_ID 2 31 #ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time 32 if (! thorax_timestart)
34 mach_timebase_info_data_t tb = { .numer = 0, .denom = 1 };
35 mach_timebase_info(&tb);
36 thorax_timebase = tb.numer;
37 thorax_timebase /= tb.denom;
38 thorax_timestart = mach_absolute_time();
40 double diff = (mach_absolute_time() - thorax_timestart) * thorax_timebase;
41 time->tv_sec = diff * MACNANO;
42 time->tv_nsec = diff - (time->tv_sec * MACGIGA);
45 return clock_gettime( CLOCK_MONOTONIC, time );
51 #ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time 52 if (! thorax_timestart)
54 mach_timebase_info_data_t tb = { .numer = 0, .denom = 1 };
55 mach_timebase_info(&tb);
56 thorax_timebase = tb.numer;
57 thorax_timebase /= tb.denom;
58 thorax_timestart = mach_absolute_time();
60 double diff = (mach_absolute_time() - thorax_timestart) * thorax_timebase;
61 time->tv_sec = diff * MACNANO;
62 time->tv_nsec = diff - (time->tv_sec * MACGIGA);
65 return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, time);
72 return (
long long int)time.tv_sec * (
long long int)
NSEC_PER_SEC + (
long long int)time.tv_nsec;
77 return (
double)time.tv_sec + (double)time.tv_nsec / (
double)
NSEC_PER_SEC;
82 if ((end.tv_nsec - start.tv_nsec < 0))
84 diff->tv_sec = end.tv_sec - start.tv_sec - 1;
85 diff->tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;
89 diff->tv_sec = end.tv_sec - start.tv_sec;
90 diff->tv_nsec = end.tv_nsec - start.tv_nsec;
98 struct tm* processed_time;
101 processed_time = gmtime(&raw_time);
102 return strftime(ptr, 512, date_time_format, processed_time);
107 char t_string_time[ 512 ];
109 return std::string( t_string_time );
127 SystemTimeToFileTime(&s, &f);
128 t.QuadPart = f.dwHighDateTime;
130 t.QuadPart |= f.dwLowDateTime;
134 SCARAB_API int clock_gettime(
int X,
struct timespec *tv )
139 static LARGE_INTEGER offset;
140 static double frequencyToMicroseconds;
141 static int initialized = 0;
142 static BOOL usePerformanceCounter = 0;
146 LARGE_INTEGER performanceFrequency;
148 usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency);
149 if (usePerformanceCounter)
151 QueryPerformanceCounter(&offset);
152 frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.;
156 offset = getFILETIMEoffset();
157 frequencyToMicroseconds = 10.;
160 if (usePerformanceCounter) QueryPerformanceCounter(&t);
163 GetSystemTimeAsFileTime(&f);
164 t.QuadPart = f.dwHighDateTime;
166 t.QuadPart |= f.dwLowDateTime;
169 t.QuadPart -= offset.QuadPart;
170 microseconds = (double)t.QuadPart / frequencyToMicroseconds;
171 t.QuadPart = microseconds;
std::string get_absolute_time_string()
size_t get_time_absolute_str(char *ptr)
void time_diff(struct timespec start, struct timespec end, struct timespec *diff)
int get_time_current(struct timespec *time)
time_nsec_type time_to_nsec(struct timespec time)
double time_to_sec(struct timespec time)
int get_time_monotonic(struct timespec *time)