grpc 1.56.2 → 1.58.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (696) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +549 -292
  3. data/include/grpc/event_engine/event_engine.h +22 -33
  4. data/include/grpc/event_engine/memory_allocator.h +2 -2
  5. data/include/grpc/impl/channel_arg_names.h +371 -0
  6. data/include/grpc/impl/grpc_types.h +1 -350
  7. data/include/grpc/module.modulemap +1 -0
  8. data/include/grpc/support/port_platform.h +29 -23
  9. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +2 -1
  11. data/src/core/ext/filters/client_channel/client_channel.cc +51 -11
  12. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  13. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -1
  14. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +27 -53
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +23 -9
  16. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -35
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +79 -132
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +2 -1
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +4 -3
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +42 -17
  22. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +3 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +22 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +4 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +2 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +97 -71
  27. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -16
  28. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +152 -101
  29. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +20 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +13 -34
  31. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +6 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +21 -79
  33. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +32 -20
  35. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +12 -4
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -42
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -67
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +8 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +31 -74
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +7 -51
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +22 -90
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +16 -50
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -74
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -5
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +102 -11
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +9 -4
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +6 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +107 -70
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +10 -4
  52. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -0
  53. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +25 -13
  54. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +367 -312
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +17 -1
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +39 -2498
  57. data/src/core/ext/filters/client_channel/retry_filter.h +92 -1
  58. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +2052 -0
  59. data/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.h +442 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +39 -59
  62. data/src/core/ext/filters/client_channel/subchannel.cc +9 -5
  63. data/src/core/ext/filters/client_channel/subchannel.h +11 -5
  64. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -0
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +1 -1
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  67. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  68. data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -0
  69. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -0
  71. data/src/core/ext/filters/rbac/rbac_filter.cc +40 -111
  72. data/src/core/ext/filters/rbac/rbac_filter.h +12 -30
  73. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +4 -7
  74. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +162 -86
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -6
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -0
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -16
  78. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +463 -519
  79. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +6569 -174
  80. data/src/core/ext/transport/chttp2/transport/decode_huff.h +2278 -441
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -20
  82. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -3
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +72 -12
  84. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -2
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -2
  87. data/src/core/ext/transport/chttp2/transport/internal.h +38 -61
  88. data/src/core/ext/transport/chttp2/transport/parsing.cc +31 -10
  89. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +80 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +55 -0
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +98 -0
  92. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +73 -0
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +82 -91
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -0
  95. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -6
  96. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +143 -0
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -9
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +0 -39
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +13 -8
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +35 -6
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +17 -13
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +85 -20
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +26 -7
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +45 -3
  105. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +4 -3
  106. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +21 -0
  107. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +30 -6
  108. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +180 -0
  109. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.c +558 -0
  110. data/src/core/ext/upb-generated/envoy/data/accesslog/v3/accesslog.upb.h +2710 -0
  111. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +30 -11
  112. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +53 -24
  113. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +30 -5
  114. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +110 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +41 -15
  116. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +150 -27
  117. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.c +47 -0
  119. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +93 -0
  120. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +88 -76
  121. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -0
  122. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +11 -12
  123. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +0 -5
  124. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +162 -160
  125. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +129 -118
  126. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +141 -135
  127. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +19 -12
  128. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +38 -30
  129. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
  130. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.c +402 -0
  131. data/src/core/ext/upbdefs-generated/envoy/data/accesslog/v3/accesslog.upbdefs.h +111 -0
  132. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +80 -74
  133. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +63 -47
  134. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -0
  135. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +315 -293
  136. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  137. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -29
  138. data/src/core/ext/xds/xds_bootstrap_grpc.cc +33 -30
  139. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -13
  140. data/src/core/ext/xds/xds_client_grpc.cc +12 -6
  141. data/src/core/ext/xds/xds_client_grpc.h +16 -2
  142. data/src/core/ext/xds/xds_client_stats.h +10 -0
  143. data/src/core/ext/xds/xds_cluster.cc +26 -16
  144. data/src/core/ext/xds/xds_endpoint.cc +4 -7
  145. data/src/core/ext/xds/xds_health_status.cc +0 -17
  146. data/src/core/ext/xds/xds_health_status.h +5 -25
  147. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -2
  148. data/src/core/ext/xds/xds_http_fault_filter.h +1 -2
  149. data/src/core/ext/xds/xds_http_filters.h +2 -4
  150. data/src/core/ext/xds/xds_http_rbac_filter.cc +3 -8
  151. data/src/core/ext/xds/xds_http_rbac_filter.h +1 -2
  152. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -2
  153. data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -2
  154. data/src/core/ext/xds/xds_lb_policy_registry.cc +36 -0
  155. data/src/core/ext/xds/xds_route_config.cc +4 -0
  156. data/src/core/ext/xds/xds_routing.cc +2 -2
  157. data/src/core/ext/xds/xds_transport_grpc.cc +2 -3
  158. data/src/core/lib/address_utils/parse_address.cc +63 -1
  159. data/src/core/lib/address_utils/parse_address.h +8 -0
  160. data/src/core/lib/address_utils/sockaddr_utils.cc +46 -1
  161. data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
  162. data/src/core/lib/avl/avl.h +10 -173
  163. data/src/core/lib/channel/call_tracer.cc +289 -0
  164. data/src/core/lib/channel/call_tracer.h +35 -0
  165. data/src/core/lib/channel/channel_args.cc +98 -82
  166. data/src/core/lib/channel/channel_args.h +32 -17
  167. data/src/core/lib/channel/connected_channel.cc +4 -2
  168. data/src/core/lib/channel/promise_based_filter.cc +4 -1
  169. data/src/core/lib/channel/promise_based_filter.h +1 -0
  170. data/src/core/lib/compression/compression_internal.cc +8 -4
  171. data/src/core/lib/debug/stats_data.cc +93 -21
  172. data/src/core/lib/debug/stats_data.h +41 -0
  173. data/src/core/lib/debug/trace.cc +1 -4
  174. data/src/core/lib/event_engine/ares_resolver.cc +712 -0
  175. data/src/core/lib/event_engine/ares_resolver.h +150 -0
  176. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +10 -3
  177. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
  178. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  179. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +229 -0
  180. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +117 -0
  181. data/src/core/lib/event_engine/event_engine.cc +0 -12
  182. data/src/core/lib/event_engine/forkable.cc +62 -43
  183. data/src/core/lib/event_engine/forkable.h +15 -0
  184. data/src/core/lib/event_engine/grpc_polled_fd.h +73 -0
  185. data/src/core/lib/event_engine/handle_containers.h +0 -4
  186. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +4 -6
  187. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +29 -9
  188. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +10 -1
  189. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +197 -0
  190. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -14
  191. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -1
  192. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +49 -2
  193. data/src/core/lib/event_engine/posix_engine/posix_engine.h +20 -13
  194. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +37 -27
  195. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +2 -0
  196. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +4 -2
  197. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +43 -2
  198. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +6 -0
  199. data/src/core/lib/event_engine/posix_engine/timer.h +10 -37
  200. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -0
  201. data/src/core/lib/event_engine/tcp_socket_utils.cc +67 -7
  202. data/src/core/lib/event_engine/tcp_socket_utils.h +3 -0
  203. data/src/core/lib/event_engine/thread_pool/thread_count.cc +58 -0
  204. data/src/core/lib/event_engine/thread_pool/thread_count.h +161 -0
  205. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +7 -0
  206. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +122 -94
  207. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +22 -48
  208. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +12 -21
  209. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +8 -12
  210. data/src/core/lib/event_engine/windows/windows_endpoint.cc +58 -58
  211. data/src/core/lib/event_engine/windows/windows_endpoint.h +15 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.cc +2 -1
  213. data/src/core/lib/event_engine/windows/windows_engine.h +8 -12
  214. data/src/core/lib/experiments/config.cc +74 -22
  215. data/src/core/lib/experiments/config.h +20 -8
  216. data/src/core/lib/experiments/experiments.cc +206 -91
  217. data/src/core/lib/experiments/experiments.h +71 -14
  218. data/src/core/lib/gprpp/dual_ref_counted.h +9 -9
  219. data/src/core/lib/gprpp/fork.cc +8 -9
  220. data/src/core/lib/gprpp/fork.h +6 -5
  221. data/src/core/lib/gprpp/if_list.h +4530 -0
  222. data/src/core/lib/gprpp/orphanable.h +3 -3
  223. data/src/core/lib/gprpp/ref_counted.h +9 -7
  224. data/src/core/lib/gprpp/ref_counted_string.cc +44 -0
  225. data/src/core/lib/gprpp/ref_counted_string.h +146 -0
  226. data/src/core/lib/gprpp/sorted_pack.h +3 -12
  227. data/src/core/lib/gprpp/status_helper.h +16 -15
  228. data/src/core/lib/gprpp/time.h +13 -1
  229. data/src/core/lib/gprpp/type_list.h +32 -0
  230. data/src/core/lib/gprpp/work_serializer.cc +36 -0
  231. data/src/core/lib/gprpp/work_serializer.h +5 -0
  232. data/src/core/lib/http/httpcli.h +6 -9
  233. data/src/core/lib/http/httpcli_security_connector.cc +1 -0
  234. data/src/core/lib/iomgr/buffer_list.cc +2 -0
  235. data/src/core/lib/iomgr/error.cc +32 -2
  236. data/src/core/lib/iomgr/error.h +9 -10
  237. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -7
  238. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  239. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +7 -22
  240. data/src/core/lib/iomgr/exec_ctx.h +11 -0
  241. data/src/core/lib/iomgr/pollset.h +4 -5
  242. data/src/core/lib/iomgr/port.h +10 -0
  243. data/src/core/lib/iomgr/resolve_address.cc +13 -1
  244. data/src/core/lib/iomgr/resolve_address.h +17 -3
  245. data/src/core/lib/iomgr/sockaddr_posix.h +7 -0
  246. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -0
  247. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -0
  248. data/src/core/lib/iomgr/socket_utils_posix.h +6 -0
  249. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -1
  250. data/src/core/lib/iomgr/tcp_posix.cc +24 -7
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -2
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -2
  253. data/src/core/lib/iomgr/tcp_windows.cc +1 -3
  254. data/src/core/lib/iomgr/vsock.cc +59 -0
  255. data/src/core/lib/iomgr/vsock.h +38 -0
  256. data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -6
  257. data/src/core/lib/load_balancing/delegating_helper.h +115 -0
  258. data/src/core/lib/load_balancing/lb_policy.h +20 -0
  259. data/src/core/lib/load_balancing/subchannel_interface.h +6 -0
  260. data/src/core/lib/promise/detail/basic_seq.h +1 -372
  261. data/src/core/lib/promise/detail/seq_state.h +2076 -0
  262. data/src/core/lib/promise/party.h +1 -1
  263. data/src/core/lib/promise/seq.h +19 -2
  264. data/src/core/lib/promise/sleep.h +5 -10
  265. data/src/core/lib/promise/try_seq.h +34 -2
  266. data/src/core/lib/resolver/resolver_factory.h +3 -2
  267. data/src/core/lib/resolver/server_address.cc +9 -94
  268. data/src/core/lib/resolver/server_address.h +10 -64
  269. data/src/core/lib/resource_quota/api.cc +1 -0
  270. data/src/core/lib/resource_quota/arena.cc +2 -0
  271. data/src/core/lib/resource_quota/arena.h +42 -8
  272. data/src/core/lib/resource_quota/memory_quota.cc +0 -1
  273. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  274. data/src/core/lib/resource_quota/resource_quota.h +1 -0
  275. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  276. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  277. data/src/core/lib/security/credentials/channel_creds_registry.h +51 -27
  278. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +169 -9
  279. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  280. data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -1
  281. data/src/core/lib/security/credentials/external/aws_request_signer.cc +8 -0
  282. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -1
  283. data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -0
  284. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -38
  285. data/src/core/lib/security/credentials/fake/fake_credentials.h +28 -0
  286. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  287. data/src/core/lib/security/credentials/jwt/json_token.cc +17 -0
  288. data/src/core/lib/security/credentials/jwt/json_token.h +4 -0
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +42 -0
  290. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -0
  291. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -0
  292. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  293. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -1
  294. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -0
  295. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -0
  296. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
  297. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -0
  298. data/src/core/lib/security/transport/client_auth_filter.cc +8 -5
  299. data/src/core/lib/security/transport/security_handshaker.cc +1 -0
  300. data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
  301. data/src/core/lib/service_config/service_config_call_data.h +5 -0
  302. data/src/core/lib/slice/slice.h +16 -0
  303. data/src/core/lib/surface/call.cc +63 -37
  304. data/src/core/lib/surface/channel.cc +1 -0
  305. data/src/core/lib/surface/completion_queue.cc +10 -0
  306. data/src/core/lib/surface/init.cc +1 -0
  307. data/src/core/lib/surface/server.cc +67 -64
  308. data/src/core/lib/surface/server.h +1 -15
  309. data/src/core/lib/surface/version.cc +2 -2
  310. data/src/core/lib/transport/metadata_batch.cc +7 -7
  311. data/src/core/lib/transport/metadata_batch.h +86 -48
  312. data/src/core/lib/transport/parsed_metadata.h +34 -20
  313. data/src/core/lib/transport/simple_slice_based_metadata.h +9 -2
  314. data/src/core/tsi/alts/crypt/aes_gcm.cc +27 -2
  315. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +4 -6
  316. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -2
  317. data/src/core/tsi/ssl_transport_security.cc +39 -7
  318. data/src/ruby/bin/math_pb.rb +24 -18
  319. data/src/ruby/ext/grpc/extconf.rb +19 -18
  320. data/src/ruby/ext/grpc/rb_call.c +62 -39
  321. data/src/ruby/ext/grpc/rb_call_credentials.c +0 -1
  322. data/src/ruby/ext/grpc/rb_channel.c +109 -84
  323. data/src/ruby/ext/grpc/rb_channel.h +1 -0
  324. data/src/ruby/ext/grpc/rb_channel_args.c +16 -2
  325. data/src/ruby/ext/grpc/rb_channel_args.h +4 -0
  326. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  327. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  328. data/src/ruby/ext/grpc/rb_event_thread.c +22 -6
  329. data/src/ruby/ext/grpc/rb_event_thread.h +1 -0
  330. data/src/ruby/ext/grpc/rb_grpc.c +192 -30
  331. data/src/ruby/ext/grpc/rb_grpc.h +8 -2
  332. data/src/ruby/ext/grpc/rb_server.c +62 -45
  333. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  334. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  335. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  336. data/src/ruby/lib/grpc/generic/active_call.rb +9 -14
  337. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  338. data/src/ruby/lib/grpc/version.rb +1 -1
  339. data/src/ruby/pb/grpc/health/v1/health_pb.rb +24 -13
  340. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +24 -3
  341. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +25 -111
  342. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +25 -2
  343. data/src/ruby/pb/test/client.rb +16 -0
  344. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -3
  345. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -2
  346. data/third_party/abseil-cpp/absl/base/attributes.h +58 -5
  347. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  348. data/third_party/abseil-cpp/absl/base/casts.h +8 -8
  349. data/third_party/abseil-cpp/absl/base/config.h +89 -106
  350. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +26 -1
  351. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -2
  352. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +50 -39
  353. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +2 -1
  354. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +17 -18
  355. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +32 -3
  356. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +24 -4
  357. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +31 -73
  358. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -8
  359. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -11
  360. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +23 -32
  361. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +2 -3
  362. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  363. data/third_party/abseil-cpp/absl/base/policy_checks.h +3 -3
  364. data/third_party/abseil-cpp/absl/base/prefetch.h +198 -0
  365. data/third_party/abseil-cpp/absl/container/fixed_array.h +54 -29
  366. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -1
  367. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +167 -79
  369. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +3 -21
  371. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +46 -0
  373. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -0
  374. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +85 -26
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -18
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +70 -29
  377. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +437 -236
  378. data/third_party/abseil-cpp/absl/crc/crc32c.h +8 -1
  379. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +14 -8
  380. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -35
  381. data/third_party/abseil-cpp/absl/crc/internal/crc.h +2 -10
  382. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +1 -1
  383. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +1 -1
  384. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +4 -4
  385. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +8 -10
  386. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +17 -19
  387. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +8 -8
  388. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +2 -1
  389. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +59 -23
  390. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +1 -1
  391. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +1 -1
  392. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +1 -1
  393. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +43 -19
  394. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -0
  395. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +1 -1
  396. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +1 -1
  397. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -2
  398. data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -15
  399. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +1 -1
  400. data/third_party/abseil-cpp/absl/flags/marshalling.cc +43 -2
  401. data/third_party/abseil-cpp/absl/flags/marshalling.h +5 -0
  402. data/third_party/abseil-cpp/absl/functional/any_invocable.h +9 -1
  403. data/third_party/abseil-cpp/absl/functional/bind_front.h +1 -1
  404. data/third_party/abseil-cpp/absl/functional/function_ref.h +3 -3
  405. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +37 -24
  406. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +19 -9
  407. data/third_party/abseil-cpp/absl/hash/hash.h +7 -4
  408. data/third_party/abseil-cpp/absl/hash/internal/hash.h +38 -15
  409. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +6 -0
  410. data/third_party/abseil-cpp/absl/meta/type_traits.h +48 -373
  411. data/third_party/abseil-cpp/absl/numeric/bits.h +4 -4
  412. data/third_party/abseil-cpp/absl/numeric/int128.cc +20 -8
  413. data/third_party/abseil-cpp/absl/numeric/int128.h +36 -39
  414. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -3
  415. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +47 -30
  416. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -3
  417. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  418. data/third_party/abseil-cpp/absl/random/internal/platform.h +1 -1
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +4 -0
  420. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +1 -1
  421. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +1 -1
  422. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +1 -1
  423. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +4 -0
  424. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +12 -24
  425. data/third_party/abseil-cpp/absl/status/status.cc +11 -7
  426. data/third_party/abseil-cpp/absl/status/status.h +11 -2
  427. data/third_party/abseil-cpp/absl/status/statusor.h +22 -8
  428. data/third_party/abseil-cpp/absl/strings/ascii.cc +54 -6
  429. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -4
  430. data/third_party/abseil-cpp/absl/strings/charconv.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/cord.cc +1 -2
  432. data/third_party/abseil-cpp/absl/strings/cord.h +32 -5
  433. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +23 -1
  434. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +18 -0
  435. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +2 -5
  436. data/third_party/abseil-cpp/absl/strings/escaping.cc +10 -32
  437. data/third_party/abseil-cpp/absl/strings/escaping.h +1 -1
  438. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -4
  439. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -1
  441. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +15 -13
  442. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +13 -4
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +8 -0
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +5 -3
  445. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +4 -7
  446. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +8 -0
  447. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +2 -2
  448. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +46 -20
  449. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +1 -34
  450. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +2 -1
  451. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +23 -0
  452. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +1 -0
  453. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +2 -77
  454. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +4 -112
  455. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +1 -1
  456. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +10 -31
  457. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -8
  458. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +5 -20
  459. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +1 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +1 -1
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +9 -9
  462. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +56 -6
  463. data/third_party/abseil-cpp/absl/strings/match.cc +87 -0
  464. data/third_party/abseil-cpp/absl/strings/match.h +19 -0
  465. data/third_party/abseil-cpp/absl/strings/numbers.cc +154 -122
  466. data/third_party/abseil-cpp/absl/strings/numbers.h +1 -6
  467. data/third_party/abseil-cpp/absl/strings/str_cat.cc +7 -50
  468. data/third_party/abseil-cpp/absl/strings/str_cat.h +83 -15
  469. data/third_party/abseil-cpp/absl/strings/str_format.h +6 -3
  470. data/third_party/abseil-cpp/absl/strings/str_split.cc +9 -6
  471. data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -0
  473. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +63 -43
  474. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +111 -0
  475. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  476. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -7
  477. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +225 -0
  478. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +122 -114
  479. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +12 -8
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +10 -1
  481. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +167 -0
  482. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  483. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +122 -0
  484. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  485. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +91 -0
  486. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  487. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +19 -113
  488. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +42 -0
  489. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  490. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +151 -0
  491. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +70 -0
  492. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +407 -411
  493. data/third_party/abseil-cpp/absl/synchronization/mutex.h +152 -118
  494. data/third_party/abseil-cpp/absl/time/clock.cc +6 -7
  495. data/third_party/abseil-cpp/absl/time/duration.cc +24 -26
  496. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -0
  497. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  498. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +3 -3
  499. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +8 -6
  500. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +6 -3
  501. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +4 -2
  502. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +4 -0
  503. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +322 -295
  504. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +8 -17
  505. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +51 -33
  506. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +7 -2
  507. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +128 -2
  508. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +1 -1
  509. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -1
  510. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +34 -34
  511. data/third_party/abseil-cpp/absl/time/time.cc +9 -2
  512. data/third_party/abseil-cpp/absl/time/time.h +115 -15
  513. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -52
  514. data/third_party/abseil-cpp/absl/types/internal/span.h +2 -2
  515. data/third_party/abseil-cpp/absl/types/internal/variant.h +2 -2
  516. data/third_party/abseil-cpp/absl/types/optional.h +15 -13
  517. data/third_party/abseil-cpp/absl/types/span.h +1 -2
  518. data/third_party/boringssl-with-bazel/err_data.c +554 -553
  519. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +7 -3
  520. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +7 -7
  521. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +5 -5
  522. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +34 -1
  523. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +11 -4
  524. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -3
  525. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +7 -8
  526. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +7 -7
  527. data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +92 -0
  528. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +5 -49
  529. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +18 -13
  530. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +16 -6
  531. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +4 -4
  532. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +11 -2
  533. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +1 -1
  534. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +19 -1
  535. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +8 -1
  536. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +31 -192
  537. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +3 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +8 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +3 -2
  540. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.c +0 -1
  541. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.c +0 -2
  542. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +0 -1
  543. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.c +93 -0
  544. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +1 -1
  545. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +0 -1
  546. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +0 -2
  547. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +49 -46
  548. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_openbsd.c → curve25519/curve25519_64_adx.c} +3 -16
  549. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +2809 -7417
  550. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +27 -5
  551. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +4 -0
  552. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +5 -0
  553. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +20 -0
  554. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +110 -72
  555. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +4 -3
  556. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +24 -28
  557. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +4 -6
  558. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +23 -21
  559. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +35 -12
  560. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +2 -4
  561. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +3 -7
  562. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +3 -3
  563. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +7 -6
  564. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +34 -72
  565. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -1
  566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +12 -5
  567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +5 -6
  568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +12 -6
  569. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +17 -18
  570. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +51 -15
  571. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +7 -7
  572. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +5 -6
  573. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +37 -8
  574. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +38 -19
  575. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +9 -0
  576. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  577. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +180 -404
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +3 -3
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +24 -57
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +17 -13
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +33 -71
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +18 -17
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -7
  584. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +15 -18
  585. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +9 -11
  586. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +24 -24
  587. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +11 -27
  588. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +8 -8
  589. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +4 -4
  590. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +9 -3
  591. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/hkdf.c +1 -1
  592. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +40 -26
  593. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +21 -7
  594. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +38 -19
  595. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +2 -29
  596. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +55 -0
  597. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +33 -52
  598. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +42 -24
  599. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +4 -7
  600. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +7 -0
  601. data/third_party/boringssl-with-bazel/src/crypto/internal.h +211 -100
  602. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +5 -4
  603. data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -8
  604. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +25 -46
  605. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +3 -3
  606. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +3 -3
  607. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +7 -7
  608. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +8 -5
  609. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  610. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +7 -6
  611. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +6 -12
  612. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +52 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fuchsia.c → ios.c} +8 -8
  614. data/third_party/boringssl-with-bazel/src/crypto/{refcount_no_threads.c → rand_extra/trusty.c} +15 -19
  615. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +41 -19
  616. data/third_party/boringssl-with-bazel/src/crypto/{refcount_c11.c → refcount.c} +11 -17
  617. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +152 -72
  618. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +0 -8
  619. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +6 -35
  620. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +5 -26
  621. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +14 -18
  622. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +54 -143
  623. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +8 -19
  624. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +0 -3
  625. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +1 -1
  626. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +1 -1
  627. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +1 -3
  628. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +2 -4
  629. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +2 -2
  630. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +1 -1
  631. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +8 -12
  632. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +19 -20
  633. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -15
  634. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -5
  635. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -1
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +7 -7
  637. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +2 -3
  638. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -3
  639. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +4 -6
  640. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +4 -119
  641. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +207 -0
  642. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +5 -0
  643. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -116
  644. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +11 -1
  645. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +0 -2
  646. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +6 -0
  647. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +5 -1
  648. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -1
  649. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +0 -21
  650. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +28 -11
  651. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +19 -6
  652. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +11 -7
  653. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +6 -2
  654. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +13 -14
  655. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +0 -61
  656. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +22 -20
  657. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +131 -81
  658. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +236 -213
  659. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +201 -0
  660. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -29
  661. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +4 -8
  662. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +3 -2
  663. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +9 -65
  664. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +20 -20
  665. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  666. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -11
  667. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +26 -20
  668. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +4 -4
  669. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +37 -30
  670. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +127 -26
  671. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -3
  672. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +691 -0
  673. data/third_party/upb/upb/collections/map.c +3 -3
  674. metadata +62 -39
  675. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +0 -42
  676. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +0 -64
  677. data/src/core/ext/transport/chttp2/transport/stream_map.cc +0 -177
  678. data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -68
  679. data/src/core/lib/promise/detail/basic_join.h +0 -197
  680. data/src/core/lib/promise/detail/switch.h +0 -1455
  681. data/src/core/lib/promise/try_join.h +0 -82
  682. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -403
  683. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +0 -62
  684. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm.c +0 -38
  685. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +0 -89
  686. data/third_party/re2/util/benchmark.h +0 -156
  687. data/third_party/re2/util/flags.h +0 -26
  688. data/third_party/re2/util/malloc_counter.h +0 -19
  689. data/third_party/re2/util/pcre.cc +0 -1025
  690. data/third_party/re2/util/pcre.h +0 -681
  691. data/third_party/re2/util/test.h +0 -50
  692. data/third_party/upb/upb/mini_table.h +0 -36
  693. data/third_party/zlib/gzclose.c +0 -25
  694. data/third_party/zlib/gzlib.c +0 -639
  695. data/third_party/zlib/gzread.c +0 -650
  696. data/third_party/zlib/gzwrite.c +0 -677
@@ -31,7 +31,9 @@
31
31
  #include <utility>
32
32
 
33
33
  #include "absl/base/attributes.h"
34
+ #include "absl/base/internal/endian.h"
34
35
  #include "absl/base/internal/raw_logging.h"
36
+ #include "absl/base/optimization.h"
35
37
  #include "absl/numeric/bits.h"
36
38
  #include "absl/strings/ascii.h"
37
39
  #include "absl/strings/charconv.h"
@@ -136,82 +138,132 @@ bool SimpleAtob(absl::string_view str, bool* out) {
136
138
 
137
139
  namespace {
138
140
 
139
- // Used to optimize printing a decimal number's final digit.
140
- const char one_ASCII_final_digits[10][2] {
141
- {'0', 0}, {'1', 0}, {'2', 0}, {'3', 0}, {'4', 0},
142
- {'5', 0}, {'6', 0}, {'7', 0}, {'8', 0}, {'9', 0},
143
- };
141
+ // Various routines to encode integers to strings.
142
+
143
+ // We split data encodings into a group of 2 digits, 4 digits, 8 digits as
144
+ // it's easier to combine powers of two into scalar arithmetic.
145
+
146
+ // Previous implementation used a lookup table of 200 bytes for every 2 bytes
147
+ // and it was memory bound, any L1 cache miss would result in a much slower
148
+ // result. When benchmarking with a cache eviction rate of several percent,
149
+ // this implementation proved to be better.
150
+
151
+ // These constants represent '00', '0000' and '00000000' as ascii strings in
152
+ // integers. We can add these numbers if we encode to bytes from 0 to 9. as
153
+ // 'i' = '0' + i for 0 <= i <= 9.
154
+ constexpr uint32_t kTwoZeroBytes = 0x0101 * '0';
155
+ constexpr uint64_t kFourZeroBytes = 0x01010101 * '0';
156
+ constexpr uint64_t kEightZeroBytes = 0x0101010101010101ull * '0';
157
+
158
+ // * 103 / 1024 is a division by 10 for values from 0 to 99. It's also a
159
+ // division of a structure [k takes 2 bytes][m takes 2 bytes], then * 103 / 1024
160
+ // will be [k / 10][m / 10]. It allows parallel division.
161
+ constexpr uint64_t kDivisionBy10Mul = 103u;
162
+ constexpr uint64_t kDivisionBy10Div = 1 << 10;
163
+
164
+ // * 10486 / 1048576 is a division by 100 for values from 0 to 9999.
165
+ constexpr uint64_t kDivisionBy100Mul = 10486u;
166
+ constexpr uint64_t kDivisionBy100Div = 1 << 20;
167
+
168
+ // Encode functions write the ASCII output of input `n` to `out_str`.
169
+ inline char* EncodeHundred(uint32_t n, char* out_str) {
170
+ int num_digits = static_cast<int>(n - 10) >> 8;
171
+ uint32_t base = kTwoZeroBytes;
172
+ uint32_t div10 = (n * kDivisionBy10Mul) / kDivisionBy10Div;
173
+ uint32_t mod10 = n - 10u * div10;
174
+ base += div10 + (mod10 << 8);
175
+ base >>= num_digits & 8;
176
+ little_endian::Store16(out_str, static_cast<uint16_t>(base));
177
+ return out_str + 2 + num_digits;
178
+ }
144
179
 
145
- } // namespace
180
+ inline char* EncodeTenThousand(uint32_t n, char* out_str) {
181
+ // We split lower 2 digits and upper 2 digits of n into 2 byte consecutive
182
+ // blocks. 123 -> [\0\1][\0\23]. We divide by 10 both blocks
183
+ // (it's 1 division + zeroing upper bits), and compute modulo 10 as well "in
184
+ // parallel". Then we combine both results to have both ASCII digits,
185
+ // strip trailing zeros, add ASCII '0000' and return.
186
+ uint32_t div100 = (n * kDivisionBy100Mul) / kDivisionBy100Div;
187
+ uint32_t mod100 = n - 100ull * div100;
188
+ uint32_t hundreds = (mod100 << 16) + div100;
189
+ uint32_t tens = (hundreds * kDivisionBy10Mul) / kDivisionBy10Div;
190
+ tens &= (0xFull << 16) | 0xFull;
191
+ tens += (hundreds - 10ull * tens) << 8;
192
+ ABSL_ASSUME(tens != 0);
193
+ // The result can contain trailing zero bits, we need to strip them to a first
194
+ // significant byte in a final representation. For example, for n = 123, we
195
+ // have tens to have representation \0\1\2\3. We do `& -8` to round
196
+ // to a multiple to 8 to strip zero bytes, not all zero bits.
197
+ // countr_zero to help.
198
+ // 0 minus 8 to make MSVC happy.
199
+ uint32_t zeroes = static_cast<uint32_t>(absl::countr_zero(tens)) & (0 - 8ull);
200
+ tens += kFourZeroBytes;
201
+ tens >>= zeroes;
202
+ little_endian::Store32(out_str, tens);
203
+ return out_str + sizeof(tens) - zeroes / 8;
204
+ }
146
205
 
147
- char* numbers_internal::FastIntToBuffer(uint32_t i, char* buffer) {
148
- uint32_t digits;
149
- // The idea of this implementation is to trim the number of divides to as few
150
- // as possible, and also reducing memory stores and branches, by going in
151
- // steps of two digits at a time rather than one whenever possible.
152
- // The huge-number case is first, in the hopes that the compiler will output
153
- // that case in one branch-free block of code, and only output conditional
154
- // branches into it from below.
155
- if (i >= 1000000000) { // >= 1,000,000,000
156
- digits = i / 100000000; // 100,000,000
157
- i -= digits * 100000000;
158
- PutTwoDigits(digits, buffer);
159
- buffer += 2;
160
- lt100_000_000:
161
- digits = i / 1000000; // 1,000,000
162
- i -= digits * 1000000;
163
- PutTwoDigits(digits, buffer);
164
- buffer += 2;
165
- lt1_000_000:
166
- digits = i / 10000; // 10,000
167
- i -= digits * 10000;
168
- PutTwoDigits(digits, buffer);
169
- buffer += 2;
170
- lt10_000:
171
- digits = i / 100;
172
- i -= digits * 100;
173
- PutTwoDigits(digits, buffer);
174
- buffer += 2;
175
- lt100:
176
- digits = i;
177
- PutTwoDigits(digits, buffer);
178
- buffer += 2;
179
- *buffer = 0;
180
- return buffer;
181
- }
206
+ // Prepare functions return an integer that should be written to out_str
207
+ // (but possibly include trailing zeros).
208
+ // For hi < 10000, lo < 10000 returns uint64_t as encoded in ASCII with
209
+ // possibly trailing zeroes of the number hi * 10000 + lo.
210
+ inline uint64_t PrepareTenThousands(uint64_t hi, uint64_t lo) {
211
+ uint64_t merged = hi | (lo << 32);
212
+ uint64_t div100 = ((merged * kDivisionBy100Mul) / kDivisionBy100Div) &
213
+ ((0x7Full << 32) | 0x7Full);
214
+ uint64_t mod100 = merged - 100ull * div100;
215
+ uint64_t hundreds = (mod100 << 16) + div100;
216
+ uint64_t tens = (hundreds * kDivisionBy10Mul) / kDivisionBy10Div;
217
+ tens &= (0xFull << 48) | (0xFull << 32) | (0xFull << 16) | 0xFull;
218
+ tens += (hundreds - 10ull * tens) << 8;
219
+ return tens;
220
+ }
182
221
 
183
- if (i < 100) {
184
- digits = i;
185
- if (i >= 10) goto lt100;
186
- memcpy(buffer, one_ASCII_final_digits[i], 2);
187
- return buffer + 1;
222
+ inline char* EncodeFullU32(uint32_t n, char* out_str) {
223
+ if (n < 100'000'000) {
224
+ uint64_t bottom = PrepareTenThousands(n / 10000, n % 10000);
225
+ ABSL_ASSUME(bottom != 0);
226
+ // 0 minus 8 to make MSVC happy.
227
+ uint32_t zeroes = static_cast<uint32_t>(absl::countr_zero(bottom))
228
+ & (0 - 8ull);
229
+ uint64_t bottom_res = bottom + kEightZeroBytes;
230
+ bottom_res >>= zeroes;
231
+ little_endian::Store64(out_str, bottom_res);
232
+ return out_str + sizeof(bottom) - zeroes / 8;
188
233
  }
189
- if (i < 10000) { // 10,000
190
- if (i >= 1000) goto lt10_000;
191
- digits = i / 100;
192
- i -= digits * 100;
193
- *buffer++ = '0' + static_cast<char>(digits);
194
- goto lt100;
195
- }
196
- if (i < 1000000) { // 1,000,000
197
- if (i >= 100000) goto lt1_000_000;
198
- digits = i / 10000; // 10,000
199
- i -= digits * 10000;
200
- *buffer++ = '0' + static_cast<char>(digits);
201
- goto lt10_000;
234
+ uint32_t top = n / 100'000'000;
235
+ n %= 100'000'000;
236
+ uint64_t bottom = PrepareTenThousands(n / 10000, n % 10000);
237
+ uint64_t bottom_res = bottom + kEightZeroBytes;
238
+ out_str = EncodeHundred(top, out_str);
239
+ little_endian::Store64(out_str, bottom_res);
240
+ return out_str + sizeof(bottom);
241
+ }
242
+
243
+ } // namespace
244
+
245
+ void numbers_internal::PutTwoDigits(uint32_t i, char* buf) {
246
+ assert(i < 100);
247
+ uint32_t base = kTwoZeroBytes;
248
+ uint32_t div10 = (i * kDivisionBy10Mul) / kDivisionBy10Div;
249
+ uint32_t mod10 = i - 10u * div10;
250
+ base += div10 + (mod10 << 8);
251
+ little_endian::Store16(buf, static_cast<uint16_t>(base));
252
+ }
253
+
254
+ char* numbers_internal::FastIntToBuffer(uint32_t n, char* out_str) {
255
+ if (n < 100) {
256
+ out_str = EncodeHundred(n, out_str);
257
+ goto set_last_zero;
202
258
  }
203
- if (i < 100000000) { // 100,000,000
204
- if (i >= 10000000) goto lt100_000_000;
205
- digits = i / 1000000; // 1,000,000
206
- i -= digits * 1000000;
207
- *buffer++ = '0' + static_cast<char>(digits);
208
- goto lt1_000_000;
259
+ if (n < 10000) {
260
+ out_str = EncodeTenThousand(n, out_str);
261
+ goto set_last_zero;
209
262
  }
210
- // we already know that i < 1,000,000,000
211
- digits = i / 100000000; // 100,000,000
212
- i -= digits * 100000000;
213
- *buffer++ = '0' + static_cast<char>(digits);
214
- goto lt100_000_000;
263
+ out_str = EncodeFullU32(n, out_str);
264
+ set_last_zero:
265
+ *out_str = '\0';
266
+ return out_str;
215
267
  }
216
268
 
217
269
  char* numbers_internal::FastIntToBuffer(int32_t i, char* buffer) {
@@ -219,7 +271,7 @@ char* numbers_internal::FastIntToBuffer(int32_t i, char* buffer) {
219
271
  if (i < 0) {
220
272
  *buffer++ = '-';
221
273
  // We need to do the negation in modular (i.e., "unsigned")
222
- // arithmetic; MSVC++ apprently warns for plain "-u", so
274
+ // arithmetic; MSVC++ apparently warns for plain "-u", so
223
275
  // we write the equivalent expression "0 - u" instead.
224
276
  u = 0 - u;
225
277
  }
@@ -230,41 +282,40 @@ char* numbers_internal::FastIntToBuffer(uint64_t i, char* buffer) {
230
282
  uint32_t u32 = static_cast<uint32_t>(i);
231
283
  if (u32 == i) return numbers_internal::FastIntToBuffer(u32, buffer);
232
284
 
233
- // Here we know i has at least 10 decimal digits.
234
- uint64_t top_1to11 = i / 1000000000;
235
- u32 = static_cast<uint32_t>(i - top_1to11 * 1000000000);
236
- uint32_t top_1to11_32 = static_cast<uint32_t>(top_1to11);
285
+ // 10**9 < 2**32 <= i < 10**10, we can do 2+8
286
+ uint64_t div08 = i / 100'000'000ull;
287
+ uint64_t mod08 = i % 100'000'000ull;
288
+ uint64_t mod_result =
289
+ PrepareTenThousands(mod08 / 10000, mod08 % 10000) + kEightZeroBytes;
290
+ if (i < 10'000'000'000ull) {
291
+ buffer = EncodeHundred(static_cast<uint32_t>(div08), buffer);
292
+ little_endian::Store64(buffer, mod_result);
293
+ buffer += 8;
294
+ goto set_last_zero;
295
+ }
237
296
 
238
- if (top_1to11_32 == top_1to11) {
239
- buffer = numbers_internal::FastIntToBuffer(top_1to11_32, buffer);
297
+ // i < 10**16, in this case 8+8
298
+ if (i < 10'000'000'000'000'000ull) {
299
+ buffer = EncodeFullU32(static_cast<uint32_t>(div08), buffer);
300
+ little_endian::Store64(buffer, mod_result);
301
+ buffer += 8;
302
+ goto set_last_zero;
240
303
  } else {
241
- // top_1to11 has more than 32 bits too; print it in two steps.
242
- uint32_t top_8to9 = static_cast<uint32_t>(top_1to11 / 100);
243
- uint32_t mid_2 = static_cast<uint32_t>(top_1to11 - top_8to9 * 100);
244
- buffer = numbers_internal::FastIntToBuffer(top_8to9, buffer);
245
- PutTwoDigits(mid_2, buffer);
246
- buffer += 2;
304
+ // 4 + 8 + 8
305
+ uint64_t div016 = i / 10'000'000'000'000'000ull;
306
+ buffer = EncodeTenThousand(static_cast<uint32_t>(div016), buffer);
307
+ uint64_t mid_result = div08 - div016 * 100'000'000ull;
308
+ mid_result = PrepareTenThousands(mid_result / 10000, mid_result % 10000) +
309
+ kEightZeroBytes;
310
+ little_endian::Store64(buffer, mid_result);
311
+ buffer += 8;
312
+ little_endian::Store64(buffer, mod_result);
313
+ buffer += 8;
314
+ goto set_last_zero;
247
315
  }
248
-
249
- // We have only 9 digits now, again the maximum uint32_t can handle fully.
250
- uint32_t digits = u32 / 10000000; // 10,000,000
251
- u32 -= digits * 10000000;
252
- PutTwoDigits(digits, buffer);
253
- buffer += 2;
254
- digits = u32 / 100000; // 100,000
255
- u32 -= digits * 100000;
256
- PutTwoDigits(digits, buffer);
257
- buffer += 2;
258
- digits = u32 / 1000; // 1,000
259
- u32 -= digits * 1000;
260
- PutTwoDigits(digits, buffer);
261
- buffer += 2;
262
- digits = u32 / 10;
263
- u32 -= digits * 10;
264
- PutTwoDigits(digits, buffer);
265
- buffer += 2;
266
- memcpy(buffer, one_ASCII_final_digits[u32], 2);
267
- return buffer + 1;
316
+ set_last_zero:
317
+ *buffer = '\0';
318
+ return buffer;
268
319
  }
269
320
 
270
321
  char* numbers_internal::FastIntToBuffer(int64_t i, char* buffer) {
@@ -1048,25 +1099,6 @@ ABSL_CONST_INIT ABSL_DLL const char kHexTable[513] =
1048
1099
  "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
1049
1100
  "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
1050
1101
 
1051
- ABSL_CONST_INIT ABSL_DLL const char two_ASCII_digits[100][2] = {
1052
- {'0', '0'}, {'0', '1'}, {'0', '2'}, {'0', '3'}, {'0', '4'}, {'0', '5'},
1053
- {'0', '6'}, {'0', '7'}, {'0', '8'}, {'0', '9'}, {'1', '0'}, {'1', '1'},
1054
- {'1', '2'}, {'1', '3'}, {'1', '4'}, {'1', '5'}, {'1', '6'}, {'1', '7'},
1055
- {'1', '8'}, {'1', '9'}, {'2', '0'}, {'2', '1'}, {'2', '2'}, {'2', '3'},
1056
- {'2', '4'}, {'2', '5'}, {'2', '6'}, {'2', '7'}, {'2', '8'}, {'2', '9'},
1057
- {'3', '0'}, {'3', '1'}, {'3', '2'}, {'3', '3'}, {'3', '4'}, {'3', '5'},
1058
- {'3', '6'}, {'3', '7'}, {'3', '8'}, {'3', '9'}, {'4', '0'}, {'4', '1'},
1059
- {'4', '2'}, {'4', '3'}, {'4', '4'}, {'4', '5'}, {'4', '6'}, {'4', '7'},
1060
- {'4', '8'}, {'4', '9'}, {'5', '0'}, {'5', '1'}, {'5', '2'}, {'5', '3'},
1061
- {'5', '4'}, {'5', '5'}, {'5', '6'}, {'5', '7'}, {'5', '8'}, {'5', '9'},
1062
- {'6', '0'}, {'6', '1'}, {'6', '2'}, {'6', '3'}, {'6', '4'}, {'6', '5'},
1063
- {'6', '6'}, {'6', '7'}, {'6', '8'}, {'6', '9'}, {'7', '0'}, {'7', '1'},
1064
- {'7', '2'}, {'7', '3'}, {'7', '4'}, {'7', '5'}, {'7', '6'}, {'7', '7'},
1065
- {'7', '8'}, {'7', '9'}, {'8', '0'}, {'8', '1'}, {'8', '2'}, {'8', '3'},
1066
- {'8', '4'}, {'8', '5'}, {'8', '6'}, {'8', '7'}, {'8', '8'}, {'8', '9'},
1067
- {'9', '0'}, {'9', '1'}, {'9', '2'}, {'9', '3'}, {'9', '4'}, {'9', '5'},
1068
- {'9', '6'}, {'9', '7'}, {'9', '8'}, {'9', '9'}};
1069
-
1070
1102
  bool safe_strto32_base(absl::string_view text, int32_t* value, int base) {
1071
1103
  return safe_int_internal<int32_t>(text, value, base);
1072
1104
  }
@@ -125,8 +125,6 @@ namespace numbers_internal {
125
125
  ABSL_DLL extern const char kHexChar[17]; // 0123456789abcdef
126
126
  ABSL_DLL extern const char
127
127
  kHexTable[513]; // 000102030405060708090a0b0c0d0e0f1011...
128
- ABSL_DLL extern const char
129
- two_ASCII_digits[100][2]; // 00, 01, 02, 03...
130
128
 
131
129
  // Writes a two-character representation of 'i' to 'buf'. 'i' must be in the
132
130
  // range 0 <= i < 100, and buf must have space for two characters. Example:
@@ -134,10 +132,7 @@ ABSL_DLL extern const char
134
132
  // PutTwoDigits(42, buf);
135
133
  // // buf[0] == '4'
136
134
  // // buf[1] == '2'
137
- inline void PutTwoDigits(size_t i, char* buf) {
138
- assert(i < 100);
139
- memcpy(buf, two_ASCII_digits[i], 2);
140
- }
135
+ void PutTwoDigits(uint32_t i, char* buf);
141
136
 
142
137
  // safe_strto?() functions for implementing SimpleAtoi()
143
138
 
@@ -30,55 +30,6 @@
30
30
  namespace absl {
31
31
  ABSL_NAMESPACE_BEGIN
32
32
 
33
- AlphaNum::AlphaNum(Hex hex) {
34
- static_assert(numbers_internal::kFastToBufferSize >= 32,
35
- "This function only works when output buffer >= 32 bytes long");
36
- char* const end = &digits_[numbers_internal::kFastToBufferSize];
37
- auto real_width =
38
- absl::numbers_internal::FastHexToBufferZeroPad16(hex.value, end - 16);
39
- if (real_width >= hex.width) {
40
- piece_ = absl::string_view(end - real_width, real_width);
41
- } else {
42
- // Pad first 16 chars because FastHexToBufferZeroPad16 pads only to 16 and
43
- // max pad width can be up to 20.
44
- std::memset(end - 32, hex.fill, 16);
45
- // Patch up everything else up to the real_width.
46
- std::memset(end - real_width - 16, hex.fill, 16);
47
- piece_ = absl::string_view(end - hex.width, hex.width);
48
- }
49
- }
50
-
51
- AlphaNum::AlphaNum(Dec dec) {
52
- assert(dec.width <= numbers_internal::kFastToBufferSize);
53
- char* const end = &digits_[numbers_internal::kFastToBufferSize];
54
- char* const minfill = end - dec.width;
55
- char* writer = end;
56
- uint64_t value = dec.value;
57
- bool neg = dec.neg;
58
- while (value > 9) {
59
- *--writer = '0' + (value % 10);
60
- value /= 10;
61
- }
62
- *--writer = '0' + static_cast<char>(value);
63
- if (neg) *--writer = '-';
64
-
65
- ptrdiff_t fillers = writer - minfill;
66
- if (fillers > 0) {
67
- // Tricky: if the fill character is ' ', then it's <fill><+/-><digits>
68
- // But...: if the fill character is '0', then it's <+/-><fill><digits>
69
- bool add_sign_again = false;
70
- if (neg && dec.fill == '0') { // If filling with '0',
71
- ++writer; // ignore the sign we just added
72
- add_sign_again = true; // and re-add the sign later.
73
- }
74
- writer -= fillers;
75
- std::fill_n(writer, fillers, dec.fill);
76
- if (add_sign_again) *--writer = '-';
77
- }
78
-
79
- piece_ = absl::string_view(writer, static_cast<size_t>(end - writer));
80
- }
81
-
82
33
  // ----------------------------------------------------------------------
83
34
  // StrCat()
84
35
  // This merges the given strings or integers, with no delimiter. This
@@ -195,7 +146,13 @@ void AppendPieces(std::string* dest,
195
146
 
196
147
  void StrAppend(std::string* dest, const AlphaNum& a) {
197
148
  ASSERT_NO_OVERLAP(*dest, a);
198
- dest->append(a.data(), a.size());
149
+ std::string::size_type old_size = dest->size();
150
+ strings_internal::STLStringResizeUninitializedAmortized(dest,
151
+ old_size + a.size());
152
+ char* const begin = &(*dest)[0];
153
+ char* out = begin + old_size;
154
+ out = Append(out, a);
155
+ assert(out == begin + dest->size());
199
156
  }
200
157
 
201
158
  void StrAppend(std::string* dest, const AlphaNum& a, const AlphaNum& b) {
@@ -87,13 +87,16 @@
87
87
  #ifndef ABSL_STRINGS_STR_CAT_H_
88
88
  #define ABSL_STRINGS_STR_CAT_H_
89
89
 
90
+ #include <algorithm>
90
91
  #include <array>
91
92
  #include <cstdint>
93
+ #include <cstring>
92
94
  #include <string>
93
95
  #include <type_traits>
94
96
  #include <utility>
95
97
  #include <vector>
96
98
 
99
+ #include "absl/base/attributes.h"
97
100
  #include "absl/base/port.h"
98
101
  #include "absl/strings/internal/has_absl_stringify.h"
99
102
  #include "absl/strings/internal/stringify_sink.h"
@@ -201,6 +204,27 @@ struct Hex {
201
204
  explicit Hex(Pointee* v, PadSpec spec = absl::kNoPad)
202
205
  : Hex(spec, reinterpret_cast<uintptr_t>(v)) {}
203
206
 
207
+ template <typename S>
208
+ friend void AbslStringify(S& sink, Hex hex) {
209
+ static_assert(
210
+ numbers_internal::kFastToBufferSize >= 32,
211
+ "This function only works when output buffer >= 32 bytes long");
212
+ char buffer[numbers_internal::kFastToBufferSize];
213
+ char* const end = &buffer[numbers_internal::kFastToBufferSize];
214
+ auto real_width =
215
+ absl::numbers_internal::FastHexToBufferZeroPad16(hex.value, end - 16);
216
+ if (real_width >= hex.width) {
217
+ sink.Append(absl::string_view(end - real_width, real_width));
218
+ } else {
219
+ // Pad first 16 chars because FastHexToBufferZeroPad16 pads only to 16 and
220
+ // max pad width can be up to 20.
221
+ std::memset(end - 32, hex.fill, 16);
222
+ // Patch up everything else up to the real_width.
223
+ std::memset(end - real_width - 16, hex.fill, 16);
224
+ sink.Append(absl::string_view(end - hex.width, hex.width));
225
+ }
226
+ }
227
+
204
228
  private:
205
229
  Hex(PadSpec spec, uint64_t v)
206
230
  : value(v),
@@ -235,6 +259,38 @@ struct Dec {
235
259
  : spec - absl::kZeroPad2 + 2),
236
260
  fill(spec >= absl::kSpacePad2 ? ' ' : '0'),
237
261
  neg(v < 0) {}
262
+
263
+ template <typename S>
264
+ friend void AbslStringify(S& sink, Dec dec) {
265
+ assert(dec.width <= numbers_internal::kFastToBufferSize);
266
+ char buffer[numbers_internal::kFastToBufferSize];
267
+ char* const end = &buffer[numbers_internal::kFastToBufferSize];
268
+ char* const minfill = end - dec.width;
269
+ char* writer = end;
270
+ uint64_t val = dec.value;
271
+ while (val > 9) {
272
+ *--writer = '0' + (val % 10);
273
+ val /= 10;
274
+ }
275
+ *--writer = '0' + static_cast<char>(val);
276
+ if (dec.neg) *--writer = '-';
277
+
278
+ ptrdiff_t fillers = writer - minfill;
279
+ if (fillers > 0) {
280
+ // Tricky: if the fill character is ' ', then it's <fill><+/-><digits>
281
+ // But...: if the fill character is '0', then it's <+/-><fill><digits>
282
+ bool add_sign_again = false;
283
+ if (dec.neg && dec.fill == '0') { // If filling with '0',
284
+ ++writer; // ignore the sign we just added
285
+ add_sign_again = true; // and re-add the sign later.
286
+ }
287
+ writer -= fillers;
288
+ std::fill_n(writer, fillers, dec.fill);
289
+ if (add_sign_again) *--writer = '-';
290
+ }
291
+
292
+ sink.Append(absl::string_view(writer, static_cast<size_t>(end - writer)));
293
+ }
238
294
  };
239
295
 
240
296
  // -----------------------------------------------------------------------------
@@ -282,28 +338,30 @@ class AlphaNum {
282
338
  AlphaNum(double f) // NOLINT(runtime/explicit)
283
339
  : piece_(digits_, numbers_internal::SixDigitsToBuffer(f, digits_)) {}
284
340
 
285
- AlphaNum(Hex hex); // NOLINT(runtime/explicit)
286
- AlphaNum(Dec dec); // NOLINT(runtime/explicit)
287
-
288
341
  template <size_t size>
289
342
  AlphaNum( // NOLINT(runtime/explicit)
290
- const strings_internal::AlphaNumBuffer<size>& buf)
343
+ const strings_internal::AlphaNumBuffer<size>& buf
344
+ ABSL_ATTRIBUTE_LIFETIME_BOUND)
291
345
  : piece_(&buf.data[0], buf.size) {}
292
346
 
293
- AlphaNum(const char* c_str) // NOLINT(runtime/explicit)
294
- : piece_(NullSafeStringView(c_str)) {} // NOLINT(runtime/explicit)
295
- AlphaNum(absl::string_view pc) : piece_(pc) {} // NOLINT(runtime/explicit)
347
+ AlphaNum(const char* c_str // NOLINT(runtime/explicit)
348
+ ABSL_ATTRIBUTE_LIFETIME_BOUND)
349
+ : piece_(NullSafeStringView(c_str)) {}
350
+ AlphaNum(absl::string_view pc // NOLINT(runtime/explicit)
351
+ ABSL_ATTRIBUTE_LIFETIME_BOUND)
352
+ : piece_(pc) {}
296
353
 
297
354
  template <typename T, typename = typename std::enable_if<
298
355
  strings_internal::HasAbslStringify<T>::value>::type>
299
- AlphaNum( // NOLINT(runtime/explicit)
300
- const T& v, // NOLINT(runtime/explicit)
301
- strings_internal::StringifySink&& sink = {}) // NOLINT(runtime/explicit)
356
+ AlphaNum( // NOLINT(runtime/explicit)
357
+ const T& v ABSL_ATTRIBUTE_LIFETIME_BOUND,
358
+ strings_internal::StringifySink&& sink ABSL_ATTRIBUTE_LIFETIME_BOUND = {})
302
359
  : piece_(strings_internal::ExtractStringification(sink, v)) {}
303
360
 
304
361
  template <typename Allocator>
305
362
  AlphaNum( // NOLINT(runtime/explicit)
306
- const std::basic_string<char, std::char_traits<char>, Allocator>& str)
363
+ const std::basic_string<char, std::char_traits<char>, Allocator>& str
364
+ ABSL_ATTRIBUTE_LIFETIME_BOUND)
307
365
  : piece_(str) {}
308
366
 
309
367
  // Use string literals ":" instead of character literals ':'.
@@ -316,14 +374,24 @@ class AlphaNum {
316
374
  const char* data() const { return piece_.data(); }
317
375
  absl::string_view Piece() const { return piece_; }
318
376
 
319
- // Normal enums are already handled by the integer formatters.
320
- // This overload matches only scoped enums.
377
+ // Match unscoped enums. Use integral promotion so that a `char`-backed
378
+ // enum becomes a wider integral type AlphaNum will accept.
321
379
  template <typename T,
322
380
  typename = typename std::enable_if<
323
- std::is_enum<T>{} && !std::is_convertible<T, int>{} &&
381
+ std::is_enum<T>{} && std::is_convertible<T, int>{} &&
324
382
  !strings_internal::HasAbslStringify<T>::value>::type>
325
383
  AlphaNum(T e) // NOLINT(runtime/explicit)
326
- : AlphaNum(static_cast<typename std::underlying_type<T>::type>(e)) {}
384
+ : AlphaNum(+e) {}
385
+
386
+ // This overload matches scoped enums. We must explicitly cast to the
387
+ // underlying type, but use integral promotion for the same reason as above.
388
+ template <typename T,
389
+ typename std::enable_if<
390
+ std::is_enum<T>{} && !std::is_convertible<T, int>{} &&
391
+ !strings_internal::HasAbslStringify<T>::value,
392
+ char*>::type = nullptr>
393
+ AlphaNum(T e) // NOLINT(runtime/explicit)
394
+ : AlphaNum(+static_cast<typename std::underlying_type<T>::type>(e)) {}
327
395
 
328
396
  // vector<bool>::reference and const_reference require special help to
329
397
  // convert to `AlphaNum` because it requires two user defined conversions.
@@ -36,10 +36,12 @@
36
36
  // * `absl::StreamFormat()` to more efficiently write a format string to a
37
37
  // stream, such as`std::cout`.
38
38
  // * `absl::PrintF()`, `absl::FPrintF()` and `absl::SNPrintF()` as
39
- // replacements for `std::printf()`, `std::fprintf()` and `std::snprintf()`.
39
+ // drop-in replacements for `std::printf()`, `std::fprintf()` and
40
+ // `std::snprintf()`.
40
41
  //
41
- // Note: a version of `std::sprintf()` is not supported as it is
42
- // generally unsafe due to buffer overflows.
42
+ // Note: An `absl::SPrintF()` drop-in replacement is not supported as it
43
+ // is generally unsafe due to buffer overflows. Use `absl::StrFormat` which
44
+ // returns the string as output instead of expecting a pre-allocated buffer.
43
45
  //
44
46
  // Additionally, you can provide a format string (and its associated arguments)
45
47
  // using one of the following abstractions:
@@ -257,6 +259,7 @@ class FormatCountCapture {
257
259
  // * Characters: `char`, `signed char`, `unsigned char`
258
260
  // * Integers: `int`, `short`, `unsigned short`, `unsigned`, `long`,
259
261
  // `unsigned long`, `long long`, `unsigned long long`
262
+ // * Enums: printed as their underlying integral value
260
263
  // * Floating-point: `float`, `double`, `long double`
261
264
  //
262
265
  // However, in the `str_format` library, a format conversion specifies a broader
@@ -60,19 +60,23 @@ absl::string_view GenericFind(absl::string_view text,
60
60
  // Finds using absl::string_view::find(), therefore the length of the found
61
61
  // delimiter is delimiter.length().
62
62
  struct LiteralPolicy {
63
- size_t Find(absl::string_view text, absl::string_view delimiter, size_t pos) {
63
+ static size_t Find(absl::string_view text, absl::string_view delimiter,
64
+ size_t pos) {
64
65
  return text.find(delimiter, pos);
65
66
  }
66
- size_t Length(absl::string_view delimiter) { return delimiter.length(); }
67
+ static size_t Length(absl::string_view delimiter) {
68
+ return delimiter.length();
69
+ }
67
70
  };
68
71
 
69
72
  // Finds using absl::string_view::find_first_of(), therefore the length of the
70
73
  // found delimiter is 1.
71
74
  struct AnyOfPolicy {
72
- size_t Find(absl::string_view text, absl::string_view delimiter, size_t pos) {
75
+ static size_t Find(absl::string_view text, absl::string_view delimiter,
76
+ size_t pos) {
73
77
  return text.find_first_of(delimiter, pos);
74
78
  }
75
- size_t Length(absl::string_view /* delimiter */) { return 1; }
79
+ static size_t Length(absl::string_view /* delimiter */) { return 1; }
76
80
  };
77
81
 
78
82
  } // namespace
@@ -123,8 +127,7 @@ ByLength::ByLength(ptrdiff_t length) : length_(length) {
123
127
  ABSL_RAW_CHECK(length > 0, "");
124
128
  }
125
129
 
126
- absl::string_view ByLength::Find(absl::string_view text,
127
- size_t pos) const {
130
+ absl::string_view ByLength::Find(absl::string_view text, size_t pos) const {
128
131
  pos = std::min(pos, text.size()); // truncate `pos`
129
132
  absl::string_view substr = text.substr(pos);
130
133
  // If the string is shorter than the chunk size we say we