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.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -21,33 +21,43 @@
|
|
21
21
|
#include <limits>
|
22
22
|
|
23
23
|
#include "absl/base/attributes.h"
|
24
|
-
#include "absl/
|
24
|
+
#include "absl/base/config.h"
|
25
25
|
#include "absl/debugging/stacktrace.h"
|
26
26
|
#include "absl/memory/memory.h"
|
27
27
|
#include "absl/profiling/internal/exponential_biased.h"
|
28
28
|
#include "absl/profiling/internal/sample_recorder.h"
|
29
29
|
#include "absl/synchronization/mutex.h"
|
30
|
+
#include "absl/utility/utility.h"
|
30
31
|
|
31
32
|
namespace absl {
|
32
33
|
ABSL_NAMESPACE_BEGIN
|
33
34
|
namespace container_internal {
|
35
|
+
|
36
|
+
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
34
37
|
constexpr int HashtablezInfo::kMaxStackDepth;
|
38
|
+
#endif
|
35
39
|
|
36
40
|
namespace {
|
37
41
|
ABSL_CONST_INIT std::atomic<bool> g_hashtablez_enabled{
|
38
42
|
false
|
39
43
|
};
|
40
44
|
ABSL_CONST_INIT std::atomic<int32_t> g_hashtablez_sample_parameter{1 << 10};
|
45
|
+
std::atomic<HashtablezConfigListener> g_hashtablez_config_listener{nullptr};
|
41
46
|
|
42
47
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
43
48
|
ABSL_PER_THREAD_TLS_KEYWORD absl::profiling_internal::ExponentialBiased
|
44
49
|
g_exponential_biased_generator;
|
45
50
|
#endif
|
46
51
|
|
52
|
+
void TriggerHashtablezConfigListener() {
|
53
|
+
auto* listener = g_hashtablez_config_listener.load(std::memory_order_acquire);
|
54
|
+
if (listener != nullptr) listener();
|
55
|
+
}
|
56
|
+
|
47
57
|
} // namespace
|
48
58
|
|
49
59
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
50
|
-
ABSL_PER_THREAD_TLS_KEYWORD
|
60
|
+
ABSL_PER_THREAD_TLS_KEYWORD SamplingState global_next_sample = {0, 0};
|
51
61
|
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
52
62
|
|
53
63
|
HashtablezSampler& GlobalHashtablezSampler() {
|
@@ -55,13 +65,11 @@ HashtablezSampler& GlobalHashtablezSampler() {
|
|
55
65
|
return *sampler;
|
56
66
|
}
|
57
67
|
|
58
|
-
|
59
|
-
// fields are not initialized, but this definition does initialize the fields.
|
60
|
-
// Something needs to be cleaned up.
|
61
|
-
HashtablezInfo::HashtablezInfo() { PrepareForSampling(); }
|
68
|
+
HashtablezInfo::HashtablezInfo() = default;
|
62
69
|
HashtablezInfo::~HashtablezInfo() = default;
|
63
70
|
|
64
|
-
void HashtablezInfo::PrepareForSampling(
|
71
|
+
void HashtablezInfo::PrepareForSampling(int64_t stride,
|
72
|
+
size_t inline_element_size_value) {
|
65
73
|
capacity.store(0, std::memory_order_relaxed);
|
66
74
|
size.store(0, std::memory_order_relaxed);
|
67
75
|
num_erases.store(0, std::memory_order_relaxed);
|
@@ -74,11 +82,13 @@ void HashtablezInfo::PrepareForSampling() {
|
|
74
82
|
max_reserve.store(0, std::memory_order_relaxed);
|
75
83
|
|
76
84
|
create_time = absl::Now();
|
85
|
+
weight = stride;
|
77
86
|
// The inliner makes hardcoded skip_count difficult (especially when combined
|
78
87
|
// with LTO). We use the ability to exclude stacks by regex when encoding
|
79
88
|
// instead.
|
80
89
|
depth = absl::GetStackTrace(stack, HashtablezInfo::kMaxStackDepth,
|
81
90
|
/* skip_count= */ 0);
|
91
|
+
inline_element_size = inline_element_size_value;
|
82
92
|
}
|
83
93
|
|
84
94
|
static bool ShouldForceSampling() {
|
@@ -101,23 +111,32 @@ static bool ShouldForceSampling() {
|
|
101
111
|
return state == kForce;
|
102
112
|
}
|
103
113
|
|
104
|
-
HashtablezInfo* SampleSlow(
|
114
|
+
HashtablezInfo* SampleSlow(SamplingState& next_sample,
|
115
|
+
size_t inline_element_size) {
|
105
116
|
if (ABSL_PREDICT_FALSE(ShouldForceSampling())) {
|
106
|
-
|
107
|
-
|
108
|
-
result
|
117
|
+
next_sample.next_sample = 1;
|
118
|
+
const int64_t old_stride = exchange(next_sample.sample_stride, 1);
|
119
|
+
HashtablezInfo* result =
|
120
|
+
GlobalHashtablezSampler().Register(old_stride, inline_element_size);
|
109
121
|
return result;
|
110
122
|
}
|
111
123
|
|
112
124
|
#if !defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
113
|
-
|
125
|
+
next_sample = {
|
126
|
+
std::numeric_limits<int64_t>::max(),
|
127
|
+
std::numeric_limits<int64_t>::max(),
|
128
|
+
};
|
114
129
|
return nullptr;
|
115
130
|
#else
|
116
|
-
bool first =
|
117
|
-
|
131
|
+
bool first = next_sample.next_sample < 0;
|
132
|
+
|
133
|
+
const int64_t next_stride = g_exponential_biased_generator.GetStride(
|
118
134
|
g_hashtablez_sample_parameter.load(std::memory_order_relaxed));
|
135
|
+
|
136
|
+
next_sample.next_sample = next_stride;
|
137
|
+
const int64_t old_stride = exchange(next_sample.sample_stride, next_stride);
|
119
138
|
// Small values of interval are equivalent to just sampling next time.
|
120
|
-
ABSL_ASSERT(
|
139
|
+
ABSL_ASSERT(next_stride >= 1);
|
121
140
|
|
122
141
|
// g_hashtablez_enabled can be dynamically flipped, we need to set a threshold
|
123
142
|
// low enough that we will start sampling in a reasonable time, so we just use
|
@@ -127,13 +146,11 @@ HashtablezInfo* SampleSlow(int64_t* next_sample, size_t inline_element_size) {
|
|
127
146
|
// We will only be negative on our first count, so we should just retry in
|
128
147
|
// that case.
|
129
148
|
if (first) {
|
130
|
-
if (ABSL_PREDICT_TRUE(
|
149
|
+
if (ABSL_PREDICT_TRUE(--next_sample.next_sample > 0)) return nullptr;
|
131
150
|
return SampleSlow(next_sample, inline_element_size);
|
132
151
|
}
|
133
152
|
|
134
|
-
|
135
|
-
result->inline_element_size = inline_element_size;
|
136
|
-
return result;
|
153
|
+
return GlobalHashtablezSampler().Register(old_stride, inline_element_size);
|
137
154
|
#endif
|
138
155
|
}
|
139
156
|
|
@@ -146,7 +163,7 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
|
146
163
|
// SwissTables probe in groups of 16, so scale this to count items probes and
|
147
164
|
// not offset from desired.
|
148
165
|
size_t probe_length = distance_from_desired;
|
149
|
-
#
|
166
|
+
#ifdef ABSL_INTERNAL_HAVE_SSE2
|
150
167
|
probe_length /= 16;
|
151
168
|
#else
|
152
169
|
probe_length /= 8;
|
@@ -163,11 +180,33 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
|
163
180
|
info->size.fetch_add(1, std::memory_order_relaxed);
|
164
181
|
}
|
165
182
|
|
183
|
+
void SetHashtablezConfigListener(HashtablezConfigListener l) {
|
184
|
+
g_hashtablez_config_listener.store(l, std::memory_order_release);
|
185
|
+
}
|
186
|
+
|
187
|
+
bool IsHashtablezEnabled() {
|
188
|
+
return g_hashtablez_enabled.load(std::memory_order_acquire);
|
189
|
+
}
|
190
|
+
|
166
191
|
void SetHashtablezEnabled(bool enabled) {
|
192
|
+
SetHashtablezEnabledInternal(enabled);
|
193
|
+
TriggerHashtablezConfigListener();
|
194
|
+
}
|
195
|
+
|
196
|
+
void SetHashtablezEnabledInternal(bool enabled) {
|
167
197
|
g_hashtablez_enabled.store(enabled, std::memory_order_release);
|
168
198
|
}
|
169
199
|
|
200
|
+
int32_t GetHashtablezSampleParameter() {
|
201
|
+
return g_hashtablez_sample_parameter.load(std::memory_order_acquire);
|
202
|
+
}
|
203
|
+
|
170
204
|
void SetHashtablezSampleParameter(int32_t rate) {
|
205
|
+
SetHashtablezSampleParameterInternal(rate);
|
206
|
+
TriggerHashtablezConfigListener();
|
207
|
+
}
|
208
|
+
|
209
|
+
void SetHashtablezSampleParameterInternal(int32_t rate) {
|
171
210
|
if (rate > 0) {
|
172
211
|
g_hashtablez_sample_parameter.store(rate, std::memory_order_release);
|
173
212
|
} else {
|
@@ -176,7 +215,16 @@ void SetHashtablezSampleParameter(int32_t rate) {
|
|
176
215
|
}
|
177
216
|
}
|
178
217
|
|
218
|
+
int32_t GetHashtablezMaxSamples() {
|
219
|
+
return GlobalHashtablezSampler().GetMaxSamples();
|
220
|
+
}
|
221
|
+
|
179
222
|
void SetHashtablezMaxSamples(int32_t max) {
|
223
|
+
SetHashtablezMaxSamplesInternal(max);
|
224
|
+
TriggerHashtablezConfigListener();
|
225
|
+
}
|
226
|
+
|
227
|
+
void SetHashtablezMaxSamplesInternal(int32_t max) {
|
180
228
|
if (max > 0) {
|
181
229
|
GlobalHashtablezSampler().SetMaxSamples(max);
|
182
230
|
} else {
|
@@ -44,9 +44,9 @@
|
|
44
44
|
#include <memory>
|
45
45
|
#include <vector>
|
46
46
|
|
47
|
+
#include "absl/base/config.h"
|
47
48
|
#include "absl/base/internal/per_thread_tls.h"
|
48
49
|
#include "absl/base/optimization.h"
|
49
|
-
#include "absl/container/internal/have_sse.h"
|
50
50
|
#include "absl/profiling/internal/sample_recorder.h"
|
51
51
|
#include "absl/synchronization/mutex.h"
|
52
52
|
#include "absl/utility/utility.h"
|
@@ -67,7 +67,8 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
67
67
|
|
68
68
|
// Puts the object into a clean state, fills in the logically `const` members,
|
69
69
|
// blocking for any readers that are currently sampling the object.
|
70
|
-
void PrepareForSampling(
|
70
|
+
void PrepareForSampling(int64_t stride, size_t inline_element_size_value)
|
71
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(init_mu);
|
71
72
|
|
72
73
|
// These fields are mutated by the various Record* APIs and need to be
|
73
74
|
// thread-safe.
|
@@ -84,18 +85,18 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
84
85
|
|
85
86
|
// All of the fields below are set by `PrepareForSampling`, they must not be
|
86
87
|
// mutated in `Record*` functions. They are logically `const` in that sense.
|
87
|
-
// These are guarded by init_mu, but that is not externalized to clients,
|
88
|
-
// can
|
89
|
-
// lock.
|
88
|
+
// These are guarded by init_mu, but that is not externalized to clients,
|
89
|
+
// which can read them only during `SampleRecorder::Iterate` which will hold
|
90
|
+
// the lock.
|
90
91
|
static constexpr int kMaxStackDepth = 64;
|
91
92
|
absl::Time create_time;
|
92
93
|
int32_t depth;
|
93
94
|
void* stack[kMaxStackDepth];
|
94
|
-
size_t inline_element_size;
|
95
|
+
size_t inline_element_size; // How big is the slot?
|
95
96
|
};
|
96
97
|
|
97
98
|
inline void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length) {
|
98
|
-
#
|
99
|
+
#ifdef ABSL_INTERNAL_HAVE_SSE2
|
99
100
|
total_probe_length /= 16;
|
100
101
|
#else
|
101
102
|
total_probe_length /= 8;
|
@@ -144,7 +145,15 @@ inline void RecordEraseSlow(HashtablezInfo* info) {
|
|
144
145
|
std::memory_order_relaxed);
|
145
146
|
}
|
146
147
|
|
147
|
-
|
148
|
+
struct SamplingState {
|
149
|
+
int64_t next_sample;
|
150
|
+
// When we make a sampling decision, we record that distance so we can weight
|
151
|
+
// each sample.
|
152
|
+
int64_t sample_stride;
|
153
|
+
};
|
154
|
+
|
155
|
+
HashtablezInfo* SampleSlow(SamplingState& next_sample,
|
156
|
+
size_t inline_element_size);
|
148
157
|
void UnsampleSlow(HashtablezInfo* info);
|
149
158
|
|
150
159
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
@@ -234,7 +243,7 @@ class HashtablezInfoHandle {
|
|
234
243
|
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
235
244
|
|
236
245
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
237
|
-
extern ABSL_PER_THREAD_TLS_KEYWORD
|
246
|
+
extern ABSL_PER_THREAD_TLS_KEYWORD SamplingState global_next_sample;
|
238
247
|
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
239
248
|
|
240
249
|
// Returns an RAII sampling handle that manages registration and unregistation
|
@@ -242,11 +251,11 @@ extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample;
|
|
242
251
|
inline HashtablezInfoHandle Sample(
|
243
252
|
size_t inline_element_size ABSL_ATTRIBUTE_UNUSED) {
|
244
253
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
245
|
-
if (ABSL_PREDICT_TRUE(--global_next_sample > 0)) {
|
254
|
+
if (ABSL_PREDICT_TRUE(--global_next_sample.next_sample > 0)) {
|
246
255
|
return HashtablezInfoHandle(nullptr);
|
247
256
|
}
|
248
257
|
return HashtablezInfoHandle(
|
249
|
-
SampleSlow(
|
258
|
+
SampleSlow(global_next_sample, inline_element_size));
|
250
259
|
#else
|
251
260
|
return HashtablezInfoHandle(nullptr);
|
252
261
|
#endif // !ABSL_PER_THREAD_TLS
|
@@ -258,14 +267,23 @@ using HashtablezSampler =
|
|
258
267
|
// Returns a global Sampler.
|
259
268
|
HashtablezSampler& GlobalHashtablezSampler();
|
260
269
|
|
270
|
+
using HashtablezConfigListener = void (*)();
|
271
|
+
void SetHashtablezConfigListener(HashtablezConfigListener l);
|
272
|
+
|
261
273
|
// Enables or disables sampling for Swiss tables.
|
274
|
+
bool IsHashtablezEnabled();
|
262
275
|
void SetHashtablezEnabled(bool enabled);
|
276
|
+
void SetHashtablezEnabledInternal(bool enabled);
|
263
277
|
|
264
278
|
// Sets the rate at which Swiss tables will be sampled.
|
279
|
+
int32_t GetHashtablezSampleParameter();
|
265
280
|
void SetHashtablezSampleParameter(int32_t rate);
|
281
|
+
void SetHashtablezSampleParameterInternal(int32_t rate);
|
266
282
|
|
267
283
|
// Sets a soft max for the number of samples that will be kept.
|
284
|
+
int32_t GetHashtablezMaxSamples();
|
268
285
|
void SetHashtablezMaxSamples(int32_t max);
|
286
|
+
void SetHashtablezMaxSamplesInternal(int32_t max);
|
269
287
|
|
270
288
|
// Configuration override.
|
271
289
|
// This allows process-wide sampling without depending on order of
|
@@ -40,7 +40,6 @@ namespace inlined_vector_internal {
|
|
40
40
|
#if !defined(__clang__) && defined(__GNUC__)
|
41
41
|
#pragma GCC diagnostic push
|
42
42
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
43
|
-
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
44
43
|
#endif
|
45
44
|
|
46
45
|
template <typename A>
|
@@ -94,16 +93,30 @@ struct TypeIdentity {
|
|
94
93
|
template <typename T>
|
95
94
|
using NoTypeDeduction = typename TypeIdentity<T>::type;
|
96
95
|
|
96
|
+
template <typename A, bool IsTriviallyDestructible =
|
97
|
+
absl::is_trivially_destructible<ValueType<A>>::value>
|
98
|
+
struct DestroyAdapter;
|
99
|
+
|
97
100
|
template <typename A>
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
+
struct DestroyAdapter<A, /* IsTriviallyDestructible */ false> {
|
102
|
+
static void DestroyElements(A& allocator, Pointer<A> destroy_first,
|
103
|
+
SizeType<A> destroy_size) {
|
101
104
|
for (SizeType<A> i = destroy_size; i != 0;) {
|
102
105
|
--i;
|
103
106
|
AllocatorTraits<A>::destroy(allocator, destroy_first + i);
|
104
107
|
}
|
105
108
|
}
|
106
|
-
}
|
109
|
+
};
|
110
|
+
|
111
|
+
template <typename A>
|
112
|
+
struct DestroyAdapter<A, /* IsTriviallyDestructible */ true> {
|
113
|
+
static void DestroyElements(A& allocator, Pointer<A> destroy_first,
|
114
|
+
SizeType<A> destroy_size) {
|
115
|
+
static_cast<void>(allocator);
|
116
|
+
static_cast<void>(destroy_first);
|
117
|
+
static_cast<void>(destroy_size);
|
118
|
+
}
|
119
|
+
};
|
107
120
|
|
108
121
|
template <typename A>
|
109
122
|
struct Allocation {
|
@@ -133,7 +146,7 @@ void ConstructElements(NoTypeDeduction<A>& allocator,
|
|
133
146
|
for (SizeType<A> i = 0; i < construct_size; ++i) {
|
134
147
|
ABSL_INTERNAL_TRY { values.ConstructNext(allocator, construct_first + i); }
|
135
148
|
ABSL_INTERNAL_CATCH_ANY {
|
136
|
-
|
149
|
+
DestroyAdapter<A>::DestroyElements(allocator, construct_first, i);
|
137
150
|
ABSL_INTERNAL_RETHROW;
|
138
151
|
}
|
139
152
|
}
|
@@ -253,7 +266,7 @@ class ConstructionTransaction {
|
|
253
266
|
|
254
267
|
~ConstructionTransaction() {
|
255
268
|
if (DidConstruct()) {
|
256
|
-
|
269
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), GetData(), GetSize());
|
257
270
|
}
|
258
271
|
}
|
259
272
|
|
@@ -297,10 +310,10 @@ class Storage {
|
|
297
310
|
// Storage Constructors and Destructor
|
298
311
|
// ---------------------------------------------------------------------------
|
299
312
|
|
300
|
-
Storage() : metadata_(A(), /* size and is_allocated */
|
313
|
+
Storage() : metadata_(A(), /* size and is_allocated */ 0u) {}
|
301
314
|
|
302
315
|
explicit Storage(const A& allocator)
|
303
|
-
: metadata_(allocator, /* size and is_allocated */
|
316
|
+
: metadata_(allocator, /* size and is_allocated */ 0u) {}
|
304
317
|
|
305
318
|
~Storage() {
|
306
319
|
if (GetSizeAndIsAllocated() == 0) {
|
@@ -416,7 +429,7 @@ class Storage {
|
|
416
429
|
}
|
417
430
|
|
418
431
|
void SubtractSize(SizeType<A> count) {
|
419
|
-
|
432
|
+
ABSL_HARDENING_ASSERT(count <= GetSize());
|
420
433
|
|
421
434
|
GetSizeAndIsAllocated() -= count << static_cast<SizeType<A>>(1);
|
422
435
|
}
|
@@ -427,7 +440,8 @@ class Storage {
|
|
427
440
|
}
|
428
441
|
|
429
442
|
void MemcpyFrom(const Storage& other_storage) {
|
430
|
-
|
443
|
+
ABSL_HARDENING_ASSERT(IsMemcpyOk<A>::value ||
|
444
|
+
other_storage.GetIsAllocated());
|
431
445
|
|
432
446
|
GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated();
|
433
447
|
data_ = other_storage.data_;
|
@@ -469,14 +483,14 @@ class Storage {
|
|
469
483
|
template <typename T, size_t N, typename A>
|
470
484
|
void Storage<T, N, A>::DestroyContents() {
|
471
485
|
Pointer<A> data = GetIsAllocated() ? GetAllocatedData() : GetInlinedData();
|
472
|
-
|
486
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), data, GetSize());
|
473
487
|
DeallocateIfAllocated();
|
474
488
|
}
|
475
489
|
|
476
490
|
template <typename T, size_t N, typename A>
|
477
491
|
void Storage<T, N, A>::InitFrom(const Storage& other) {
|
478
492
|
const SizeType<A> n = other.GetSize();
|
479
|
-
|
493
|
+
ABSL_HARDENING_ASSERT(n > 0); // Empty sources handled handled in caller.
|
480
494
|
ConstPointer<A> src;
|
481
495
|
Pointer<A> dst;
|
482
496
|
if (!other.GetIsAllocated()) {
|
@@ -508,8 +522,8 @@ template <typename ValueAdapter>
|
|
508
522
|
auto Storage<T, N, A>::Initialize(ValueAdapter values, SizeType<A> new_size)
|
509
523
|
-> void {
|
510
524
|
// Only callable from constructors!
|
511
|
-
|
512
|
-
|
525
|
+
ABSL_HARDENING_ASSERT(!GetIsAllocated());
|
526
|
+
ABSL_HARDENING_ASSERT(GetSize() == 0);
|
513
527
|
|
514
528
|
Pointer<A> construct_data;
|
515
529
|
if (new_size > GetInlinedCapacity()) {
|
@@ -566,7 +580,8 @@ auto Storage<T, N, A>::Assign(ValueAdapter values, SizeType<A> new_size)
|
|
566
580
|
ConstructElements<A>(GetAllocator(), construct_loop.data(), values,
|
567
581
|
construct_loop.size());
|
568
582
|
|
569
|
-
|
583
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), destroy_loop.data(),
|
584
|
+
destroy_loop.size());
|
570
585
|
|
571
586
|
if (allocation_tx.DidAllocate()) {
|
572
587
|
DeallocateIfAllocated();
|
@@ -587,7 +602,7 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, SizeType<A> new_size)
|
|
587
602
|
A& alloc = GetAllocator();
|
588
603
|
if (new_size <= size) {
|
589
604
|
// Destroy extra old elements.
|
590
|
-
|
605
|
+
DestroyAdapter<A>::DestroyElements(alloc, base + new_size, size - new_size);
|
591
606
|
} else if (new_size <= storage_view.capacity) {
|
592
607
|
// Construct new elements in place.
|
593
608
|
ConstructElements<A>(alloc, base + size, values, new_size - size);
|
@@ -595,7 +610,7 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, SizeType<A> new_size)
|
|
595
610
|
// Steps:
|
596
611
|
// a. Allocate new backing store.
|
597
612
|
// b. Construct new elements in new backing store.
|
598
|
-
// c. Move existing elements from old backing store to
|
613
|
+
// c. Move existing elements from old backing store to new backing store.
|
599
614
|
// d. Destroy all elements in old backing store.
|
600
615
|
// Use transactional wrappers for the first two steps so we can roll
|
601
616
|
// back if necessary due to exceptions.
|
@@ -611,7 +626,7 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, SizeType<A> new_size)
|
|
611
626
|
(MoveIterator<A>(base)));
|
612
627
|
ConstructElements<A>(alloc, new_data, move_values, size);
|
613
628
|
|
614
|
-
|
629
|
+
DestroyAdapter<A>::DestroyElements(alloc, base, size);
|
615
630
|
std::move(construction_tx).Commit();
|
616
631
|
DeallocateIfAllocated();
|
617
632
|
SetAllocation(std::move(allocation_tx).Release());
|
@@ -650,7 +665,8 @@ auto Storage<T, N, A>::Insert(ConstIterator<A> pos, ValueAdapter values,
|
|
650
665
|
ConstructElements<A>(GetAllocator(), new_data + insert_end_index,
|
651
666
|
move_values, storage_view.size - insert_index);
|
652
667
|
|
653
|
-
|
668
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), storage_view.data,
|
669
|
+
storage_view.size);
|
654
670
|
|
655
671
|
std::move(construction_tx).Commit();
|
656
672
|
std::move(move_construction_tx).Commit();
|
@@ -753,7 +769,8 @@ auto Storage<T, N, A>::EmplaceBackSlow(Args&&... args) -> Reference<A> {
|
|
753
769
|
ABSL_INTERNAL_RETHROW;
|
754
770
|
}
|
755
771
|
// Destroy elements in old backing store.
|
756
|
-
|
772
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), storage_view.data,
|
773
|
+
storage_view.size);
|
757
774
|
|
758
775
|
DeallocateIfAllocated();
|
759
776
|
SetAllocation(std::move(allocation_tx).Release());
|
@@ -778,9 +795,9 @@ auto Storage<T, N, A>::Erase(ConstIterator<A> from, ConstIterator<A> to)
|
|
778
795
|
AssignElements<A>(storage_view.data + erase_index, move_values,
|
779
796
|
storage_view.size - erase_end_index);
|
780
797
|
|
781
|
-
|
782
|
-
|
783
|
-
|
798
|
+
DestroyAdapter<A>::DestroyElements(
|
799
|
+
GetAllocator(), storage_view.data + (storage_view.size - erase_size),
|
800
|
+
erase_size);
|
784
801
|
|
785
802
|
SubtractSize(erase_size);
|
786
803
|
return Iterator<A>(storage_view.data + erase_index);
|
@@ -804,7 +821,8 @@ auto Storage<T, N, A>::Reserve(SizeType<A> requested_capacity) -> void {
|
|
804
821
|
ConstructElements<A>(GetAllocator(), new_data, move_values,
|
805
822
|
storage_view.size);
|
806
823
|
|
807
|
-
|
824
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), storage_view.data,
|
825
|
+
storage_view.size);
|
808
826
|
|
809
827
|
DeallocateIfAllocated();
|
810
828
|
SetAllocation(std::move(allocation_tx).Release());
|
@@ -814,7 +832,7 @@ auto Storage<T, N, A>::Reserve(SizeType<A> requested_capacity) -> void {
|
|
814
832
|
template <typename T, size_t N, typename A>
|
815
833
|
auto Storage<T, N, A>::ShrinkToFit() -> void {
|
816
834
|
// May only be called on allocated instances!
|
817
|
-
|
835
|
+
ABSL_HARDENING_ASSERT(GetIsAllocated());
|
818
836
|
|
819
837
|
StorageView<A> storage_view{GetAllocatedData(), GetSize(),
|
820
838
|
GetAllocatedCapacity()};
|
@@ -847,7 +865,8 @@ auto Storage<T, N, A>::ShrinkToFit() -> void {
|
|
847
865
|
ABSL_INTERNAL_RETHROW;
|
848
866
|
}
|
849
867
|
|
850
|
-
|
868
|
+
DestroyAdapter<A>::DestroyElements(GetAllocator(), storage_view.data,
|
869
|
+
storage_view.size);
|
851
870
|
|
852
871
|
MallocAdapter<A>::Deallocate(GetAllocator(), storage_view.data,
|
853
872
|
storage_view.capacity);
|
@@ -862,7 +881,7 @@ auto Storage<T, N, A>::ShrinkToFit() -> void {
|
|
862
881
|
template <typename T, size_t N, typename A>
|
863
882
|
auto Storage<T, N, A>::Swap(Storage* other_storage_ptr) -> void {
|
864
883
|
using std::swap;
|
865
|
-
|
884
|
+
ABSL_HARDENING_ASSERT(this != other_storage_ptr);
|
866
885
|
|
867
886
|
if (GetIsAllocated() && other_storage_ptr->GetIsAllocated()) {
|
868
887
|
swap(data_.allocated, other_storage_ptr->data_.allocated);
|
@@ -883,9 +902,10 @@ auto Storage<T, N, A>::Swap(Storage* other_storage_ptr) -> void {
|
|
883
902
|
move_values,
|
884
903
|
large_ptr->GetSize() - small_ptr->GetSize());
|
885
904
|
|
886
|
-
|
887
|
-
|
888
|
-
|
905
|
+
DestroyAdapter<A>::DestroyElements(
|
906
|
+
large_ptr->GetAllocator(),
|
907
|
+
large_ptr->GetInlinedData() + small_ptr->GetSize(),
|
908
|
+
large_ptr->GetSize() - small_ptr->GetSize());
|
889
909
|
} else {
|
890
910
|
Storage* allocated_ptr = this;
|
891
911
|
Storage* inlined_ptr = other_storage_ptr;
|
@@ -904,23 +924,24 @@ auto Storage<T, N, A>::Swap(Storage* other_storage_ptr) -> void {
|
|
904
924
|
inlined_ptr->GetSize());
|
905
925
|
}
|
906
926
|
ABSL_INTERNAL_CATCH_ANY {
|
907
|
-
allocated_ptr->SetAllocation(
|
908
|
-
|
927
|
+
allocated_ptr->SetAllocation(Allocation<A>{
|
928
|
+
allocated_storage_view.data, allocated_storage_view.capacity});
|
909
929
|
ABSL_INTERNAL_RETHROW;
|
910
930
|
}
|
911
931
|
|
912
|
-
|
913
|
-
|
932
|
+
DestroyAdapter<A>::DestroyElements(inlined_ptr->GetAllocator(),
|
933
|
+
inlined_ptr->GetInlinedData(),
|
934
|
+
inlined_ptr->GetSize());
|
914
935
|
|
915
|
-
inlined_ptr->SetAllocation(
|
916
|
-
|
936
|
+
inlined_ptr->SetAllocation(Allocation<A>{allocated_storage_view.data,
|
937
|
+
allocated_storage_view.capacity});
|
917
938
|
}
|
918
939
|
|
919
940
|
swap(GetSizeAndIsAllocated(), other_storage_ptr->GetSizeAndIsAllocated());
|
920
941
|
swap(GetAllocator(), other_storage_ptr->GetAllocator());
|
921
942
|
}
|
922
943
|
|
923
|
-
// End ignore "array-bounds"
|
944
|
+
// End ignore "array-bounds"
|
924
945
|
#if !defined(__clang__) && defined(__GNUC__)
|
925
946
|
#pragma GCC diagnostic pop
|
926
947
|
#endif
|
@@ -23,13 +23,17 @@ namespace absl {
|
|
23
23
|
ABSL_NAMESPACE_BEGIN
|
24
24
|
namespace container_internal {
|
25
25
|
|
26
|
+
// A single block of empty control bytes for tables without any slots allocated.
|
27
|
+
// This enables removing a branch in the hot path of find().
|
26
28
|
alignas(16) ABSL_CONST_INIT ABSL_DLL const ctrl_t kEmptyGroup[16] = {
|
27
29
|
ctrl_t::kSentinel, ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty,
|
28
30
|
ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty,
|
29
31
|
ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty,
|
30
32
|
ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty, ctrl_t::kEmpty};
|
31
33
|
|
34
|
+
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
32
35
|
constexpr size_t Group::kWidth;
|
36
|
+
#endif
|
33
37
|
|
34
38
|
// Returns "random" seed.
|
35
39
|
inline size_t RandomSeed() {
|