Example #1
0
gpr_timespec gpr_now(gpr_clock_type clock) {
  gpr_timespec now;
  struct timeval now_tv;
  double now_dbl;

  now.clock_type = clock;
  switch (clock) {
    case GPR_CLOCK_REALTIME:
      gettimeofday(&now_tv, NULL);
      now.tv_sec = now_tv.tv_sec;
      now.tv_nsec = now_tv.tv_usec * 1000;
      break;
    case GPR_CLOCK_MONOTONIC:
      now_dbl = (mach_absolute_time() - g_time_start) * g_time_scale;
      now.tv_sec = (gpr_int64)(now_dbl * 1e-9);
      now.tv_nsec = (gpr_int32)(now_dbl - ((double)now.tv_sec) * 1e9);
      break;
    case GPR_CLOCK_PRECISE:
      gpr_precise_clock_now(&now);
      break;
    case GPR_TIMESPAN:
      abort();
  }

  return now;
}
Example #2
0
gpr_timespec gpr_now(gpr_clock_type clock_type) {
  struct timespec now;
  GPR_ASSERT(clock_type != GPR_TIMESPAN);
  if (clock_type == GPR_CLOCK_PRECISE) {
    gpr_timespec ret;
    gpr_precise_clock_now(&ret);
    return ret;
  } else {
    clock_gettime(clockid_for_gpr_clock[clock_type], &now);
    return gpr_from_timespec(now, clock_type);
  }
}
Example #3
0
static gpr_timespec now_impl(gpr_clock_type clock_type) {
  struct timespec now;
  GPR_ASSERT(clock_type != GPR_TIMESPAN);
  if (clock_type == GPR_CLOCK_PRECISE) {
    gpr_timespec ret;
    gpr_precise_clock_now(&ret);
    return ret;
  } else {
#if defined(GPR_BACKWARDS_COMPATIBILITY_MODE) && defined(__linux__)
    /* avoid ABI problems by invoking syscalls directly */
    syscall(SYS_clock_gettime, clockid_for_gpr_clock[clock_type], &now);
#else
    clock_gettime(clockid_for_gpr_clock[clock_type], &now);
#endif
    return gpr_from_timespec(now, clock_type);
  }
}