grpc 1.47.0 → 1.48.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -56,6 +56,25 @@
56
56
  #include <cstddef>
57
57
  #endif // __cplusplus
58
58
 
59
+ // ABSL_INTERNAL_CPLUSPLUS_LANG
60
+ //
61
+ // MSVC does not set the value of __cplusplus correctly, but instead uses
62
+ // _MSVC_LANG as a stand-in.
63
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
64
+ //
65
+ // However, there are reports that MSVC even sets _MSVC_LANG incorrectly at
66
+ // times, for example:
67
+ // https://github.com/microsoft/vscode-cpptools/issues/1770
68
+ // https://reviews.llvm.org/D70996
69
+ //
70
+ // For this reason, this symbol is considered INTERNAL and code outside of
71
+ // Abseil must not use it.
72
+ #if defined(_MSVC_LANG)
73
+ #define ABSL_INTERNAL_CPLUSPLUS_LANG _MSVC_LANG
74
+ #elif defined(__cplusplus)
75
+ #define ABSL_INTERNAL_CPLUSPLUS_LANG __cplusplus
76
+ #endif
77
+
59
78
  #if defined(__APPLE__)
60
79
  // Included for TARGET_OS_IPHONE, __IPHONE_OS_VERSION_MIN_REQUIRED,
61
80
  // __IPHONE_8_0.
@@ -92,7 +111,7 @@
92
111
  //
93
112
  // LTS releases can be obtained from
94
113
  // https://github.com/abseil/abseil-cpp/releases.
95
- #define ABSL_LTS_RELEASE_VERSION 20211102
114
+ #define ABSL_LTS_RELEASE_VERSION 20220623
96
115
  #define ABSL_LTS_RELEASE_PATCH_LEVEL 0
97
116
 
98
117
  // Helper macro to convert a CPP variable to a string literal.
@@ -183,12 +202,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
183
202
  #define ABSL_HAVE_BUILTIN(x) 0
184
203
  #endif
185
204
 
186
- #if defined(__is_identifier)
187
- #define ABSL_INTERNAL_HAS_KEYWORD(x) !(__is_identifier(x))
188
- #else
189
- #define ABSL_INTERNAL_HAS_KEYWORD(x) 0
190
- #endif
191
-
192
205
  #ifdef __has_feature
193
206
  #define ABSL_HAVE_FEATURE(f) __has_feature(f)
194
207
  #else
@@ -212,11 +225,12 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
212
225
  #endif
213
226
 
214
227
  // ABSL_HAVE_TLS is defined to 1 when __thread should be supported.
215
- // We assume __thread is supported on Linux when compiled with Clang or compiled
216
- // against libstdc++ with _GLIBCXX_HAVE_TLS defined.
228
+ // We assume __thread is supported on Linux or Asylo when compiled with Clang or
229
+ // compiled against libstdc++ with _GLIBCXX_HAVE_TLS defined.
217
230
  #ifdef ABSL_HAVE_TLS
218
231
  #error ABSL_HAVE_TLS cannot be directly set
219
- #elif defined(__linux__) && (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS))
232
+ #elif (defined(__linux__) || defined(__ASYLO__)) && \
233
+ (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS))
220
234
  #define ABSL_HAVE_TLS 1
221
235
  #endif
222
236
 
@@ -259,19 +273,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
259
273
  #define ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1
260
274
  #endif
261
275
 
262
- // ABSL_HAVE_SOURCE_LOCATION_CURRENT
263
- //
264
- // Indicates whether `absl::SourceLocation::current()` will return useful
265
- // information in some contexts.
266
- #ifndef ABSL_HAVE_SOURCE_LOCATION_CURRENT
267
- #if ABSL_INTERNAL_HAS_KEYWORD(__builtin_LINE) && \
268
- ABSL_INTERNAL_HAS_KEYWORD(__builtin_FILE)
269
- #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
270
- #elif ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 0)
271
- #define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1
272
- #endif
273
- #endif
274
-
275
276
  // ABSL_HAVE_THREAD_LOCAL
276
277
  //
277
278
  // Checks whether C++11's `thread_local` storage duration specifier is
@@ -414,7 +415,8 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
414
415
  defined(_AIX) || defined(__ros__) || defined(__native_client__) || \
415
416
  defined(__asmjs__) || defined(__wasm__) || defined(__Fuchsia__) || \
416
417
  defined(__sun) || defined(__ASYLO__) || defined(__myriad2__) || \
417
- defined(__HAIKU__)
418
+ defined(__HAIKU__) || defined(__OpenBSD__) || defined(__NetBSD__) || \
419
+ defined(__QNX__)
418
420
  #define ABSL_HAVE_MMAP 1
419
421
  #endif
420
422
 
@@ -425,7 +427,8 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
425
427
  #ifdef ABSL_HAVE_PTHREAD_GETSCHEDPARAM
426
428
  #error ABSL_HAVE_PTHREAD_GETSCHEDPARAM cannot be directly set
427
429
  #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \
428
- defined(_AIX) || defined(__ros__)
430
+ defined(_AIX) || defined(__ros__) || defined(__OpenBSD__) || \
431
+ defined(__NetBSD__)
429
432
  #define ABSL_HAVE_PTHREAD_GETSCHEDPARAM 1
430
433
  #endif
431
434
 
@@ -520,22 +523,41 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
520
523
  #error "absl endian detection needs to be set up for your compiler"
521
524
  #endif
522
525
 
523
- // macOS 10.13 and iOS 10.11 don't let you use <any>, <optional>, or <variant>
524
- // even though the headers exist and are publicly noted to work. See
525
- // https://github.com/abseil/abseil-cpp/issues/207 and
526
+ // macOS < 10.13 and iOS < 11 don't let you use <any>, <optional>, or <variant>
527
+ // even though the headers exist and are publicly noted to work, because the
528
+ // libc++ shared library shipped on the system doesn't have the requisite
529
+ // exported symbols. See https://github.com/abseil/abseil-cpp/issues/207 and
526
530
  // https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
531
+ //
527
532
  // libc++ spells out the availability requirements in the file
528
533
  // llvm-project/libcxx/include/__config via the #define
529
534
  // _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS.
530
- #if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \
531
- ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
532
- __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \
533
- (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
534
- __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \
535
- (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
536
- __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \
537
- (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
538
- __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000))
535
+ //
536
+ // Unfortunately, Apple initially mis-stated the requirements as macOS < 10.14
537
+ // and iOS < 12 in the libc++ headers. This was corrected by
538
+ // https://github.com/llvm/llvm-project/commit/7fb40e1569dd66292b647f4501b85517e9247953
539
+ // which subsequently made it into the XCode 12.5 release. We need to match the
540
+ // old (incorrect) conditions when built with old XCode, but can use the
541
+ // corrected earlier versions with new XCode.
542
+ #if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \
543
+ ((_LIBCPP_VERSION >= 11000 && /* XCode 12.5 or later: */ \
544
+ ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
545
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101300) || \
546
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
547
+ __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 110000) || \
548
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
549
+ __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 40000) || \
550
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
551
+ __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 110000))) || \
552
+ (_LIBCPP_VERSION < 11000 && /* Pre-XCode 12.5: */ \
553
+ ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
554
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \
555
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \
556
+ __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \
557
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \
558
+ __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \
559
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \
560
+ __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000))))
539
561
  #define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 1
540
562
  #else
541
563
  #define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 0
@@ -705,8 +727,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
705
727
  #endif
706
728
  #endif
707
729
 
708
- #undef ABSL_INTERNAL_HAS_KEYWORD
709
-
710
730
  // ABSL_DLL
711
731
  //
712
732
  // When building Abseil as a DLL, this macro expands to `__declspec(dllexport)`
@@ -732,8 +752,6 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
732
752
  // a compiler instrumentation module and a run-time library.
733
753
  #ifdef ABSL_HAVE_MEMORY_SANITIZER
734
754
  #error "ABSL_HAVE_MEMORY_SANITIZER cannot be directly set."
735
- #elif defined(__SANITIZE_MEMORY__)
736
- #define ABSL_HAVE_MEMORY_SANITIZER 1
737
755
  #elif !defined(__native_client__) && ABSL_HAVE_FEATURE(memory_sanitizer)
738
756
  #define ABSL_HAVE_MEMORY_SANITIZER 1
739
757
  #endif
@@ -760,6 +778,45 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
760
778
  #define ABSL_HAVE_ADDRESS_SANITIZER 1
761
779
  #endif
762
780
 
781
+ // ABSL_HAVE_HWADDRESS_SANITIZER
782
+ //
783
+ // Hardware-Assisted AddressSanitizer (or HWASAN) is even faster than asan
784
+ // memory error detector which can use CPU features like ARM TBI, Intel LAM or
785
+ // AMD UAI.
786
+ #ifdef ABSL_HAVE_HWADDRESS_SANITIZER
787
+ #error "ABSL_HAVE_HWADDRESS_SANITIZER cannot be directly set."
788
+ #elif defined(__SANITIZE_HWADDRESS__)
789
+ #define ABSL_HAVE_HWADDRESS_SANITIZER 1
790
+ #elif ABSL_HAVE_FEATURE(hwaddress_sanitizer)
791
+ #define ABSL_HAVE_HWADDRESS_SANITIZER 1
792
+ #endif
793
+
794
+ // ABSL_HAVE_LEAK_SANITIZER
795
+ //
796
+ // LeakSanitizer (or lsan) is a detector of memory leaks.
797
+ // https://clang.llvm.org/docs/LeakSanitizer.html
798
+ // https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer
799
+ //
800
+ // The macro ABSL_HAVE_LEAK_SANITIZER can be used to detect at compile-time
801
+ // whether the LeakSanitizer is potentially available. However, just because the
802
+ // LeakSanitizer is available does not mean it is active. Use the
803
+ // always-available run-time interface in //absl/debugging/leak_check.h for
804
+ // interacting with LeakSanitizer.
805
+ #ifdef ABSL_HAVE_LEAK_SANITIZER
806
+ #error "ABSL_HAVE_LEAK_SANITIZER cannot be directly set."
807
+ #elif defined(LEAK_SANITIZER)
808
+ // GCC provides no method for detecting the presense of the standalone
809
+ // LeakSanitizer (-fsanitize=leak), so GCC users of -fsanitize=leak should also
810
+ // use -DLEAK_SANITIZER.
811
+ #define ABSL_HAVE_LEAK_SANITIZER 1
812
+ // Clang standalone LeakSanitizer (-fsanitize=leak)
813
+ #elif ABSL_HAVE_FEATURE(leak_sanitizer)
814
+ #define ABSL_HAVE_LEAK_SANITIZER 1
815
+ #elif defined(ABSL_HAVE_ADDRESS_SANITIZER)
816
+ // GCC or Clang using the LeakSanitizer integrated into AddressSanitizer.
817
+ #define ABSL_HAVE_LEAK_SANITIZER 1
818
+ #endif
819
+
763
820
  // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
764
821
  //
765
822
  // Class template argument deduction is a language feature added in C++17.
@@ -769,4 +826,88 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' ||
769
826
  #define ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION 1
770
827
  #endif
771
828
 
829
+ // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
830
+ //
831
+ // Prior to C++17, static constexpr variables defined in classes required a
832
+ // separate definition outside of the class body, for example:
833
+ //
834
+ // class Foo {
835
+ // static constexpr int kBar = 0;
836
+ // };
837
+ // constexpr int Foo::kBar;
838
+ //
839
+ // In C++17, these variables defined in classes are considered inline variables,
840
+ // and the extra declaration is redundant. Since some compilers warn on the
841
+ // extra declarations, ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL can be used
842
+ // conditionally ignore them:
843
+ //
844
+ // #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
845
+ // constexpr int Foo::kBar;
846
+ // #endif
847
+ #if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \
848
+ ABSL_INTERNAL_CPLUSPLUS_LANG < 201703L
849
+ #define ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL 1
850
+ #endif
851
+
852
+ // `ABSL_INTERNAL_HAS_RTTI` determines whether abseil is being compiled with
853
+ // RTTI support.
854
+ #ifdef ABSL_INTERNAL_HAS_RTTI
855
+ #error ABSL_INTERNAL_HAS_RTTI cannot be directly set
856
+ #elif !defined(__GNUC__) || defined(__GXX_RTTI)
857
+ #define ABSL_INTERNAL_HAS_RTTI 1
858
+ #endif // !defined(__GNUC__) || defined(__GXX_RTTI)
859
+
860
+ // ABSL_INTERNAL_HAVE_SSE is used for compile-time detection of SSE support.
861
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
862
+ // which architectures support the various x86 instruction sets.
863
+ #ifdef ABSL_INTERNAL_HAVE_SSE
864
+ #error ABSL_INTERNAL_HAVE_SSE cannot be directly set
865
+ #elif defined(__SSE__)
866
+ #define ABSL_INTERNAL_HAVE_SSE 1
867
+ #elif defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1)
868
+ // MSVC only defines _M_IX86_FP for x86 32-bit code, and _M_IX86_FP >= 1
869
+ // indicates that at least SSE was targeted with the /arch:SSE option.
870
+ // All x86-64 processors support SSE, so support can be assumed.
871
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
872
+ #define ABSL_INTERNAL_HAVE_SSE 1
873
+ #endif
874
+
875
+ // ABSL_INTERNAL_HAVE_SSE2 is used for compile-time detection of SSE2 support.
876
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
877
+ // which architectures support the various x86 instruction sets.
878
+ #ifdef ABSL_INTERNAL_HAVE_SSE2
879
+ #error ABSL_INTERNAL_HAVE_SSE2 cannot be directly set
880
+ #elif defined(__SSE2__)
881
+ #define ABSL_INTERNAL_HAVE_SSE2 1
882
+ #elif defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2)
883
+ // MSVC only defines _M_IX86_FP for x86 32-bit code, and _M_IX86_FP >= 2
884
+ // indicates that at least SSE2 was targeted with the /arch:SSE2 option.
885
+ // All x86-64 processors support SSE2, so support can be assumed.
886
+ // https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
887
+ #define ABSL_INTERNAL_HAVE_SSE2 1
888
+ #endif
889
+
890
+ // ABSL_INTERNAL_HAVE_SSSE3 is used for compile-time detection of SSSE3 support.
891
+ // See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for an overview of
892
+ // which architectures support the various x86 instruction sets.
893
+ //
894
+ // MSVC does not have a mode that targets SSSE3 at compile-time. To use SSSE3
895
+ // with MSVC requires either assuming that the code will only every run on CPUs
896
+ // that support SSSE3, otherwise __cpuid() can be used to detect support at
897
+ // runtime and fallback to a non-SSSE3 implementation when SSSE3 is unsupported
898
+ // by the CPU.
899
+ #ifdef ABSL_INTERNAL_HAVE_SSSE3
900
+ #error ABSL_INTERNAL_HAVE_SSSE3 cannot be directly set
901
+ #elif defined(__SSSE3__)
902
+ #define ABSL_INTERNAL_HAVE_SSSE3 1
903
+ #endif
904
+
905
+ // ABSL_INTERNAL_HAVE_ARM_NEON is used for compile-time detection of NEON (ARM
906
+ // SIMD).
907
+ #ifdef ABSL_INTERNAL_HAVE_ARM_NEON
908
+ #error ABSL_INTERNAL_HAVE_ARM_NEON cannot be directly set
909
+ #elif defined(__ARM_NEON)
910
+ #define ABSL_INTERNAL_HAVE_ARM_NEON 1
911
+ #endif
912
+
772
913
  #endif // ABSL_BASE_CONFIG_H_
@@ -25,6 +25,8 @@
25
25
  #include <atomic>
26
26
  #include <chrono> // NOLINT(build/c++11)
27
27
 
28
+ #include "absl/base/attributes.h"
29
+ #include "absl/base/config.h"
28
30
  #include "absl/base/internal/unscaledcycleclock.h"
29
31
 
30
32
  namespace absl {
@@ -33,44 +35,20 @@ namespace base_internal {
33
35
 
34
36
  #if ABSL_USE_UNSCALED_CYCLECLOCK
35
37
 
36
- namespace {
37
-
38
- #ifdef NDEBUG
39
- #ifdef ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
40
- // Not debug mode and the UnscaledCycleClock frequency is the CPU
41
- // frequency. Scale the CycleClock to prevent overflow if someone
42
- // tries to represent the time as cycles since the Unix epoch.
43
- static constexpr int32_t kShift = 1;
44
- #else
45
- // Not debug mode and the UnscaledCycleClock isn't operating at the
46
- // raw CPU frequency. There is no need to do any scaling, so don't
47
- // needlessly sacrifice precision.
48
- static constexpr int32_t kShift = 0;
49
- #endif
50
- #else
51
- // In debug mode use a different shift to discourage depending on a
52
- // particular shift value.
53
- static constexpr int32_t kShift = 2;
38
+ #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
39
+ constexpr int32_t CycleClock::kShift;
40
+ constexpr double CycleClock::kFrequencyScale;
54
41
  #endif
55
42
 
56
- static constexpr double kFrequencyScale = 1.0 / (1 << kShift);
57
- static std::atomic<CycleClockSourceFunc> cycle_clock_source;
43
+ ABSL_CONST_INIT std::atomic<CycleClockSourceFunc>
44
+ CycleClock::cycle_clock_source_{nullptr};
58
45
 
59
- CycleClockSourceFunc LoadCycleClockSource() {
60
- // Optimize for the common case (no callback) by first doing a relaxed load;
61
- // this is significantly faster on non-x86 platforms.
62
- if (cycle_clock_source.load(std::memory_order_relaxed) == nullptr) {
63
- return nullptr;
64
- }
65
- // This corresponds to the store(std::memory_order_release) in
66
- // CycleClockSource::Register, and makes sure that any updates made prior to
67
- // registering the callback are visible to this thread before the callback is
68
- // invoked.
69
- return cycle_clock_source.load(std::memory_order_acquire);
46
+ void CycleClockSource::Register(CycleClockSourceFunc source) {
47
+ // Corresponds to the load(std::memory_order_acquire) in LoadCycleClockSource.
48
+ CycleClock::cycle_clock_source_.store(source, std::memory_order_release);
70
49
  }
71
50
 
72
- } // namespace
73
-
51
+ #ifdef _WIN32
74
52
  int64_t CycleClock::Now() {
75
53
  auto fn = LoadCycleClockSource();
76
54
  if (fn == nullptr) {
@@ -78,15 +56,7 @@ int64_t CycleClock::Now() {
78
56
  }
79
57
  return fn() >> kShift;
80
58
  }
81
-
82
- double CycleClock::Frequency() {
83
- return kFrequencyScale * base_internal::UnscaledCycleClock::Frequency();
84
- }
85
-
86
- void CycleClockSource::Register(CycleClockSourceFunc source) {
87
- // Corresponds to the load(std::memory_order_acquire) in LoadCycleClockSource.
88
- cycle_clock_source.store(source, std::memory_order_release);
89
- }
59
+ #endif
90
60
 
91
61
  #else
92
62
 
@@ -42,14 +42,19 @@
42
42
  #ifndef ABSL_BASE_INTERNAL_CYCLECLOCK_H_
43
43
  #define ABSL_BASE_INTERNAL_CYCLECLOCK_H_
44
44
 
45
+ #include <atomic>
45
46
  #include <cstdint>
46
47
 
48
+ #include "absl/base/attributes.h"
47
49
  #include "absl/base/config.h"
50
+ #include "absl/base/internal/unscaledcycleclock.h"
48
51
 
49
52
  namespace absl {
50
53
  ABSL_NAMESPACE_BEGIN
51
54
  namespace base_internal {
52
55
 
56
+ using CycleClockSourceFunc = int64_t (*)();
57
+
53
58
  // -----------------------------------------------------------------------------
54
59
  // CycleClock
55
60
  // -----------------------------------------------------------------------------
@@ -68,12 +73,37 @@ class CycleClock {
68
73
  static double Frequency();
69
74
 
70
75
  private:
76
+ #if ABSL_USE_UNSCALED_CYCLECLOCK
77
+ static CycleClockSourceFunc LoadCycleClockSource();
78
+
79
+ #ifdef NDEBUG
80
+ #ifdef ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
81
+ // Not debug mode and the UnscaledCycleClock frequency is the CPU
82
+ // frequency. Scale the CycleClock to prevent overflow if someone
83
+ // tries to represent the time as cycles since the Unix epoch.
84
+ static constexpr int32_t kShift = 1;
85
+ #else
86
+ // Not debug mode and the UnscaledCycleClock isn't operating at the
87
+ // raw CPU frequency. There is no need to do any scaling, so don't
88
+ // needlessly sacrifice precision.
89
+ static constexpr int32_t kShift = 0;
90
+ #endif
91
+ #else // NDEBUG
92
+ // In debug mode use a different shift to discourage depending on a
93
+ // particular shift value.
94
+ static constexpr int32_t kShift = 2;
95
+ #endif // NDEBUG
96
+
97
+ static constexpr double kFrequencyScale = 1.0 / (1 << kShift);
98
+ ABSL_CONST_INIT static std::atomic<CycleClockSourceFunc> cycle_clock_source_;
99
+ #endif // ABSL_USE_UNSCALED_CYCLECLOC
100
+
71
101
  CycleClock() = delete; // no instances
72
102
  CycleClock(const CycleClock&) = delete;
73
103
  CycleClock& operator=(const CycleClock&) = delete;
74
- };
75
104
 
76
- using CycleClockSourceFunc = int64_t (*)();
105
+ friend class CycleClockSource;
106
+ };
77
107
 
78
108
  class CycleClockSource {
79
109
  private:
@@ -87,6 +117,41 @@ class CycleClockSource {
87
117
  static void Register(CycleClockSourceFunc source);
88
118
  };
89
119
 
120
+ #if ABSL_USE_UNSCALED_CYCLECLOCK
121
+
122
+ inline CycleClockSourceFunc CycleClock::LoadCycleClockSource() {
123
+ #if !defined(__x86_64__)
124
+ // Optimize for the common case (no callback) by first doing a relaxed load;
125
+ // this is significantly faster on non-x86 platforms.
126
+ if (cycle_clock_source_.load(std::memory_order_relaxed) == nullptr) {
127
+ return nullptr;
128
+ }
129
+ #endif // !defined(__x86_64__)
130
+
131
+ // This corresponds to the store(std::memory_order_release) in
132
+ // CycleClockSource::Register, and makes sure that any updates made prior to
133
+ // registering the callback are visible to this thread before the callback
134
+ // is invoked.
135
+ return cycle_clock_source_.load(std::memory_order_acquire);
136
+ }
137
+
138
+ // Accessing globals in inlined code in Window DLLs is problematic.
139
+ #ifndef _WIN32
140
+ inline int64_t CycleClock::Now() {
141
+ auto fn = LoadCycleClockSource();
142
+ if (fn == nullptr) {
143
+ return base_internal::UnscaledCycleClock::Now() >> kShift;
144
+ }
145
+ return fn() >> kShift;
146
+ }
147
+ #endif
148
+
149
+ inline double CycleClock::Frequency() {
150
+ return kFrequencyScale * base_internal::UnscaledCycleClock::Frequency();
151
+ }
152
+
153
+ #endif // ABSL_USE_UNSCALED_CYCLECLOCK
154
+
90
155
  } // namespace base_internal
91
156
  ABSL_NAMESPACE_END
92
157
  } // namespace absl
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include "absl/base/config.h"
22
22
 
23
- #if ABSL_HAVE_MMAP
23
+ #ifdef ABSL_HAVE_MMAP
24
24
 
25
25
  #include <sys/mman.h>
26
26
 
@@ -41,13 +41,13 @@
41
41
 
42
42
  #ifdef __mips__
43
43
  // Include definitions of the ABI currently in use.
44
- #ifdef __BIONIC__
44
+ #if defined(__BIONIC__) || !defined(__GLIBC__)
45
45
  // Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the
46
46
  // definitions we need.
47
47
  #include <asm/sgidefs.h>
48
48
  #else
49
49
  #include <sgidefs.h>
50
- #endif // __BIONIC__
50
+ #endif // __BIONIC__ || !__GLIBC__
51
51
  #endif // __mips__
52
52
 
53
53
  // SYS_mmap and SYS_munmap are not defined in Android.
@@ -16,16 +16,9 @@
16
16
  #ifndef ABSL_BASE_INTERNAL_ENDIAN_H_
17
17
  #define ABSL_BASE_INTERNAL_ENDIAN_H_
18
18
 
19
- // The following guarantees declaration of the byte swap functions
20
- #ifdef _MSC_VER
21
- #include <stdlib.h> // NOLINT(build/include)
22
- #elif defined(__FreeBSD__)
23
- #include <sys/endian.h>
24
- #elif defined(__GLIBC__)
25
- #include <byteswap.h> // IWYU pragma: export
26
- #endif
27
-
28
19
  #include <cstdint>
20
+ #include <cstdlib>
21
+
29
22
  #include "absl/base/casts.h"
30
23
  #include "absl/base/config.h"
31
24
  #include "absl/base/internal/unaligned_access.h"
@@ -34,47 +27,11 @@
34
27
  namespace absl {
35
28
  ABSL_NAMESPACE_BEGIN
36
29
 
37
- // Use compiler byte-swapping intrinsics if they are available. 32-bit
38
- // and 64-bit versions are available in Clang and GCC as of GCC 4.3.0.
39
- // The 16-bit version is available in Clang and GCC only as of GCC 4.8.0.
40
- // For simplicity, we enable them all only for GCC 4.8.0 or later.
41
- #if defined(__clang__) || \
42
- (defined(__GNUC__) && \
43
- ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ >= 5))
44
30
  inline uint64_t gbswap_64(uint64_t host_int) {
31
+ #if ABSL_HAVE_BUILTIN(__builtin_bswap64) || defined(__GNUC__)
45
32
  return __builtin_bswap64(host_int);
46
- }
47
- inline uint32_t gbswap_32(uint32_t host_int) {
48
- return __builtin_bswap32(host_int);
49
- }
50
- inline uint16_t gbswap_16(uint16_t host_int) {
51
- return __builtin_bswap16(host_int);
52
- }
53
-
54
33
  #elif defined(_MSC_VER)
55
- inline uint64_t gbswap_64(uint64_t host_int) {
56
34
  return _byteswap_uint64(host_int);
57
- }
58
- inline uint32_t gbswap_32(uint32_t host_int) {
59
- return _byteswap_ulong(host_int);
60
- }
61
- inline uint16_t gbswap_16(uint16_t host_int) {
62
- return _byteswap_ushort(host_int);
63
- }
64
-
65
- #else
66
- inline uint64_t gbswap_64(uint64_t host_int) {
67
- #if defined(__GNUC__) && defined(__x86_64__) && !defined(__APPLE__)
68
- // Adapted from /usr/include/byteswap.h. Not available on Mac.
69
- if (__builtin_constant_p(host_int)) {
70
- return __bswap_constant_64(host_int);
71
- } else {
72
- uint64_t result;
73
- __asm__("bswap %0" : "=r"(result) : "0"(host_int));
74
- return result;
75
- }
76
- #elif defined(__GLIBC__)
77
- return bswap_64(host_int);
78
35
  #else
79
36
  return (((host_int & uint64_t{0xFF}) << 56) |
80
37
  ((host_int & uint64_t{0xFF00}) << 40) |
@@ -84,12 +41,14 @@ inline uint64_t gbswap_64(uint64_t host_int) {
84
41
  ((host_int & uint64_t{0xFF0000000000}) >> 24) |
85
42
  ((host_int & uint64_t{0xFF000000000000}) >> 40) |
86
43
  ((host_int & uint64_t{0xFF00000000000000}) >> 56));
87
- #endif // bswap_64
44
+ #endif
88
45
  }
89
46
 
90
47
  inline uint32_t gbswap_32(uint32_t host_int) {
91
- #if defined(__GLIBC__)
92
- return bswap_32(host_int);
48
+ #if ABSL_HAVE_BUILTIN(__builtin_bswap32) || defined(__GNUC__)
49
+ return __builtin_bswap32(host_int);
50
+ #elif defined(_MSC_VER)
51
+ return _byteswap_ulong(host_int);
93
52
  #else
94
53
  return (((host_int & uint32_t{0xFF}) << 24) |
95
54
  ((host_int & uint32_t{0xFF00}) << 8) |
@@ -99,33 +58,29 @@ inline uint32_t gbswap_32(uint32_t host_int) {
99
58
  }
100
59
 
101
60
  inline uint16_t gbswap_16(uint16_t host_int) {
102
- #if defined(__GLIBC__)
103
- return bswap_16(host_int);
61
+ #if ABSL_HAVE_BUILTIN(__builtin_bswap16) || defined(__GNUC__)
62
+ return __builtin_bswap16(host_int);
63
+ #elif defined(_MSC_VER)
64
+ return _byteswap_ushort(host_int);
104
65
  #else
105
66
  return (((host_int & uint16_t{0xFF}) << 8) |
106
67
  ((host_int & uint16_t{0xFF00}) >> 8));
107
68
  #endif
108
69
  }
109
70
 
110
- #endif // intrinsics available
111
-
112
71
  #ifdef ABSL_IS_LITTLE_ENDIAN
113
72
 
114
- // Definitions for ntohl etc. that don't require us to include
115
- // netinet/in.h. We wrap gbswap_32 and gbswap_16 in functions rather
116
- // than just #defining them because in debug mode, gcc doesn't
117
- // correctly handle the (rather involved) definitions of bswap_32.
118
- // gcc guarantees that inline functions are as fast as macros, so
119
- // this isn't a performance hit.
73
+ // Portable definitions for htonl (host-to-network) and friends on little-endian
74
+ // architectures.
120
75
  inline uint16_t ghtons(uint16_t x) { return gbswap_16(x); }
121
76
  inline uint32_t ghtonl(uint32_t x) { return gbswap_32(x); }
122
77
  inline uint64_t ghtonll(uint64_t x) { return gbswap_64(x); }
123
78
 
124
79
  #elif defined ABSL_IS_BIG_ENDIAN
125
80
 
126
- // These definitions are simpler on big-endian machines
127
- // These are functions instead of macros to avoid self-assignment warnings
128
- // on calls such as "i = ghtnol(i);". This also provides type checking.
81
+ // Portable definitions for htonl (host-to-network) etc on big-endian
82
+ // architectures. These definitions are simpler since the host byte order is the
83
+ // same as network byte order.
129
84
  inline uint16_t ghtons(uint16_t x) { return x; }
130
85
  inline uint32_t ghtonl(uint32_t x) { return x; }
131
86
  inline uint64_t ghtonll(uint64_t x) { return x; }
@@ -28,8 +28,10 @@ struct FastTypeTag {
28
28
  constexpr static char dummy_var = 0;
29
29
  };
30
30
 
31
+ #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
31
32
  template <typename Type>
32
33
  constexpr char FastTypeTag<Type>::dummy_var;
34
+ #endif
33
35
 
34
36
  // FastTypeId<Type>() evaluates at compile/link-time to a unique pointer for the
35
37
  // passed-in type. These are meant to be good match for keys into maps or