Nymph  v1.5.2
Flow-Based Data Processing Framework
KTTime.cc
Go to the documentation of this file.
1 /*
2  * KTTime.cc
3  *
4  * Created on: Oct 08, 2014
5  * Author: nsoblath
6  *
7  * Copied from libthorax's thorax_time.c
8  */
9 
10 #include "KTTime.hh"
11 
12 char eDateTimeFormat[] = "%FT%TZ";
13 
14 #ifdef __MACH__
15 double eTimebase = 0.0;
16 uint64_t eTimeStart = 0;
17 #endif
18 
19 int GetTimeMonotonic(struct timespec* time)
20 {
21 #ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time
22  if (! eTimeStart)
23  {
24  mach_timebase_info_data_t tb = { .numer = 0, .denom = 1 };
25  mach_timebase_info(&tb);
26  eTimebase = tb.numer;
27  eTimebase /= tb.denom;
28  eTimeStart = mach_absolute_time();
29  }
30  double diff = (mach_absolute_time() - eTimeStart) * eTimebase;
31  time->tv_sec = diff * MACNANO;
32  time->tv_nsec = diff - (time->tv_sec * MACGIGA);
33  return 0;
34 #else
35  return clock_gettime( CLOCK_MONOTONIC, time );
36 #endif
37 }
38 
39 int GetTimeCurrent(struct timespec* time)
40 {
41 #ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time
42  if (! eTimeStart)
43  {
44  mach_timebase_info_data_t tb = { .numer = 0, .denom = 1 };
45  mach_timebase_info(&tb);
46  eTimebase = tb.numer;
47  eTimebase /= tb.denom;
48  eTimeStart = mach_absolute_time();
49  }
50  double diff = (mach_absolute_time() - eTimeStart) * eTimebase;
51  time->tv_sec = diff * MACNANO;
52  time->tv_nsec = diff - (time->tv_sec * MACGIGA);
53  return 0;
54 #else
55  return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, time);
56 #endif
57 
58 }
59 
60 uint64_t TimeToNSec(struct timespec time)
61 {
62  return (long long int)time.tv_sec * (long long int)NSEC_PER_SEC + (long long int)time.tv_nsec;
63 }
64 
65 double TimeToSec(struct timespec time)
66 {
67  return (double)time.tv_sec + (double)time.tv_nsec / (double)NSEC_PER_SEC;
68 }
69 
70 void TimeDiff(struct timespec start, struct timespec end, struct timespec* diff)
71 {
72  if ((end.tv_nsec - start.tv_nsec < 0))
73  {
74  diff->tv_sec = end.tv_sec - start.tv_sec - 1;
75  diff->tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;
76  }
77  else
78  {
79  diff->tv_sec = end.tv_sec - start.tv_sec;
80  diff->tv_nsec = end.tv_nsec - start.tv_nsec;
81  }
82  return;
83 }
84 
85 size_t GetTimeAbsoluteStr(char* ptr)
86 {
87  time_t raw_time;
88  struct tm* processed_time;
89 
90  time(&raw_time);
91  processed_time = gmtime(&raw_time);
92  return strftime(ptr, 512, eDateTimeFormat, processed_time);
93 }
void TimeDiff(struct timespec start, struct timespec end, struct timespec *diff)
Definition: KTTime.cc:70
int GetTimeMonotonic(struct timespec *time)
Definition: KTTime.cc:19
int GetTimeCurrent(struct timespec *time)
Definition: KTTime.cc:39
size_t GetTimeAbsoluteStr(char *ptr)
Definition: KTTime.cc:85
char eDateTimeFormat[]
Definition: KTTime.cc:12
double TimeToSec(struct timespec time)
Definition: KTTime.cc:65
#define NSEC_PER_SEC
uint64_t TimeToNSec(struct timespec time)
Definition: KTTime.cc:60