|  | @@ -87,6 +87,8 @@ const char *grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT] = {
 | 
	
		
			
				|  |  |      "executor_wakeup_initiated",
 | 
	
		
			
				|  |  |      "executor_queue_drained",
 | 
	
		
			
				|  |  |      "executor_push_retries",
 | 
	
		
			
				|  |  | +    "executor_threads_created",
 | 
	
		
			
				|  |  | +    "executor_threads_used",
 | 
	
		
			
				|  |  |      "server_requested_calls",
 | 
	
		
			
				|  |  |      "server_slowpath_requests_queued",
 | 
	
		
			
				|  |  |  };
 | 
	
	
		
			
				|  | @@ -169,6 +171,8 @@ const char *grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT] = {
 | 
	
		
			
				|  |  |      "Number of times an executor queue was drained",
 | 
	
		
			
				|  |  |      "Number of times we raced and were forced to retry pushing a closure to "
 | 
	
		
			
				|  |  |      "the executor",
 | 
	
		
			
				|  |  | +    "Size of the backing thread pool for overflow gRPC Core work",
 | 
	
		
			
				|  |  | +    "How many executor threads actually got used",
 | 
	
		
			
				|  |  |      "How many calls were requested (not necessarily received) by the server",
 | 
	
		
			
				|  |  |      "How many times was the server slow path taken (indicates too few "
 | 
	
		
			
				|  |  |      "outstanding requests)",
 | 
	
	
		
			
				|  | @@ -186,6 +190,7 @@ const char *grpc_stats_histogram_name[GRPC_STATS_HISTOGRAM_COUNT] = {
 | 
	
		
			
				|  |  |      "http2_send_message_per_write",
 | 
	
		
			
				|  |  |      "http2_send_trailing_metadata_per_write",
 | 
	
		
			
				|  |  |      "http2_send_flowctl_per_write",
 | 
	
		
			
				|  |  | +    "executor_closures_per_wakeup",
 | 
	
		
			
				|  |  |      "server_cqs_checked",
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  const char *grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT] = {
 | 
	
	
		
			
				|  | @@ -201,6 +206,7 @@ const char *grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT] = {
 | 
	
		
			
				|  |  |      "Number of streams whose payload was written per TCP write",
 | 
	
		
			
				|  |  |      "Number of streams terminated per TCP write",
 | 
	
		
			
				|  |  |      "Number of flow control updates written per TCP write",
 | 
	
		
			
				|  |  | +    "Number of closures executed each time an executor wakes up",
 | 
	
		
			
				|  |  |      "How many completion queues were checked looking for a CQ that had "
 | 
	
		
			
				|  |  |      "requested the incoming call",
 | 
	
		
			
				|  |  |  };
 | 
	
	
		
			
				|  | @@ -272,6 +278,7 @@ const uint8_t grpc_stats_table_7[102] = {
 | 
	
		
			
				|  |  |  const int grpc_stats_table_8[9] = {0, 1, 2, 4, 7, 13, 23, 39, 64};
 | 
	
		
			
				|  |  |  const uint8_t grpc_stats_table_9[9] = {0, 0, 1, 2, 2, 3, 4, 4, 5};
 | 
	
		
			
				|  |  |  void grpc_stats_inc_call_initial_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 262144);
 | 
	
		
			
				|  |  |    if (value < 6) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE,
 | 
	
	
		
			
				|  | @@ -297,6 +304,7 @@ void grpc_stats_inc_call_initial_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_0, 64));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_poll_events_returned(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 29) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx),
 | 
	
	
		
			
				|  | @@ -323,6 +331,7 @@ void grpc_stats_inc_poll_events_returned(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_2, 128));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_tcp_write_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 16777216);
 | 
	
		
			
				|  |  |    if (value < 5) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE,
 | 
	
	
		
			
				|  | @@ -348,6 +357,7 @@ void grpc_stats_inc_tcp_write_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_4, 64));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_tcp_write_iov_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx),
 | 
	
	
		
			
				|  | @@ -373,6 +383,7 @@ void grpc_stats_inc_tcp_write_iov_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_6, 64));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_tcp_read_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 16777216);
 | 
	
		
			
				|  |  |    if (value < 5) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_TCP_READ_SIZE,
 | 
	
	
		
			
				|  | @@ -398,6 +409,7 @@ void grpc_stats_inc_tcp_read_size(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_4, 64));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_tcp_read_offer(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 16777216);
 | 
	
		
			
				|  |  |    if (value < 5) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx), GRPC_STATS_HISTOGRAM_TCP_READ_OFFER,
 | 
	
	
		
			
				|  | @@ -424,6 +436,7 @@ void grpc_stats_inc_tcp_read_offer(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_tcp_read_offer_iov_size(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |                                              int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -451,6 +464,7 @@ void grpc_stats_inc_tcp_read_offer_iov_size(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_http2_send_message_size(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |                                              int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 16777216);
 | 
	
		
			
				|  |  |    if (value < 5) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -478,6 +492,7 @@ void grpc_stats_inc_http2_send_message_size(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_http2_send_initial_metadata_per_write(
 | 
	
		
			
				|  |  |      grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -507,6 +522,7 @@ void grpc_stats_inc_http2_send_initial_metadata_per_write(
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_http2_send_message_per_write(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |                                                   int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -534,6 +550,7 @@ void grpc_stats_inc_http2_send_message_per_write(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_http2_send_trailing_metadata_per_write(
 | 
	
		
			
				|  |  |      grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -563,6 +580,7 @@ void grpc_stats_inc_http2_send_trailing_metadata_per_write(
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void grpc_stats_inc_http2_send_flowctl_per_write(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |                                                   int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  |    if (value < 13) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM(
 | 
	
	
		
			
				|  | @@ -588,7 +606,36 @@ void grpc_stats_inc_http2_send_flowctl_per_write(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |                             grpc_stats_histo_find_bucket_slow(
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_6, 64));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +void grpc_stats_inc_executor_closures_per_wakeup(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  | +                                                 int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  | +  value = GPR_CLAMP(value, 0, 1024);
 | 
	
		
			
				|  |  | +  if (value < 13) {
 | 
	
		
			
				|  |  | +    GRPC_STATS_INC_HISTOGRAM(
 | 
	
		
			
				|  |  | +        (exec_ctx), GRPC_STATS_HISTOGRAM_EXECUTOR_CLOSURES_PER_WAKEUP, value);
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  union {
 | 
	
		
			
				|  |  | +    double dbl;
 | 
	
		
			
				|  |  | +    uint64_t uint;
 | 
	
		
			
				|  |  | +  } _val, _bkt;
 | 
	
		
			
				|  |  | +  _val.dbl = value;
 | 
	
		
			
				|  |  | +  if (_val.uint < 4637863191261478912ull) {
 | 
	
		
			
				|  |  | +    int bucket =
 | 
	
		
			
				|  |  | +        grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
 | 
	
		
			
				|  |  | +    _bkt.dbl = grpc_stats_table_6[bucket];
 | 
	
		
			
				|  |  | +    bucket -= (_val.uint < _bkt.uint);
 | 
	
		
			
				|  |  | +    GRPC_STATS_INC_HISTOGRAM(
 | 
	
		
			
				|  |  | +        (exec_ctx), GRPC_STATS_HISTOGRAM_EXECUTOR_CLOSURES_PER_WAKEUP, bucket);
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  GRPC_STATS_INC_HISTOGRAM((exec_ctx),
 | 
	
		
			
				|  |  | +                           GRPC_STATS_HISTOGRAM_EXECUTOR_CLOSURES_PER_WAKEUP,
 | 
	
		
			
				|  |  | +                           grpc_stats_histo_find_bucket_slow(
 | 
	
		
			
				|  |  | +                               (exec_ctx), value, grpc_stats_table_6, 64));
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  void grpc_stats_inc_server_cqs_checked(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  | +  /* Automatically generated by tools/codegen/core/gen_stats_data.py */
 | 
	
		
			
				|  |  |    value = GPR_CLAMP(value, 0, 64);
 | 
	
		
			
				|  |  |    if (value < 3) {
 | 
	
		
			
				|  |  |      GRPC_STATS_INC_HISTOGRAM((exec_ctx),
 | 
	
	
		
			
				|  | @@ -613,17 +660,17 @@ void grpc_stats_inc_server_cqs_checked(grpc_exec_ctx *exec_ctx, int value) {
 | 
	
		
			
				|  |  |                             grpc_stats_histo_find_bucket_slow(
 | 
	
		
			
				|  |  |                                 (exec_ctx), value, grpc_stats_table_8, 8));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -const int grpc_stats_histo_buckets[13] = {64, 128, 64, 64, 64, 64, 64,
 | 
	
		
			
				|  |  | -                                          64, 64,  64, 64, 64, 8};
 | 
	
		
			
				|  |  | -const int grpc_stats_histo_start[13] = {0,   64,  192, 256, 320, 384, 448,
 | 
	
		
			
				|  |  | -                                        512, 576, 640, 704, 768, 832};
 | 
	
		
			
				|  |  | -const int *const grpc_stats_histo_bucket_boundaries[13] = {
 | 
	
		
			
				|  |  | +const int grpc_stats_histo_buckets[14] = {64, 128, 64, 64, 64, 64, 64,
 | 
	
		
			
				|  |  | +                                          64, 64,  64, 64, 64, 64, 8};
 | 
	
		
			
				|  |  | +const int grpc_stats_histo_start[14] = {0,   64,  192, 256, 320, 384, 448,
 | 
	
		
			
				|  |  | +                                        512, 576, 640, 704, 768, 832, 896};
 | 
	
		
			
				|  |  | +const int *const grpc_stats_histo_bucket_boundaries[14] = {
 | 
	
		
			
				|  |  |      grpc_stats_table_0, grpc_stats_table_2, grpc_stats_table_4,
 | 
	
		
			
				|  |  |      grpc_stats_table_6, grpc_stats_table_4, grpc_stats_table_4,
 | 
	
		
			
				|  |  |      grpc_stats_table_6, grpc_stats_table_4, grpc_stats_table_6,
 | 
	
		
			
				|  |  |      grpc_stats_table_6, grpc_stats_table_6, grpc_stats_table_6,
 | 
	
		
			
				|  |  | -    grpc_stats_table_8};
 | 
	
		
			
				|  |  | -void (*const grpc_stats_inc_histogram[13])(grpc_exec_ctx *exec_ctx, int x) = {
 | 
	
		
			
				|  |  | +    grpc_stats_table_6, grpc_stats_table_8};
 | 
	
		
			
				|  |  | +void (*const grpc_stats_inc_histogram[14])(grpc_exec_ctx *exec_ctx, int x) = {
 | 
	
		
			
				|  |  |      grpc_stats_inc_call_initial_size,
 | 
	
		
			
				|  |  |      grpc_stats_inc_poll_events_returned,
 | 
	
		
			
				|  |  |      grpc_stats_inc_tcp_write_size,
 | 
	
	
		
			
				|  | @@ -636,4 +683,5 @@ void (*const grpc_stats_inc_histogram[13])(grpc_exec_ctx *exec_ctx, int x) = {
 | 
	
		
			
				|  |  |      grpc_stats_inc_http2_send_message_per_write,
 | 
	
		
			
				|  |  |      grpc_stats_inc_http2_send_trailing_metadata_per_write,
 | 
	
		
			
				|  |  |      grpc_stats_inc_http2_send_flowctl_per_write,
 | 
	
		
			
				|  |  | +    grpc_stats_inc_executor_closures_per_wakeup,
 | 
	
		
			
				|  |  |      grpc_stats_inc_server_cqs_checked};
 |