00001
00002
00019 #ifndef DB_STATS_FINE_CLOCK_HEADER
00020 #define DB_STATS_FINE_CLOCK_HEADER
00021
00022 #include <time.h>
00023
00024 namespace mongo {
00025
00039 class FineClock {
00040 public:
00041
00042 typedef timespec WallTime;
00043
00044 static WallTime now() {
00045 struct timespec ts;
00046 clock_gettime(CLOCK_MONOTONIC, &ts);
00047 return ts;
00048 }
00049
00050 static uint64_t diffInNanos( WallTime end, WallTime start ) {
00051 uint64_t diff;
00052 if ( end.tv_nsec < start.tv_nsec ) {
00053 diff = 1000000000 * ( end.tv_sec - start.tv_sec - 1);
00054 diff += 1000000000 + end.tv_nsec - start.tv_nsec;
00055 }
00056 else {
00057 diff = 1000000000 * ( end.tv_sec - start.tv_sec );
00058 diff += end.tv_nsec - start.tv_nsec;
00059 }
00060 return diff;
00061 }
00062
00063 };
00064 }
00065
00066 #endif // DB_STATS_FINE_CLOCK_HEADER
00067