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
@@ -40,88 +40,21 @@ CordRep* ClipSubstring(CordRepSubstring* substring) {
|
|
40
40
|
return child;
|
41
41
|
}
|
42
42
|
|
43
|
-
//
|
44
|
-
// Adds or assumes a reference on `concat->left` and `concat->right`.
|
45
|
-
// Returns an array of 2 elements containing the left and right nodes.
|
46
|
-
std::array<CordRep*, 2> ClipConcat(CordRepConcat* concat) {
|
47
|
-
std::array<CordRep*, 2> result{concat->left, concat->right};
|
48
|
-
if (concat->refcount.IsOne()) {
|
49
|
-
delete concat;
|
50
|
-
} else {
|
51
|
-
CordRep::Ref(result[0]);
|
52
|
-
CordRep::Ref(result[1]);
|
53
|
-
CordRep::Unref(concat);
|
54
|
-
}
|
55
|
-
return result;
|
56
|
-
}
|
43
|
+
} // namespace
|
57
44
|
|
58
|
-
void Consume(
|
45
|
+
void Consume(CordRep* rep, ConsumeFn consume_fn) {
|
59
46
|
size_t offset = 0;
|
60
47
|
size_t length = rep->length;
|
61
|
-
struct Entry {
|
62
|
-
CordRep* rep;
|
63
|
-
size_t offset;
|
64
|
-
size_t length;
|
65
|
-
};
|
66
|
-
absl::InlinedVector<Entry, 40> stack;
|
67
|
-
|
68
|
-
for (;;) {
|
69
|
-
if (rep->tag == CONCAT) {
|
70
|
-
std::array<CordRep*, 2> res = ClipConcat(rep->concat());
|
71
|
-
CordRep* left = res[0];
|
72
|
-
CordRep* right = res[1];
|
73
|
-
|
74
|
-
if (left->length <= offset) {
|
75
|
-
// Don't need left node
|
76
|
-
offset -= left->length;
|
77
|
-
CordRep::Unref(left);
|
78
|
-
rep = right;
|
79
|
-
continue;
|
80
|
-
}
|
81
48
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
CordRep::Unref(right);
|
86
|
-
rep = left;
|
87
|
-
continue;
|
88
|
-
}
|
89
|
-
|
90
|
-
// Need both nodes
|
91
|
-
size_t length_right = length - length_left;
|
92
|
-
if (forward) {
|
93
|
-
stack.push_back({right, 0, length_right});
|
94
|
-
rep = left;
|
95
|
-
length = length_left;
|
96
|
-
} else {
|
97
|
-
stack.push_back({left, offset, length_left});
|
98
|
-
rep = right;
|
99
|
-
offset = 0;
|
100
|
-
length = length_right;
|
101
|
-
}
|
102
|
-
} else if (rep->tag == SUBSTRING) {
|
103
|
-
offset += rep->substring()->start;
|
104
|
-
rep = ClipSubstring(rep->substring());
|
105
|
-
} else {
|
106
|
-
consume_fn(rep, offset, length);
|
107
|
-
if (stack.empty()) return;
|
108
|
-
|
109
|
-
rep = stack.back().rep;
|
110
|
-
offset = stack.back().offset;
|
111
|
-
length = stack.back().length;
|
112
|
-
stack.pop_back();
|
113
|
-
}
|
49
|
+
if (rep->tag == SUBSTRING) {
|
50
|
+
offset += rep->substring()->start;
|
51
|
+
rep = ClipSubstring(rep->substring());
|
114
52
|
}
|
115
|
-
|
116
|
-
|
117
|
-
} // namespace
|
118
|
-
|
119
|
-
void Consume(CordRep* rep, ConsumeFn consume_fn) {
|
120
|
-
return Consume(true, rep, std::move(consume_fn));
|
53
|
+
consume_fn(rep, offset, length);
|
121
54
|
}
|
122
55
|
|
123
56
|
void ReverseConsume(CordRep* rep, ConsumeFn consume_fn) {
|
124
|
-
return Consume(
|
57
|
+
return Consume(rep, std::move(consume_fn));
|
125
58
|
}
|
126
59
|
|
127
60
|
} // namespace cord_internal
|
@@ -0,0 +1,54 @@
|
|
1
|
+
// Copyright 2021 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "absl/strings/internal/cord_rep_crc.h"
|
16
|
+
|
17
|
+
#include <cassert>
|
18
|
+
#include <cstdint>
|
19
|
+
|
20
|
+
#include "absl/base/config.h"
|
21
|
+
#include "absl/strings/internal/cord_internal.h"
|
22
|
+
|
23
|
+
namespace absl {
|
24
|
+
ABSL_NAMESPACE_BEGIN
|
25
|
+
namespace cord_internal {
|
26
|
+
|
27
|
+
CordRepCrc* CordRepCrc::New(CordRep* child, uint32_t crc) {
|
28
|
+
assert(child != nullptr);
|
29
|
+
if (child->IsCrc()) {
|
30
|
+
if (child->refcount.IsOne()) {
|
31
|
+
child->crc()->crc = crc;
|
32
|
+
return child->crc();
|
33
|
+
}
|
34
|
+
CordRep* old = child;
|
35
|
+
child = old->crc()->child;
|
36
|
+
CordRep::Ref(child);
|
37
|
+
CordRep::Unref(old);
|
38
|
+
}
|
39
|
+
auto* new_cordrep = new CordRepCrc;
|
40
|
+
new_cordrep->length = child->length;
|
41
|
+
new_cordrep->tag = cord_internal::CRC;
|
42
|
+
new_cordrep->child = child;
|
43
|
+
new_cordrep->crc = crc;
|
44
|
+
return new_cordrep;
|
45
|
+
}
|
46
|
+
|
47
|
+
void CordRepCrc::Destroy(CordRepCrc* node) {
|
48
|
+
CordRep::Unref(node->child);
|
49
|
+
delete node;
|
50
|
+
}
|
51
|
+
|
52
|
+
} // namespace cord_internal
|
53
|
+
ABSL_NAMESPACE_END
|
54
|
+
} // namespace absl
|
@@ -0,0 +1,102 @@
|
|
1
|
+
// Copyright 2021 The Abseil Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_STRINGS_INTERNAL_CORD_REP_CRC_H_
|
16
|
+
#define ABSL_STRINGS_INTERNAL_CORD_REP_CRC_H_
|
17
|
+
|
18
|
+
#include <cassert>
|
19
|
+
#include <cstdint>
|
20
|
+
|
21
|
+
#include "absl/base/config.h"
|
22
|
+
#include "absl/base/optimization.h"
|
23
|
+
#include "absl/strings/internal/cord_internal.h"
|
24
|
+
|
25
|
+
namespace absl {
|
26
|
+
ABSL_NAMESPACE_BEGIN
|
27
|
+
namespace cord_internal {
|
28
|
+
|
29
|
+
// CordRepCrc is a CordRep node intended only to appear at the top level of a
|
30
|
+
// cord tree. It associates an "expected CRC" with the contained data, to allow
|
31
|
+
// for easy passage of checksum data in Cord data flows.
|
32
|
+
//
|
33
|
+
// From Cord's perspective, the crc value has no semantics; any validation of
|
34
|
+
// the contained checksum is the user's responsibility.
|
35
|
+
struct CordRepCrc : public CordRep {
|
36
|
+
CordRep* child;
|
37
|
+
uint32_t crc;
|
38
|
+
|
39
|
+
// Consumes `child` and returns a CordRepCrc prefixed tree containing `child`.
|
40
|
+
// If the specified `child` is itself a CordRepCrc node, then this method
|
41
|
+
// either replaces the existing node, or directly updates the crc value in it
|
42
|
+
// depending on the node being shared or not, i.e.: refcount.IsOne().
|
43
|
+
// `child` must not be null. Never returns null.
|
44
|
+
static CordRepCrc* New(CordRep* child, uint32_t crc);
|
45
|
+
|
46
|
+
// Destroys (deletes) the provided node. `node` must not be null.
|
47
|
+
static void Destroy(CordRepCrc* node);
|
48
|
+
};
|
49
|
+
|
50
|
+
// Consumes `rep` and returns a CordRep* with any outer CordRepCrc wrapper
|
51
|
+
// removed. This is usually a no-op (returning `rep`), but this will remove and
|
52
|
+
// unref an outer CordRepCrc node.
|
53
|
+
inline CordRep* RemoveCrcNode(CordRep* rep) {
|
54
|
+
assert(rep != nullptr);
|
55
|
+
if (ABSL_PREDICT_FALSE(rep->IsCrc())) {
|
56
|
+
CordRep* child = rep->crc()->child;
|
57
|
+
if (rep->refcount.IsOne()) {
|
58
|
+
delete rep->crc();
|
59
|
+
} else {
|
60
|
+
CordRep::Ref(child);
|
61
|
+
CordRep::Unref(rep);
|
62
|
+
}
|
63
|
+
return child;
|
64
|
+
}
|
65
|
+
return rep;
|
66
|
+
}
|
67
|
+
|
68
|
+
// Returns `rep` if it is not a CordRepCrc node, or its child if it is.
|
69
|
+
// Does not consume or create a reference on `rep` or the returned value.
|
70
|
+
inline CordRep* SkipCrcNode(CordRep* rep) {
|
71
|
+
assert(rep != nullptr);
|
72
|
+
if (ABSL_PREDICT_FALSE(rep->IsCrc())) {
|
73
|
+
return rep->crc()->child;
|
74
|
+
} else {
|
75
|
+
return rep;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
inline const CordRep* SkipCrcNode(const CordRep* rep) {
|
80
|
+
assert(rep != nullptr);
|
81
|
+
if (ABSL_PREDICT_FALSE(rep->IsCrc())) {
|
82
|
+
return rep->crc()->child;
|
83
|
+
} else {
|
84
|
+
return rep;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
inline CordRepCrc* CordRep::crc() {
|
89
|
+
assert(IsCrc());
|
90
|
+
return static_cast<CordRepCrc*>(this);
|
91
|
+
}
|
92
|
+
|
93
|
+
inline const CordRepCrc* CordRep::crc() const {
|
94
|
+
assert(IsCrc());
|
95
|
+
return static_cast<const CordRepCrc*>(this);
|
96
|
+
}
|
97
|
+
|
98
|
+
} // namespace cord_internal
|
99
|
+
ABSL_NAMESPACE_END
|
100
|
+
} // namespace absl
|
101
|
+
|
102
|
+
#endif // ABSL_STRINGS_INTERNAL_CORD_REP_CRC_H_
|
@@ -20,6 +20,8 @@
|
|
20
20
|
#include <cstdint>
|
21
21
|
#include <memory>
|
22
22
|
|
23
|
+
#include "absl/base/config.h"
|
24
|
+
#include "absl/base/macros.h"
|
23
25
|
#include "absl/strings/internal/cord_internal.h"
|
24
26
|
|
25
27
|
namespace absl {
|
@@ -42,23 +44,45 @@ static constexpr size_t kMinFlatSize = 32;
|
|
42
44
|
static constexpr size_t kMaxFlatSize = 4096;
|
43
45
|
static constexpr size_t kMaxFlatLength = kMaxFlatSize - kFlatOverhead;
|
44
46
|
static constexpr size_t kMinFlatLength = kMinFlatSize - kFlatOverhead;
|
47
|
+
static constexpr size_t kMaxLargeFlatSize = 256 * 1024;
|
48
|
+
static constexpr size_t kMaxLargeFlatLength = kMaxLargeFlatSize - kFlatOverhead;
|
45
49
|
|
50
|
+
// kTagBase should make the Size <--> Tag computation resilient
|
51
|
+
// against changes to the value of FLAT when we add a new tag..
|
52
|
+
static constexpr uint8_t kTagBase = FLAT - 4;
|
53
|
+
|
54
|
+
// Converts the provided rounded size to the corresponding tag
|
46
55
|
constexpr uint8_t AllocatedSizeToTagUnchecked(size_t size) {
|
47
|
-
return static_cast<uint8_t>(
|
48
|
-
|
56
|
+
return static_cast<uint8_t>(size <= 512 ? kTagBase + size / 8
|
57
|
+
: size <= 8192
|
58
|
+
? kTagBase + 512 / 8 + size / 64 - 512 / 64
|
59
|
+
: kTagBase + 512 / 8 + ((8192 - 512) / 64) +
|
60
|
+
size / 4096 - 8192 / 4096);
|
61
|
+
}
|
62
|
+
|
63
|
+
// Converts the provided tag to the corresponding allocated size
|
64
|
+
constexpr size_t TagToAllocatedSize(uint8_t tag) {
|
65
|
+
return (tag <= kTagBase + 512 / 8) ? tag * 8 - kTagBase * 8
|
66
|
+
: (tag <= kTagBase + (512 / 8) + ((8192 - 512) / 64))
|
67
|
+
? 512 + tag * 64 - kTagBase * 64 - 512 / 8 * 64
|
68
|
+
: 8192 + tag * 4096 - kTagBase * 4096 -
|
69
|
+
((512 / 8) + ((8192 - 512) / 64)) * 4096;
|
49
70
|
}
|
50
71
|
|
51
|
-
static_assert(kMinFlatSize
|
52
|
-
static_assert(AllocatedSizeToTagUnchecked(
|
72
|
+
static_assert(AllocatedSizeToTagUnchecked(kMinFlatSize) == FLAT, "");
|
73
|
+
static_assert(AllocatedSizeToTagUnchecked(kMaxLargeFlatSize) == MAX_FLAT_TAG,
|
74
|
+
"");
|
53
75
|
|
54
|
-
//
|
55
|
-
|
56
|
-
constexpr size_t RoundUp(size_t n, size_t m) {
|
76
|
+
// RoundUp logically performs `((n + m - 1) / m) * m` to round up to the nearest
|
77
|
+
// multiple of `m`, optimized for the invariant that `m` is a power of 2.
|
78
|
+
constexpr size_t RoundUp(size_t n, size_t m) {
|
79
|
+
return (n + m - 1) & (0 - m);
|
80
|
+
}
|
57
81
|
|
58
82
|
// Returns the size to the nearest equal or larger value that can be
|
59
83
|
// expressed exactly as a tag value.
|
60
84
|
inline size_t RoundUpForTag(size_t size) {
|
61
|
-
return RoundUp(size, (size <=
|
85
|
+
return RoundUp(size, (size <= 512) ? 8 : (size <= 8192 ? 64 : 4096));
|
62
86
|
}
|
63
87
|
|
64
88
|
// Converts the allocated size to a tag, rounding down if the size
|
@@ -71,26 +95,26 @@ inline uint8_t AllocatedSizeToTag(size_t size) {
|
|
71
95
|
return tag;
|
72
96
|
}
|
73
97
|
|
74
|
-
// Converts the provided tag to the corresponding allocated size
|
75
|
-
constexpr size_t TagToAllocatedSize(uint8_t tag) {
|
76
|
-
return (tag <= 129) ? ((tag - 1) * 8) : (1024 + (tag - 129) * 32);
|
77
|
-
}
|
78
|
-
|
79
98
|
// Converts the provided tag to the corresponding available data length
|
80
99
|
constexpr size_t TagToLength(uint8_t tag) {
|
81
100
|
return TagToAllocatedSize(tag) - kFlatOverhead;
|
82
101
|
}
|
83
102
|
|
84
103
|
// Enforce that kMaxFlatSize maps to a well-known exact tag value.
|
85
|
-
static_assert(TagToAllocatedSize(
|
104
|
+
static_assert(TagToAllocatedSize(MAX_FLAT_TAG) == kMaxLargeFlatSize,
|
105
|
+
"Bad tag logic");
|
86
106
|
|
87
107
|
struct CordRepFlat : public CordRep {
|
108
|
+
// Tag for explicit 'large flat' allocation
|
109
|
+
struct Large {};
|
110
|
+
|
88
111
|
// Creates a new flat node.
|
89
|
-
|
112
|
+
template <size_t max_flat_size, typename... Args>
|
113
|
+
static CordRepFlat* NewImpl(size_t len, Args... args ABSL_ATTRIBUTE_UNUSED) {
|
90
114
|
if (len <= kMinFlatLength) {
|
91
115
|
len = kMinFlatLength;
|
92
|
-
} else if (len >
|
93
|
-
len =
|
116
|
+
} else if (len > max_flat_size - kFlatOverhead) {
|
117
|
+
len = max_flat_size - kFlatOverhead;
|
94
118
|
}
|
95
119
|
|
96
120
|
// Round size up so it matches a size we can exactly express in a tag.
|
@@ -101,6 +125,12 @@ struct CordRepFlat : public CordRep {
|
|
101
125
|
return rep;
|
102
126
|
}
|
103
127
|
|
128
|
+
static CordRepFlat* New(size_t len) { return NewImpl<kMaxFlatSize>(len); }
|
129
|
+
|
130
|
+
static CordRepFlat* New(Large, size_t len) {
|
131
|
+
return NewImpl<kMaxLargeFlatSize>(len);
|
132
|
+
}
|
133
|
+
|
104
134
|
// Deletes a CordRepFlat instance created previously through a call to New().
|
105
135
|
// Flat CordReps are allocated and constructed with raw ::operator new and
|
106
136
|
// placement new, and must be destructed and deallocated accordingly.
|
@@ -117,6 +147,17 @@ struct CordRepFlat : public CordRep {
|
|
117
147
|
#endif
|
118
148
|
}
|
119
149
|
|
150
|
+
// Create a CordRepFlat containing `data`, with an optional additional
|
151
|
+
// extra capacity of up to `extra` bytes. Requires that `data.size()`
|
152
|
+
// is less than kMaxFlatLength.
|
153
|
+
static CordRepFlat* Create(absl::string_view data, size_t extra = 0) {
|
154
|
+
assert(data.size() <= kMaxFlatLength);
|
155
|
+
CordRepFlat* flat = New(data.size() + (std::min)(extra, kMaxFlatLength));
|
156
|
+
memcpy(flat->Data(), data.data(), data.size());
|
157
|
+
flat->length = data.size();
|
158
|
+
return flat;
|
159
|
+
}
|
160
|
+
|
120
161
|
// Returns a pointer to the data inside this flat rep.
|
121
162
|
char* Data() { return reinterpret_cast<char*>(storage); }
|
122
163
|
const char* Data() const { return reinterpret_cast<const char*>(storage); }
|
@@ -129,7 +129,9 @@ class CordRepRing::Filler {
|
|
129
129
|
index_type pos_;
|
130
130
|
};
|
131
131
|
|
132
|
-
|
132
|
+
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
133
|
+
constexpr size_t CordRepRing::kMaxCapacity;
|
134
|
+
#endif
|
133
135
|
|
134
136
|
bool CordRepRing::IsValid(std::ostream& output) const {
|
135
137
|
if (capacity_ == 0) {
|
@@ -277,7 +279,7 @@ CordRepRing* CordRepRing::Mutable(CordRepRing* rep, size_t extra) {
|
|
277
279
|
// Get current number of entries, and check for max capacity.
|
278
280
|
size_t entries = rep->entries();
|
279
281
|
|
280
|
-
if (!rep->refcount.
|
282
|
+
if (!rep->refcount.IsOne()) {
|
281
283
|
return Copy(rep, rep->head(), rep->tail(), extra);
|
282
284
|
} else if (entries + extra > rep->capacity()) {
|
283
285
|
const size_t min_grow = rep->capacity() + rep->capacity() / 2;
|
@@ -292,10 +294,10 @@ CordRepRing* CordRepRing::Mutable(CordRepRing* rep, size_t extra) {
|
|
292
294
|
}
|
293
295
|
|
294
296
|
Span<char> CordRepRing::GetAppendBuffer(size_t size) {
|
295
|
-
assert(refcount.
|
297
|
+
assert(refcount.IsOne());
|
296
298
|
index_type back = retreat(tail_);
|
297
299
|
CordRep* child = entry_child(back);
|
298
|
-
if (child->tag >= FLAT && child->refcount.
|
300
|
+
if (child->tag >= FLAT && child->refcount.IsOne()) {
|
299
301
|
size_t capacity = child->flat()->Capacity();
|
300
302
|
pos_type end_pos = entry_end_pos(back);
|
301
303
|
size_t data_offset = entry_data_offset(back);
|
@@ -312,10 +314,10 @@ Span<char> CordRepRing::GetAppendBuffer(size_t size) {
|
|
312
314
|
}
|
313
315
|
|
314
316
|
Span<char> CordRepRing::GetPrependBuffer(size_t size) {
|
315
|
-
assert(refcount.
|
317
|
+
assert(refcount.IsOne());
|
316
318
|
CordRep* child = entry_child(head_);
|
317
319
|
size_t data_offset = entry_data_offset(head_);
|
318
|
-
if (data_offset && child->refcount.
|
320
|
+
if (data_offset && child->refcount.IsOne() && child->tag >= FLAT) {
|
319
321
|
size_t n = (std::min)(data_offset, size);
|
320
322
|
this->length += n;
|
321
323
|
begin_pos_ -= n;
|
@@ -504,7 +506,7 @@ CordRepRing* CordRepRing::Prepend(CordRepRing* rep, CordRep* child) {
|
|
504
506
|
|
505
507
|
CordRepRing* CordRepRing::Append(CordRepRing* rep, absl::string_view data,
|
506
508
|
size_t extra) {
|
507
|
-
if (rep->refcount.
|
509
|
+
if (rep->refcount.IsOne()) {
|
508
510
|
Span<char> avail = rep->GetAppendBuffer(data.length());
|
509
511
|
if (!avail.empty()) {
|
510
512
|
memcpy(avail.data(), data.data(), avail.length());
|
@@ -538,7 +540,7 @@ CordRepRing* CordRepRing::Append(CordRepRing* rep, absl::string_view data,
|
|
538
540
|
|
539
541
|
CordRepRing* CordRepRing::Prepend(CordRepRing* rep, absl::string_view data,
|
540
542
|
size_t extra) {
|
541
|
-
if (rep->refcount.
|
543
|
+
if (rep->refcount.IsOne()) {
|
542
544
|
Span<char> avail = rep->GetPrependBuffer(data.length());
|
543
545
|
if (!avail.empty()) {
|
544
546
|
const char* tail = data.data() + data.length() - avail.length();
|
@@ -678,7 +680,7 @@ CordRepRing* CordRepRing::SubRing(CordRepRing* rep, size_t offset,
|
|
678
680
|
Position tail = rep->FindTail(head.index, offset + len);
|
679
681
|
const size_t new_entries = rep->entries(head.index, tail.index);
|
680
682
|
|
681
|
-
if (rep->refcount.
|
683
|
+
if (rep->refcount.IsOne() && extra <= (rep->capacity() - new_entries)) {
|
682
684
|
// We adopt a privately owned rep and no extra entries needed.
|
683
685
|
if (head.index != rep->head_) UnrefEntries(rep, rep->head_, head.index);
|
684
686
|
if (tail.index != rep->tail_) UnrefEntries(rep, tail.index, rep->tail_);
|
@@ -715,7 +717,7 @@ CordRepRing* CordRepRing::RemovePrefix(CordRepRing* rep, size_t len,
|
|
715
717
|
}
|
716
718
|
|
717
719
|
Position head = rep->Find(len);
|
718
|
-
if (rep->refcount.
|
720
|
+
if (rep->refcount.IsOne()) {
|
719
721
|
if (head.index != rep->head_) UnrefEntries(rep, rep->head_, head.index);
|
720
722
|
rep->head_ = head.index;
|
721
723
|
} else {
|
@@ -745,7 +747,7 @@ CordRepRing* CordRepRing::RemoveSuffix(CordRepRing* rep, size_t len,
|
|
745
747
|
}
|
746
748
|
|
747
749
|
Position tail = rep->FindTail(rep->length - len);
|
748
|
-
if (rep->refcount.
|
750
|
+
if (rep->refcount.IsOne()) {
|
749
751
|
// We adopt a privately owned rep, scrub.
|
750
752
|
if (tail.index != rep->tail_) UnrefEntries(rep, tail.index, rep->tail_);
|
751
753
|
rep->tail_ = tail.index;
|
@@ -20,6 +20,7 @@
|
|
20
20
|
#include "absl/debugging/stacktrace.h"
|
21
21
|
#include "absl/strings/internal/cord_internal.h"
|
22
22
|
#include "absl/strings/internal/cord_rep_btree.h"
|
23
|
+
#include "absl/strings/internal/cord_rep_crc.h"
|
23
24
|
#include "absl/strings/internal/cord_rep_ring.h"
|
24
25
|
#include "absl/strings/internal/cordz_handle.h"
|
25
26
|
#include "absl/strings/internal/cordz_statistics.h"
|
@@ -33,7 +34,9 @@ namespace cord_internal {
|
|
33
34
|
|
34
35
|
using ::absl::base_internal::SpinLockHolder;
|
35
36
|
|
37
|
+
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
36
38
|
constexpr int CordzInfo::kMaxStackDepth;
|
39
|
+
#endif
|
37
40
|
|
38
41
|
ABSL_CONST_INIT CordzInfo::List CordzInfo::global_list_{absl::kConstInit};
|
39
42
|
|
@@ -81,6 +84,14 @@ class CordRepAnalyzer {
|
|
81
84
|
size_t refcount = rep->refcount.Get();
|
82
85
|
RepRef repref{rep, (refcount > 1) ? refcount - 1 : 1};
|
83
86
|
|
87
|
+
// Process the top level CRC node, if present.
|
88
|
+
if (repref.rep->tag == CRC) {
|
89
|
+
statistics_.node_count++;
|
90
|
+
statistics_.node_counts.crc++;
|
91
|
+
memory_usage_.Add(sizeof(CordRepCrc), repref.refcount);
|
92
|
+
repref = repref.Child(repref.rep->crc()->child);
|
93
|
+
}
|
94
|
+
|
84
95
|
// Process all top level linear nodes (substrings and flats).
|
85
96
|
repref = CountLinearReps(repref, memory_usage_);
|
86
97
|
|
@@ -89,8 +100,6 @@ class CordRepAnalyzer {
|
|
89
100
|
AnalyzeRing(repref);
|
90
101
|
} else if (repref.rep->tag == BTREE) {
|
91
102
|
AnalyzeBtree(repref);
|
92
|
-
} else if (repref.rep->tag == CONCAT) {
|
93
|
-
AnalyzeConcat(repref);
|
94
103
|
} else {
|
95
104
|
// We should have either a concat, btree, or ring node if not null.
|
96
105
|
assert(false);
|
@@ -132,14 +141,6 @@ class CordRepAnalyzer {
|
|
132
141
|
}
|
133
142
|
};
|
134
143
|
|
135
|
-
// Returns `rr` if `rr.rep` is not null and a CONCAT type.
|
136
|
-
// Asserts that `rr.rep` is a concat node or null.
|
137
|
-
static RepRef AssertConcat(RepRef repref) {
|
138
|
-
const CordRep* rep = repref.rep;
|
139
|
-
assert(rep == nullptr || rep->tag == CONCAT);
|
140
|
-
return (rep != nullptr && rep->tag == CONCAT) ? repref : RepRef{nullptr, 0};
|
141
|
-
}
|
142
|
-
|
143
144
|
// Counts a flat of the provide allocated size
|
144
145
|
void CountFlat(size_t size) {
|
145
146
|
statistics_.node_count++;
|
@@ -192,34 +193,6 @@ class CordRepAnalyzer {
|
|
192
193
|
return rep;
|
193
194
|
}
|
194
195
|
|
195
|
-
// Analyzes the provided concat node in a flattened recursive way.
|
196
|
-
void AnalyzeConcat(RepRef rep) {
|
197
|
-
absl::InlinedVector<RepRef, 47> pending;
|
198
|
-
|
199
|
-
while (rep.rep != nullptr) {
|
200
|
-
const CordRepConcat* concat = rep.rep->concat();
|
201
|
-
RepRef left = rep.Child(concat->left);
|
202
|
-
RepRef right = rep.Child(concat->right);
|
203
|
-
|
204
|
-
statistics_.node_count++;
|
205
|
-
statistics_.node_counts.concat++;
|
206
|
-
memory_usage_.Add(sizeof(CordRepConcat), rep.refcount);
|
207
|
-
|
208
|
-
right = AssertConcat(CountLinearReps(right, memory_usage_));
|
209
|
-
rep = AssertConcat(CountLinearReps(left, memory_usage_));
|
210
|
-
if (rep.rep != nullptr) {
|
211
|
-
if (right.rep != nullptr) {
|
212
|
-
pending.push_back(right);
|
213
|
-
}
|
214
|
-
} else if (right.rep != nullptr) {
|
215
|
-
rep = right;
|
216
|
-
} else if (!pending.empty()) {
|
217
|
-
rep = pending.back();
|
218
|
-
pending.pop_back();
|
219
|
-
}
|
220
|
-
}
|
221
|
-
}
|
222
|
-
|
223
196
|
// Analyzes the provided ring.
|
224
197
|
void AnalyzeRing(RepRef rep) {
|
225
198
|
statistics_.node_count++;
|
@@ -39,8 +39,8 @@ class CordzUpdateTracker {
|
|
39
39
|
// Tracked update methods.
|
40
40
|
enum MethodIdentifier {
|
41
41
|
kUnknown,
|
42
|
-
kAppendBuffer,
|
43
42
|
kAppendCord,
|
43
|
+
kAppendCordBuffer,
|
44
44
|
kAppendExternalMemory,
|
45
45
|
kAppendString,
|
46
46
|
kAssignCord,
|
@@ -50,16 +50,18 @@ class CordzUpdateTracker {
|
|
50
50
|
kConstructorString,
|
51
51
|
kCordReader,
|
52
52
|
kFlatten,
|
53
|
+
kGetAppendBuffer,
|
53
54
|
kGetAppendRegion,
|
54
55
|
kMakeCordFromExternal,
|
55
56
|
kMoveAppendCord,
|
56
57
|
kMoveAssignCord,
|
57
58
|
kMovePrependCord,
|
58
|
-
kPrependBuffer,
|
59
59
|
kPrependCord,
|
60
|
+
kPrependCordBuffer,
|
60
61
|
kPrependString,
|
61
62
|
kRemovePrefix,
|
62
63
|
kRemoveSuffix,
|
64
|
+
kSetExpectedChecksum,
|
63
65
|
kSubCord,
|
64
66
|
|
65
67
|
// kNumMethods defines the number of entries: must be the last entry.
|
@@ -21,7 +21,7 @@ namespace absl {
|
|
21
21
|
ABSL_NAMESPACE_BEGIN
|
22
22
|
namespace strings_internal {
|
23
23
|
|
24
|
-
const char kBase64Chars[] =
|
24
|
+
ABSL_CONST_INIT const char kBase64Chars[] =
|
25
25
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
26
26
|
|
27
27
|
size_t CalculateBase64EscapedLenInternal(size_t input_len, bool do_padding) {
|
@@ -102,8 +102,8 @@ size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
102
102
|
}
|
103
103
|
}
|
104
104
|
// To save time, we didn't update szdest or szsrc in the loop. So do it now.
|
105
|
-
szdest = limit_dest - cur_dest;
|
106
|
-
szsrc = limit_src - cur_src;
|
105
|
+
szdest = static_cast<size_t>(limit_dest - cur_dest);
|
106
|
+
szsrc = static_cast<size_t>(limit_src - cur_src);
|
107
107
|
|
108
108
|
/* now deal with the tail (<=3 bytes) */
|
109
109
|
switch (szsrc) {
|
@@ -154,7 +154,8 @@ size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
154
154
|
// the loop because the loop above always reads 4 bytes, and the fourth
|
155
155
|
// byte is past the end of the input.
|
156
156
|
if (szdest < 4) return 0;
|
157
|
-
uint32_t in =
|
157
|
+
uint32_t in =
|
158
|
+
(uint32_t{cur_src[0]} << 16) + absl::big_endian::Load16(cur_src + 1);
|
158
159
|
cur_dest[0] = base64[in >> 18];
|
159
160
|
in &= 0x3FFFF;
|
160
161
|
cur_dest[1] = base64[in >> 12];
|
@@ -172,7 +173,7 @@ size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
172
173
|
ABSL_RAW_LOG(FATAL, "Logic problem? szsrc = %zu", szsrc);
|
173
174
|
break;
|
174
175
|
}
|
175
|
-
return (cur_dest - dest);
|
176
|
+
return static_cast<size_t>(cur_dest - dest);
|
176
177
|
}
|
177
178
|
|
178
179
|
} // namespace strings_internal
|
@@ -144,7 +144,7 @@ StringConvertResult FormatConvertImpl(const AbslCord& value,
|
|
144
144
|
size_t space_remaining = 0;
|
145
145
|
|
146
146
|
int width = conv.width();
|
147
|
-
if (width >= 0) space_remaining = width;
|
147
|
+
if (width >= 0) space_remaining = static_cast<size_t>(width);
|
148
148
|
|
149
149
|
size_t to_write = value.size();
|
150
150
|
|