Home | History | Annotate | Download | only in debug
      1 /*
      2  * Copyright 2017 gRPC authors.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*
     18  * Automatically generated by tools/codegen/core/gen_stats_data.py
     19  */
     20 
     21 #include <grpc/support/port_platform.h>
     22 
     23 #include "src/core/lib/debug/stats.h"
     24 #include "src/core/lib/debug/stats_data.h"
     25 #include "src/core/lib/gpr/useful.h"
     26 #include "src/core/lib/iomgr/exec_ctx.h"
     27 
     28 const char* grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT] = {
     29     "client_calls_created",
     30     "server_calls_created",
     31     "cqs_created",
     32     "client_channels_created",
     33     "client_subchannels_created",
     34     "server_channels_created",
     35     "syscall_poll",
     36     "syscall_wait",
     37     "pollset_kick",
     38     "pollset_kicked_without_poller",
     39     "pollset_kicked_again",
     40     "pollset_kick_wakeup_fd",
     41     "pollset_kick_wakeup_cv",
     42     "pollset_kick_own_thread",
     43     "syscall_epoll_ctl",
     44     "pollset_fd_cache_hits",
     45     "histogram_slow_lookups",
     46     "syscall_write",
     47     "syscall_read",
     48     "tcp_backup_pollers_created",
     49     "tcp_backup_poller_polls",
     50     "http2_op_batches",
     51     "http2_op_cancel",
     52     "http2_op_send_initial_metadata",
     53     "http2_op_send_message",
     54     "http2_op_send_trailing_metadata",
     55     "http2_op_recv_initial_metadata",
     56     "http2_op_recv_message",
     57     "http2_op_recv_trailing_metadata",
     58     "http2_settings_writes",
     59     "http2_pings_sent",
     60     "http2_writes_begun",
     61     "http2_writes_offloaded",
     62     "http2_writes_continued",
     63     "http2_partial_writes",
     64     "http2_initiate_write_due_to_initial_write",
     65     "http2_initiate_write_due_to_start_new_stream",
     66     "http2_initiate_write_due_to_send_message",
     67     "http2_initiate_write_due_to_send_initial_metadata",
     68     "http2_initiate_write_due_to_send_trailing_metadata",
     69     "http2_initiate_write_due_to_retry_send_ping",
     70     "http2_initiate_write_due_to_continue_pings",
     71     "http2_initiate_write_due_to_goaway_sent",
     72     "http2_initiate_write_due_to_rst_stream",
     73     "http2_initiate_write_due_to_close_from_api",
     74     "http2_initiate_write_due_to_stream_flow_control",
     75     "http2_initiate_write_due_to_transport_flow_control",
     76     "http2_initiate_write_due_to_send_settings",
     77     "http2_initiate_write_due_to_bdp_estimator_ping",
     78     "http2_initiate_write_due_to_flow_control_unstalled_by_setting",
     79     "http2_initiate_write_due_to_flow_control_unstalled_by_update",
     80     "http2_initiate_write_due_to_application_ping",
     81     "http2_initiate_write_due_to_keepalive_ping",
     82     "http2_initiate_write_due_to_transport_flow_control_unstalled",
     83     "http2_initiate_write_due_to_ping_response",
     84     "http2_initiate_write_due_to_force_rst_stream",
     85     "http2_spurious_writes_begun",
     86     "hpack_recv_indexed",
     87     "hpack_recv_lithdr_incidx",
     88     "hpack_recv_lithdr_incidx_v",
     89     "hpack_recv_lithdr_notidx",
     90     "hpack_recv_lithdr_notidx_v",
     91     "hpack_recv_lithdr_nvridx",
     92     "hpack_recv_lithdr_nvridx_v",
     93     "hpack_recv_uncompressed",
     94     "hpack_recv_huffman",
     95     "hpack_recv_binary",
     96     "hpack_recv_binary_base64",
     97     "hpack_send_indexed",
     98     "hpack_send_lithdr_incidx",
     99     "hpack_send_lithdr_incidx_v",
    100     "hpack_send_lithdr_notidx",
    101     "hpack_send_lithdr_notidx_v",
    102     "hpack_send_lithdr_nvridx",
    103     "hpack_send_lithdr_nvridx_v",
    104     "hpack_send_uncompressed",
    105     "hpack_send_huffman",
    106     "hpack_send_binary",
    107     "hpack_send_binary_base64",
    108     "combiner_locks_initiated",
    109     "combiner_locks_scheduled_items",
    110     "combiner_locks_scheduled_final_items",
    111     "combiner_locks_offloaded",
    112     "call_combiner_locks_initiated",
    113     "call_combiner_locks_scheduled_items",
    114     "call_combiner_set_notify_on_cancel",
    115     "call_combiner_cancelled",
    116     "executor_scheduled_short_items",
    117     "executor_scheduled_long_items",
    118     "executor_scheduled_to_self",
    119     "executor_wakeup_initiated",
    120     "executor_queue_drained",
    121     "executor_push_retries",
    122     "server_requested_calls",
    123     "server_slowpath_requests_queued",
    124     "cq_ev_queue_trylock_failures",
    125     "cq_ev_queue_trylock_successes",
    126     "cq_ev_queue_transient_pop_failures",
    127 };
    128 const char* grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT] = {
    129     "Number of client side calls created by this process",
    130     "Number of server side calls created by this process",
    131     "Number of completion queues created",
    132     "Number of client channels created",
    133     "Number of client subchannels created",
    134     "Number of server channels created",
    135     "Number of polling syscalls (epoll_wait, poll, etc) made by this process",
    136     "Number of sleeping syscalls made by this process",
    137     "How many polling wakeups were performed by the process (only valid for "
    138     "epoll1 right now)",
    139     "How many times was a polling wakeup requested without an active poller "
    140     "(only valid for epoll1 right now)",
    141     "How many times was the same polling worker awoken repeatedly before "
    142     "waking up (only valid for epoll1 right now)",
    143     "How many times was an eventfd used as the wakeup vector for a polling "
    144     "wakeup (only valid for epoll1 right now)",
    145     "How many times was a condition variable used as the wakeup vector for a "
    146     "polling wakeup (only valid for epoll1 right now)",
    147     "How many times could a polling wakeup be satisfied by keeping the waking "
    148     "thread awake? (only valid for epoll1 right now)",
    149     "Number of epoll_ctl calls made (only valid for epollex right now)",
    150     "Number of epoll_ctl calls skipped because the fd was cached as already "
    151     "being added.  (only valid for epollex right now)",
    152     "Number of times histogram increments went through the slow (binary "
    153     "search) path",
    154     "Number of write syscalls (or equivalent - eg sendmsg) made by this "
    155     "process",
    156     "Number of read syscalls (or equivalent - eg recvmsg) made by this process",
    157     "Number of times a backup poller has been created (this can be expensive)",
    158     "Number of polls performed on the backup poller",
    159     "Number of batches received by HTTP2 transport",
    160     "Number of cancelations received by HTTP2 transport",
    161     "Number of batches containing send initial metadata",
    162     "Number of batches containing send message",
    163     "Number of batches containing send trailing metadata",
    164     "Number of batches containing receive initial metadata",
    165     "Number of batches containing receive message",
    166     "Number of batches containing receive trailing metadata",
    167     "Number of settings frames sent",
    168     "Number of HTTP2 pings sent by process",
    169     "Number of HTTP2 writes initiated",
    170     "Number of HTTP2 writes offloaded to the executor from application threads",
    171     "Number of HTTP2 writes that finished seeing more data needed to be "
    172     "written",
    173     "Number of HTTP2 writes that were made knowing there was still more data "
    174     "to be written (we cap maximum write size to syscall_write)",
    175     "Number of HTTP2 writes initiated due to 'initial_write'",
    176     "Number of HTTP2 writes initiated due to 'start_new_stream'",
    177     "Number of HTTP2 writes initiated due to 'send_message'",
    178     "Number of HTTP2 writes initiated due to 'send_initial_metadata'",
    179     "Number of HTTP2 writes initiated due to 'send_trailing_metadata'",
    180     "Number of HTTP2 writes initiated due to 'retry_send_ping'",
    181     "Number of HTTP2 writes initiated due to 'continue_pings'",
    182     "Number of HTTP2 writes initiated due to 'goaway_sent'",
    183     "Number of HTTP2 writes initiated due to 'rst_stream'",
    184     "Number of HTTP2 writes initiated due to 'close_from_api'",
    185     "Number of HTTP2 writes initiated due to 'stream_flow_control'",
    186     "Number of HTTP2 writes initiated due to 'transport_flow_control'",
    187     "Number of HTTP2 writes initiated due to 'send_settings'",
    188     "Number of HTTP2 writes initiated due to 'bdp_estimator_ping'",
    189     "Number of HTTP2 writes initiated due to "
    190     "'flow_control_unstalled_by_setting'",
    191     "Number of HTTP2 writes initiated due to "
    192     "'flow_control_unstalled_by_update'",
    193     "Number of HTTP2 writes initiated due to 'application_ping'",
    194     "Number of HTTP2 writes initiated due to 'keepalive_ping'",
    195     "Number of HTTP2 writes initiated due to "
    196     "'transport_flow_control_unstalled'",
    197     "Number of HTTP2 writes initiated due to 'ping_response'",
    198     "Number of HTTP2 writes initiated due to 'force_rst_stream'",
    199     "Number of HTTP2 writes initiated with nothing to write",
    200     "Number of HPACK indexed fields received",
    201     "Number of HPACK literal headers received with incremental indexing",
    202     "Number of HPACK literal headers received with incremental indexing and "
    203     "literal keys",
    204     "Number of HPACK literal headers received with no indexing",
    205     "Number of HPACK literal headers received with no indexing and literal "
    206     "keys",
    207     "Number of HPACK literal headers received with never-indexing",
    208     "Number of HPACK literal headers received with never-indexing and literal "
    209     "keys",
    210     "Number of uncompressed strings received in metadata",
    211     "Number of huffman encoded strings received in metadata",
    212     "Number of binary strings received in metadata",
    213     "Number of binary strings received encoded in base64 in metadata",
    214     "Number of HPACK indexed fields sent",
    215     "Number of HPACK literal headers sent with incremental indexing",
    216     "Number of HPACK literal headers sent with incremental indexing and "
    217     "literal keys",
    218     "Number of HPACK literal headers sent with no indexing",
    219     "Number of HPACK literal headers sent with no indexing and literal keys",
    220     "Number of HPACK literal headers sent with never-indexing",
    221     "Number of HPACK literal headers sent with never-indexing and literal keys",
    222     "Number of uncompressed strings sent in metadata",
    223     "Number of huffman encoded strings sent in metadata",
    224     "Number of binary strings received in metadata",
    225     "Number of binary strings received encoded in base64 in metadata",
    226     "Number of combiner lock entries by process (first items queued to a "
    227     "combiner)",
    228     "Number of items scheduled against combiner locks",
    229     "Number of final items scheduled against combiner locks",
    230     "Number of combiner locks offloaded to different threads",
    231     "Number of call combiner lock entries by process (first items queued to a "
    232     "call combiner)",
    233     "Number of items scheduled against call combiner locks",
    234     "Number of times a cancellation callback was set on a call combiner",
    235     "Number of times a call combiner was cancelled",
    236     "Number of finite runtime closures scheduled against the executor (gRPC "
    237     "thread pool)",
    238     "Number of potentially infinite runtime closures scheduled against the "
    239     "executor (gRPC thread pool)",
    240     "Number of closures scheduled by the executor to the executor",
    241     "Number of thread wakeups initiated within the executor",
    242     "Number of times an executor queue was drained",
    243     "Number of times we raced and were forced to retry pushing a closure to "
    244     "the executor",
    245     "How many calls were requested (not necessarily received) by the server",
    246     "How many times was the server slow path taken (indicates too few "
    247     "outstanding requests)",
    248     "Number of lock (trylock) acquisition failures on completion queue event "
    249     "queue. High value here indicates high contention on completion queues",
    250     "Number of lock (trylock) acquisition successes on completion queue event "
    251     "queue.",
    252     "Number of times NULL was popped out of completion queue's event queue "
    253     "even though the event queue was not empty",
    254 };
    255 const char* grpc_stats_histogram_name[GRPC_STATS_HISTOGRAM_COUNT] = {
    256     "call_initial_size",
    257     "poll_events_returned",
    258     "tcp_write_size",
    259     "tcp_write_iov_size",
    260     "tcp_read_size",
    261     "tcp_read_offer",
    262     "tcp_read_offer_iov_size",
    263     "http2_send_message_size",
    264     "http2_send_initial_metadata_per_write",
    265     "http2_send_message_per_write",
    266     "http2_send_trailing_metadata_per_write",
    267     "http2_send_flowctl_per_write",
    268     "server_cqs_checked",
    269 };
    270 const char* grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT] = {
    271     "Initial size of the grpc_call arena created at call start",
    272     "How many events are called for each syscall_poll",
    273     "Number of bytes offered to each syscall_write",
    274     "Number of byte segments offered to each syscall_write",
    275     "Number of bytes received by each syscall_read",
    276     "Number of bytes offered to each syscall_read",
    277     "Number of byte segments offered to each syscall_read",
    278     "Size of messages received by HTTP2 transport",
    279     "Number of streams initiated written per TCP write",
    280     "Number of streams whose payload was written per TCP write",
    281     "Number of streams terminated per TCP write",
    282     "Number of flow control updates written per TCP write",
    283     "How many completion queues were checked looking for a CQ that had "
    284     "requested the incoming call",
    285 };
    286 const int grpc_stats_table_0[65] = {
    287     0,      1,      2,      3,      4,     5,     7,     9,     11,    14,
    288     17,     21,     26,     32,     39,    47,    57,    68,    82,    98,
    289     117,    140,    167,    199,    238,   284,   339,   404,   482,   575,
    290     685,    816,    972,    1158,   1380,  1644,  1959,  2334,  2780,  3312,
    291     3945,   4699,   5597,   6667,   7941,  9459,  11267, 13420, 15984, 19038,
    292     22676,  27009,  32169,  38315,  45635, 54353, 64737, 77104, 91834, 109378,
    293     130273, 155159, 184799, 220100, 262144};
    294 const uint8_t grpc_stats_table_1[124] = {
    295     0,  0,  0,  1,  1,  1,  2,  2,  3,  3,  3,  4,  4,  5,  5,  6,  6,  6,
    296     7,  7,  7,  8,  9,  9,  10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15,
    297     15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 22, 23, 24,
    298     24, 25, 25, 26, 26, 26, 27, 27, 28, 29, 29, 30, 30, 30, 31, 31, 32, 33,
    299     33, 34, 34, 34, 35, 35, 36, 37, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41,
    300     42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50,
    301     51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58};
    302 const int grpc_stats_table_2[129] = {
    303     0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,  13,  14,
    304     15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  30,
    305     32,  34,  36,  38,  40,  42,  44,  46,  48,  50,  52,  54,  56,  58,  60,
    306     63,  66,  69,  72,  75,  78,  81,  84,  87,  90,  94,  98,  102, 106, 110,
    307     114, 118, 122, 126, 131, 136, 141, 146, 151, 156, 162, 168, 174, 180, 186,
    308     192, 199, 206, 213, 220, 228, 236, 244, 252, 260, 269, 278, 287, 297, 307,
    309     317, 327, 338, 349, 360, 372, 384, 396, 409, 422, 436, 450, 464, 479, 494,
    310     510, 526, 543, 560, 578, 596, 615, 634, 654, 674, 695, 717, 739, 762, 785,
    311     809, 834, 859, 885, 912, 939, 967, 996, 1024};
    312 const uint8_t grpc_stats_table_3[166] = {
    313     0,  0,  0,  1,  1,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,
    314     8,  8,  9,  9,  10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16,
    315     17, 17, 18, 19, 19, 20, 21, 21, 22, 23, 23, 24, 25, 25, 26, 26, 27, 27, 28,
    316     28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 36, 36, 37, 38, 39,
    317     40, 40, 41, 42, 42, 43, 44, 44, 45, 46, 46, 47, 48, 48, 49, 49, 50, 50, 51,
    318     51, 52, 52, 53, 53, 54, 54, 55, 56, 57, 58, 59, 59, 60, 61, 62, 63, 63, 64,
    319     65, 65, 66, 67, 67, 68, 69, 69, 70, 71, 71, 72, 72, 73, 73, 74, 75, 75, 76,
    320     76, 77, 78, 79, 79, 80, 81, 82, 83, 84, 85, 85, 86, 87, 88, 88, 89, 90, 90,
    321     91, 92, 92, 93, 94, 94, 95, 95, 96, 97, 97, 98, 98, 99};
    322 const int grpc_stats_table_4[65] = {
    323     0,       1,       2,       3,       4,       6,       8,        11,
    324     15,      20,      26,      34,      44,      57,      73,       94,
    325     121,     155,     199,     255,     327,     419,     537,      688,
    326     881,     1128,    1444,    1848,    2365,    3026,    3872,     4954,
    327     6338,    8108,    10373,   13270,   16976,   21717,   27782,    35541,
    328     45467,   58165,   74409,   95189,   121772,  155778,  199281,   254933,
    329     326126,  417200,  533707,  682750,  873414,  1117323, 1429345,  1828502,
    330     2339127, 2992348, 3827987, 4896985, 6264509, 8013925, 10251880, 13114801,
    331     16777216};
    332 const uint8_t grpc_stats_table_5[87] = {
    333     0,  0,  1,  1,  2,  3,  3,  4,  4,  5,  6,  6,  7,  8,  8,  9,  10, 11,
    334     11, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 22, 23,
    335     24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 34, 34, 35, 36,
    336     36, 37, 38, 39, 39, 40, 41, 41, 42, 43, 44, 44, 45, 45, 46, 47, 48, 48,
    337     49, 50, 51, 51, 52, 53, 53, 54, 55, 56, 56, 57, 58, 58, 59};
    338 const int grpc_stats_table_6[65] = {
    339     0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,  11,  12,
    340     14,  16,  18,  20,  22,  24,  27,  30,  33,  36,  39,  43,  47,
    341     51,  56,  61,  66,  72,  78,  85,  92,  100, 109, 118, 128, 139,
    342     151, 164, 178, 193, 209, 226, 244, 264, 285, 308, 333, 359, 387,
    343     418, 451, 486, 524, 565, 609, 656, 707, 762, 821, 884, 952, 1024};
    344 const uint8_t grpc_stats_table_7[102] = {
    345     0,  0,  0,  1,  1,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,
    346     6,  7,  7,  7,  8,  8,  9,  9,  10, 11, 11, 12, 12, 13, 13, 14, 14,
    347     14, 15, 15, 16, 16, 17, 17, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23,
    348     23, 24, 24, 24, 25, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32,
    349     32, 33, 33, 34, 35, 35, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41,
    350     42, 42, 43, 44, 44, 45, 46, 46, 47, 48, 48, 49, 49, 50, 50, 51, 51};
    351 const int grpc_stats_table_8[9] = {0, 1, 2, 4, 7, 13, 23, 39, 64};
    352 const uint8_t grpc_stats_table_9[9] = {0, 0, 1, 2, 2, 3, 4, 4, 5};
    353 void grpc_stats_inc_call_initial_size(int value) {
    354   value = GPR_CLAMP(value, 0, 262144);
    355   if (value < 6) {
    356     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE, value);
    357     return;
    358   }
    359   union {
    360     double dbl;
    361     uint64_t uint;
    362   } _val, _bkt;
    363   _val.dbl = value;
    364   if (_val.uint < 4651092515166879744ull) {
    365     int bucket =
    366         grpc_stats_table_1[((_val.uint - 4618441417868443648ull) >> 49)] + 6;
    367     _bkt.dbl = grpc_stats_table_0[bucket];
    368     bucket -= (_val.uint < _bkt.uint);
    369     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE, bucket);
    370     return;
    371   }
    372   GRPC_STATS_INC_HISTOGRAM(
    373       GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE,
    374       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_0, 64));
    375 }
    376 void grpc_stats_inc_poll_events_returned(int value) {
    377   value = GPR_CLAMP(value, 0, 1024);
    378   if (value < 29) {
    379     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_POLL_EVENTS_RETURNED, value);
    380     return;
    381   }
    382   union {
    383     double dbl;
    384     uint64_t uint;
    385   } _val, _bkt;
    386   _val.dbl = value;
    387   if (_val.uint < 4642789003353915392ull) {
    388     int bucket =
    389         grpc_stats_table_3[((_val.uint - 4628855992006737920ull) >> 47)] + 29;
    390     _bkt.dbl = grpc_stats_table_2[bucket];
    391     bucket -= (_val.uint < _bkt.uint);
    392     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_POLL_EVENTS_RETURNED, bucket);
    393     return;
    394   }
    395   GRPC_STATS_INC_HISTOGRAM(
    396       GRPC_STATS_HISTOGRAM_POLL_EVENTS_RETURNED,
    397       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_2, 128));
    398 }
    399 void grpc_stats_inc_tcp_write_size(int value) {
    400   value = GPR_CLAMP(value, 0, 16777216);
    401   if (value < 5) {
    402     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, value);
    403     return;
    404   }
    405   union {
    406     double dbl;
    407     uint64_t uint;
    408   } _val, _bkt;
    409   _val.dbl = value;
    410   if (_val.uint < 4683743612465315840ull) {
    411     int bucket =
    412         grpc_stats_table_5[((_val.uint - 4617315517961601024ull) >> 50)] + 5;
    413     _bkt.dbl = grpc_stats_table_4[bucket];
    414     bucket -= (_val.uint < _bkt.uint);
    415     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, bucket);
    416     return;
    417   }
    418   GRPC_STATS_INC_HISTOGRAM(
    419       GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE,
    420       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
    421 }
    422 void grpc_stats_inc_tcp_write_iov_size(int value) {
    423   value = GPR_CLAMP(value, 0, 1024);
    424   if (value < 13) {
    425     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, value);
    426     return;
    427   }
    428   union {
    429     double dbl;
    430     uint64_t uint;
    431   } _val, _bkt;
    432   _val.dbl = value;
    433   if (_val.uint < 4637863191261478912ull) {
    434     int bucket =
    435         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    436     _bkt.dbl = grpc_stats_table_6[bucket];
    437     bucket -= (_val.uint < _bkt.uint);
    438     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, bucket);
    439     return;
    440   }
    441   GRPC_STATS_INC_HISTOGRAM(
    442       GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE,
    443       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    444 }
    445 void grpc_stats_inc_tcp_read_size(int value) {
    446   value = GPR_CLAMP(value, 0, 16777216);
    447   if (value < 5) {
    448     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, value);
    449     return;
    450   }
    451   union {
    452     double dbl;
    453     uint64_t uint;
    454   } _val, _bkt;
    455   _val.dbl = value;
    456   if (_val.uint < 4683743612465315840ull) {
    457     int bucket =
    458         grpc_stats_table_5[((_val.uint - 4617315517961601024ull) >> 50)] + 5;
    459     _bkt.dbl = grpc_stats_table_4[bucket];
    460     bucket -= (_val.uint < _bkt.uint);
    461     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, bucket);
    462     return;
    463   }
    464   GRPC_STATS_INC_HISTOGRAM(
    465       GRPC_STATS_HISTOGRAM_TCP_READ_SIZE,
    466       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
    467 }
    468 void grpc_stats_inc_tcp_read_offer(int value) {
    469   value = GPR_CLAMP(value, 0, 16777216);
    470   if (value < 5) {
    471     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER, value);
    472     return;
    473   }
    474   union {
    475     double dbl;
    476     uint64_t uint;
    477   } _val, _bkt;
    478   _val.dbl = value;
    479   if (_val.uint < 4683743612465315840ull) {
    480     int bucket =
    481         grpc_stats_table_5[((_val.uint - 4617315517961601024ull) >> 50)] + 5;
    482     _bkt.dbl = grpc_stats_table_4[bucket];
    483     bucket -= (_val.uint < _bkt.uint);
    484     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER, bucket);
    485     return;
    486   }
    487   GRPC_STATS_INC_HISTOGRAM(
    488       GRPC_STATS_HISTOGRAM_TCP_READ_OFFER,
    489       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
    490 }
    491 void grpc_stats_inc_tcp_read_offer_iov_size(int value) {
    492   value = GPR_CLAMP(value, 0, 1024);
    493   if (value < 13) {
    494     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
    495                              value);
    496     return;
    497   }
    498   union {
    499     double dbl;
    500     uint64_t uint;
    501   } _val, _bkt;
    502   _val.dbl = value;
    503   if (_val.uint < 4637863191261478912ull) {
    504     int bucket =
    505         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    506     _bkt.dbl = grpc_stats_table_6[bucket];
    507     bucket -= (_val.uint < _bkt.uint);
    508     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
    509                              bucket);
    510     return;
    511   }
    512   GRPC_STATS_INC_HISTOGRAM(
    513       GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
    514       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    515 }
    516 void grpc_stats_inc_http2_send_message_size(int value) {
    517   value = GPR_CLAMP(value, 0, 16777216);
    518   if (value < 5) {
    519     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
    520                              value);
    521     return;
    522   }
    523   union {
    524     double dbl;
    525     uint64_t uint;
    526   } _val, _bkt;
    527   _val.dbl = value;
    528   if (_val.uint < 4683743612465315840ull) {
    529     int bucket =
    530         grpc_stats_table_5[((_val.uint - 4617315517961601024ull) >> 50)] + 5;
    531     _bkt.dbl = grpc_stats_table_4[bucket];
    532     bucket -= (_val.uint < _bkt.uint);
    533     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
    534                              bucket);
    535     return;
    536   }
    537   GRPC_STATS_INC_HISTOGRAM(
    538       GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
    539       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_4, 64));
    540 }
    541 void grpc_stats_inc_http2_send_initial_metadata_per_write(int value) {
    542   value = GPR_CLAMP(value, 0, 1024);
    543   if (value < 13) {
    544     GRPC_STATS_INC_HISTOGRAM(
    545         GRPC_STATS_HISTOGRAM_HTTP2_SEND_INITIAL_METADATA_PER_WRITE, value);
    546     return;
    547   }
    548   union {
    549     double dbl;
    550     uint64_t uint;
    551   } _val, _bkt;
    552   _val.dbl = value;
    553   if (_val.uint < 4637863191261478912ull) {
    554     int bucket =
    555         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    556     _bkt.dbl = grpc_stats_table_6[bucket];
    557     bucket -= (_val.uint < _bkt.uint);
    558     GRPC_STATS_INC_HISTOGRAM(
    559         GRPC_STATS_HISTOGRAM_HTTP2_SEND_INITIAL_METADATA_PER_WRITE, bucket);
    560     return;
    561   }
    562   GRPC_STATS_INC_HISTOGRAM(
    563       GRPC_STATS_HISTOGRAM_HTTP2_SEND_INITIAL_METADATA_PER_WRITE,
    564       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    565 }
    566 void grpc_stats_inc_http2_send_message_per_write(int value) {
    567   value = GPR_CLAMP(value, 0, 1024);
    568   if (value < 13) {
    569     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_PER_WRITE,
    570                              value);
    571     return;
    572   }
    573   union {
    574     double dbl;
    575     uint64_t uint;
    576   } _val, _bkt;
    577   _val.dbl = value;
    578   if (_val.uint < 4637863191261478912ull) {
    579     int bucket =
    580         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    581     _bkt.dbl = grpc_stats_table_6[bucket];
    582     bucket -= (_val.uint < _bkt.uint);
    583     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_PER_WRITE,
    584                              bucket);
    585     return;
    586   }
    587   GRPC_STATS_INC_HISTOGRAM(
    588       GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_PER_WRITE,
    589       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    590 }
    591 void grpc_stats_inc_http2_send_trailing_metadata_per_write(int value) {
    592   value = GPR_CLAMP(value, 0, 1024);
    593   if (value < 13) {
    594     GRPC_STATS_INC_HISTOGRAM(
    595         GRPC_STATS_HISTOGRAM_HTTP2_SEND_TRAILING_METADATA_PER_WRITE, value);
    596     return;
    597   }
    598   union {
    599     double dbl;
    600     uint64_t uint;
    601   } _val, _bkt;
    602   _val.dbl = value;
    603   if (_val.uint < 4637863191261478912ull) {
    604     int bucket =
    605         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    606     _bkt.dbl = grpc_stats_table_6[bucket];
    607     bucket -= (_val.uint < _bkt.uint);
    608     GRPC_STATS_INC_HISTOGRAM(
    609         GRPC_STATS_HISTOGRAM_HTTP2_SEND_TRAILING_METADATA_PER_WRITE, bucket);
    610     return;
    611   }
    612   GRPC_STATS_INC_HISTOGRAM(
    613       GRPC_STATS_HISTOGRAM_HTTP2_SEND_TRAILING_METADATA_PER_WRITE,
    614       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    615 }
    616 void grpc_stats_inc_http2_send_flowctl_per_write(int value) {
    617   value = GPR_CLAMP(value, 0, 1024);
    618   if (value < 13) {
    619     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_FLOWCTL_PER_WRITE,
    620                              value);
    621     return;
    622   }
    623   union {
    624     double dbl;
    625     uint64_t uint;
    626   } _val, _bkt;
    627   _val.dbl = value;
    628   if (_val.uint < 4637863191261478912ull) {
    629     int bucket =
    630         grpc_stats_table_7[((_val.uint - 4623507967449235456ull) >> 48)] + 13;
    631     _bkt.dbl = grpc_stats_table_6[bucket];
    632     bucket -= (_val.uint < _bkt.uint);
    633     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_HTTP2_SEND_FLOWCTL_PER_WRITE,
    634                              bucket);
    635     return;
    636   }
    637   GRPC_STATS_INC_HISTOGRAM(
    638       GRPC_STATS_HISTOGRAM_HTTP2_SEND_FLOWCTL_PER_WRITE,
    639       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_6, 64));
    640 }
    641 void grpc_stats_inc_server_cqs_checked(int value) {
    642   value = GPR_CLAMP(value, 0, 64);
    643   if (value < 3) {
    644     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_SERVER_CQS_CHECKED, value);
    645     return;
    646   }
    647   union {
    648     double dbl;
    649     uint64_t uint;
    650   } _val, _bkt;
    651   _val.dbl = value;
    652   if (_val.uint < 4625196817309499392ull) {
    653     int bucket =
    654         grpc_stats_table_9[((_val.uint - 4613937818241073152ull) >> 51)] + 3;
    655     _bkt.dbl = grpc_stats_table_8[bucket];
    656     bucket -= (_val.uint < _bkt.uint);
    657     GRPC_STATS_INC_HISTOGRAM(GRPC_STATS_HISTOGRAM_SERVER_CQS_CHECKED, bucket);
    658     return;
    659   }
    660   GRPC_STATS_INC_HISTOGRAM(
    661       GRPC_STATS_HISTOGRAM_SERVER_CQS_CHECKED,
    662       grpc_stats_histo_find_bucket_slow(value, grpc_stats_table_8, 8));
    663 }
    664 const int grpc_stats_histo_buckets[13] = {64, 128, 64, 64, 64, 64, 64,
    665                                           64, 64,  64, 64, 64, 8};
    666 const int grpc_stats_histo_start[13] = {0,   64,  192, 256, 320, 384, 448,
    667                                         512, 576, 640, 704, 768, 832};
    668 const int* const grpc_stats_histo_bucket_boundaries[13] = {
    669     grpc_stats_table_0, grpc_stats_table_2, grpc_stats_table_4,
    670     grpc_stats_table_6, grpc_stats_table_4, grpc_stats_table_4,
    671     grpc_stats_table_6, grpc_stats_table_4, grpc_stats_table_6,
    672     grpc_stats_table_6, grpc_stats_table_6, grpc_stats_table_6,
    673     grpc_stats_table_8};
    674 void (*const grpc_stats_inc_histogram[13])(int x) = {
    675     grpc_stats_inc_call_initial_size,
    676     grpc_stats_inc_poll_events_returned,
    677     grpc_stats_inc_tcp_write_size,
    678     grpc_stats_inc_tcp_write_iov_size,
    679     grpc_stats_inc_tcp_read_size,
    680     grpc_stats_inc_tcp_read_offer,
    681     grpc_stats_inc_tcp_read_offer_iov_size,
    682     grpc_stats_inc_http2_send_message_size,
    683     grpc_stats_inc_http2_send_initial_metadata_per_write,
    684     grpc_stats_inc_http2_send_message_per_write,
    685     grpc_stats_inc_http2_send_trailing_metadata_per_write,
    686     grpc_stats_inc_http2_send_flowctl_per_write,
    687     grpc_stats_inc_server_cqs_checked};
    688