Optimize cycle to millis conversion by bypassing sub+add.

pull/19907/head
Soheil Hassas Yeganeh 6 years ago
parent 7b84f81a8c
commit 4b2b00b35b
  1. 22
      src/core/lib/iomgr/exec_ctx.cc

@ -54,8 +54,7 @@ static void exec_ctx_sched(grpc_closure* closure, grpc_error* error) {
static gpr_timespec g_start_time;
static gpr_cycle_counter g_start_cycle;
static grpc_millis timespec_to_millis_round_down(gpr_timespec ts) {
ts = gpr_time_sub(ts, g_start_time);
static grpc_millis timespan_to_millis_round_down(gpr_timespec ts) {
double x = GPR_MS_PER_SEC * static_cast<double>(ts.tv_sec) +
static_cast<double>(ts.tv_nsec) / GPR_NS_PER_MS;
if (x < 0) return 0;
@ -63,8 +62,11 @@ static grpc_millis timespec_to_millis_round_down(gpr_timespec ts) {
return static_cast<grpc_millis>(x);
}
static grpc_millis timespec_to_millis_round_up(gpr_timespec ts) {
ts = gpr_time_sub(ts, g_start_time);
static grpc_millis timespec_to_millis_round_down(gpr_timespec ts) {
return timespan_to_millis_round_down(gpr_time_sub(ts, g_start_time));
}
static grpc_millis timespan_to_millis_round_up(gpr_timespec ts) {
double x = GPR_MS_PER_SEC * static_cast<double>(ts.tv_sec) +
static_cast<double>(ts.tv_nsec) / GPR_NS_PER_MS +
static_cast<double>(GPR_NS_PER_SEC - 1) /
@ -74,6 +76,10 @@ static grpc_millis timespec_to_millis_round_up(gpr_timespec ts) {
return static_cast<grpc_millis>(x);
}
static grpc_millis timespec_to_millis_round_up(gpr_timespec ts) {
return timespan_to_millis_round_up(gpr_time_sub(ts, g_start_time));
}
gpr_timespec grpc_millis_to_timespec(grpc_millis millis,
gpr_clock_type clock_type) {
// special-case infinities as grpc_millis can be 32bit on some platforms
@ -103,13 +109,13 @@ grpc_millis grpc_timespec_to_millis_round_up(gpr_timespec ts) {
}
grpc_millis grpc_cycle_counter_to_millis_round_down(gpr_cycle_counter cycles) {
return timespec_to_millis_round_down(
gpr_time_add(g_start_time, gpr_cycle_counter_sub(cycles, g_start_cycle)));
return timespan_to_millis_round_down(
gpr_cycle_counter_sub(cycles, g_start_cycle));
}
grpc_millis grpc_cycle_counter_to_millis_round_up(gpr_cycle_counter cycles) {
return timespec_to_millis_round_up(
gpr_time_add(g_start_time, gpr_cycle_counter_sub(cycles, g_start_cycle)));
return timespan_to_millis_round_up(
gpr_cycle_counter_sub(cycles, g_start_cycle));
}
static const grpc_closure_scheduler_vtable exec_ctx_scheduler_vtable = {

Loading…
Cancel
Save