34 #ifndef GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
35 #define GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
41 #ifdef GRPC_TIMERS_RDTSC
46 __asm__
volatile(
"rdtsc" :
"=A"(ret));
51 #elif defined(__x86_64__) || defined(__amd64__)
53 unsigned long long low, high;
54 __asm__
volatile(
"rdtsc" :
"=a"(low),
"=d"(high));
55 *clk = (high << 32) | low;
59 static double cycles_per_second = 0.0;
60 static void grpc_precise_clock_init() {
61 time_t start = time(NULL);
64 while (time(NULL) == start)
66 grpc_precise_clock_now(&start_time);
67 while (time(NULL) == start + 1)
69 grpc_precise_clock_now(&end_time);
70 cycles_per_second = end_time - start_time;
72 static double grpc_precise_clock_scaling_factor() {
74 return 1e6 / cycles_per_second;
76 #define GRPC_PRECISE_CLOCK_FORMAT "%f"
77 #define GRPC_PRECISE_CLOCK_PRINTF_ARGS(clk) \
78 (*(clk)*grpc_precise_clock_scaling_factor())
87 #define GRPC_PRECISE_CLOCK_FORMAT "%ld.%09d"
88 #define GRPC_PRECISE_CLOCK_PRINTF_ARGS(clk) \
89 (clk)->clock.tv_sec, (clk)->clock.tv_nsec
time_t tv_sec
Definition: time.h:61
void gpr_once_init(gpr_once *once, void(*init_routine)(void))
struct grpc_precise_clock grpc_precise_clock
Definition: timers_preciseclock.h:80
pthread_once_t gpr_once
Definition: sync_posix.h:43
gpr_timespec clock
Definition: timers_preciseclock.h:82
int tv_nsec
Definition: time.h:62
#define GPR_ONCE_INIT
Definition: sync_posix.h:45
gpr_timespec gpr_now(gpr_clock_type clock)
Definition: timers_preciseclock.h:81