26 #include "absl/strings/str_format.h"
35 std::atomic<int64_t> g_process_epoch_seconds;
36 std::atomic<gpr_cycle_counter> g_process_epoch_cycles;
39 gpr_cycle_counter cycles_start = 0;
40 gpr_cycle_counter cycles_end = 0;
41 int64_t process_epoch_seconds = 0;
45 for (
int i = 0;
i < 11;
i++) {
46 cycles_start = gpr_get_cycle_counter();
48 cycles_end = gpr_get_cycle_counter();
49 process_epoch_seconds =
now.tv_sec - 1;
50 if (process_epoch_seconds != 0) {
59 gpr_cycle_counter process_epoch_cycles = (cycles_start + cycles_end) / 2;
61 if (!g_process_epoch_seconds.compare_exchange_strong(
62 expected, process_epoch_seconds, std::memory_order_relaxed,
63 std::memory_order_relaxed)) {
64 process_epoch_seconds = expected;
66 process_epoch_cycles =
67 g_process_epoch_cycles.load(std::memory_order_relaxed);
68 }
while (process_epoch_cycles == 0);
70 g_process_epoch_cycles.store(process_epoch_cycles,
71 std::memory_order_relaxed);
73 return std::make_pair(process_epoch_seconds, process_epoch_cycles);
77 int64_t sec = g_process_epoch_seconds.load(std::memory_order_relaxed);
82 gpr_cycle_counter StartCycleCounter() {
83 gpr_cycle_counter cycles =
84 g_process_epoch_cycles.load(std::memory_order_relaxed);
85 if (
GPR_UNLIKELY(cycles == 0)) cycles = InitTime().second;
158 return MillisecondsAsTimespec(
millis_, clock_type);
196 return std::chrono::milliseconds(
202 g_process_epoch_seconds.store(