Skip to content
Snippets Groups Projects
Commit ff08f33e authored by Mark D. Roth's avatar Mark D. Roth
Browse files

Pass call start time into the call stack via grpc_call_element_args.

parent 6a721b5b
Branches
Tags
No related merge requests found
...@@ -133,7 +133,7 @@ static grpc_error *client_init_call_elem(grpc_exec_ctx *exec_ctx, ...@@ -133,7 +133,7 @@ static grpc_error *client_init_call_elem(grpc_exec_ctx *exec_ctx,
call_data *d = elem->call_data; call_data *d = elem->call_data;
GPR_ASSERT(d != NULL); GPR_ASSERT(d != NULL);
memset(d, 0, sizeof(*d)); memset(d, 0, sizeof(*d));
d->start_ts = gpr_now(GPR_CLOCK_REALTIME); d->start_ts = args->start_time;
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
} }
...@@ -152,7 +152,7 @@ static grpc_error *server_init_call_elem(grpc_exec_ctx *exec_ctx, ...@@ -152,7 +152,7 @@ static grpc_error *server_init_call_elem(grpc_exec_ctx *exec_ctx,
call_data *d = elem->call_data; call_data *d = elem->call_data;
GPR_ASSERT(d != NULL); GPR_ASSERT(d != NULL);
memset(d, 0, sizeof(*d)); memset(d, 0, sizeof(*d));
d->start_ts = gpr_now(GPR_CLOCK_REALTIME); d->start_ts = args->start_time;
/* TODO(hongyu): call census_tracing_start_op here. */ /* TODO(hongyu): call census_tracing_start_op here. */
grpc_closure_init(&d->finish_recv, server_on_done_recv, elem); grpc_closure_init(&d->finish_recv, server_on_done_recv, elem);
return GRPC_ERROR_NONE; return GRPC_ERROR_NONE;
......
...@@ -881,9 +881,7 @@ static grpc_error *cc_init_call_elem(grpc_exec_ctx *exec_ctx, ...@@ -881,9 +881,7 @@ static grpc_error *cc_init_call_elem(grpc_exec_ctx *exec_ctx,
// Initialize data members. // Initialize data members.
grpc_deadline_state_init(exec_ctx, elem, args->call_stack); grpc_deadline_state_init(exec_ctx, elem, args->call_stack);
calld->path = GRPC_MDSTR_REF(args->path); calld->path = GRPC_MDSTR_REF(args->path);
// TODO(roth): Is there a better value to use here for the actual start calld->call_start_time = args->start_time;
// time of the call (i.e., something initialized at the surface layer)?
calld->call_start_time = gpr_now(GPR_CLOCK_MONOTONIC);
calld->deadline = gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC); calld->deadline = gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC);
calld->wait_for_ready_from_service_config = WAIT_FOR_READY_UNSET; calld->wait_for_ready_from_service_config = WAIT_FOR_READY_UNSET;
calld->cancel_error = GRPC_ERROR_NONE; calld->cancel_error = GRPC_ERROR_NONE;
......
...@@ -179,6 +179,7 @@ grpc_error *grpc_call_stack_init( ...@@ -179,6 +179,7 @@ grpc_error *grpc_call_stack_init(
/* init per-filter data */ /* init per-filter data */
grpc_error *first_error = GRPC_ERROR_NONE; grpc_error *first_error = GRPC_ERROR_NONE;
args.start_time = gpr_now(GPR_CLOCK_MONOTONIC);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
args.call_stack = call_stack; args.call_stack = call_stack;
args.server_transport_data = transport_server_data; args.server_transport_data = transport_server_data;
......
...@@ -75,6 +75,7 @@ typedef struct { ...@@ -75,6 +75,7 @@ typedef struct {
const void *server_transport_data; const void *server_transport_data;
grpc_call_context_element *context; grpc_call_context_element *context;
grpc_mdstr *path; grpc_mdstr *path;
gpr_timespec start_time;
gpr_timespec deadline; gpr_timespec deadline;
} grpc_call_element_args; } grpc_call_element_args;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment