|
|
@ -222,18 +222,20 @@ bool grpc_combiner_continue_exec_ctx(grpc_exec_ctx *exec_ctx) { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool contended = gpr_atm_no_barrier_load(&lock->initiating_exec_ctx_or_null) == 0; |
|
|
|
bool contended = |
|
|
|
|
|
|
|
gpr_atm_no_barrier_load(&lock->initiating_exec_ctx_or_null) == 0; |
|
|
|
|
|
|
|
|
|
|
|
GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG, |
|
|
|
GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG, |
|
|
|
"C:%p grpc_combiner_continue_exec_ctx " |
|
|
|
"C:%p grpc_combiner_continue_exec_ctx " |
|
|
|
"contended=%d " |
|
|
|
"contended=%d " |
|
|
|
"exec_ctx_ready_to_finish=%d " |
|
|
|
"exec_ctx_ready_to_finish=%d " |
|
|
|
"time_to_execute_final_list=%d", |
|
|
|
"time_to_execute_final_list=%d", |
|
|
|
lock, contended, grpc_exec_ctx_ready_to_finish(exec_ctx), |
|
|
|
lock, contended, |
|
|
|
|
|
|
|
grpc_exec_ctx_ready_to_finish(exec_ctx), |
|
|
|
lock->time_to_execute_final_list)); |
|
|
|
lock->time_to_execute_final_list)); |
|
|
|
|
|
|
|
|
|
|
|
if (contended && |
|
|
|
if (contended && grpc_exec_ctx_ready_to_finish(exec_ctx) && |
|
|
|
grpc_exec_ctx_ready_to_finish(exec_ctx) && grpc_executor_is_threaded()) { |
|
|
|
grpc_executor_is_threaded()) { |
|
|
|
GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0); |
|
|
|
GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0); |
|
|
|
// this execution context wants to move on, and we have a workqueue (and
|
|
|
|
// this execution context wants to move on, and we have a workqueue (and
|
|
|
|
// so can help the execution context out): schedule remaining work to be
|
|
|
|
// so can help the execution context out): schedule remaining work to be
|
|
|
|