|
|
|
#
|
|
|
|
# Copyright 2017 The Abseil Authors.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
#
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
strings
|
|
|
|
HDRS
|
|
|
|
"ascii.h"
|
|
|
|
"charconv.h"
|
|
|
|
"escaping.h"
|
|
|
|
"internal/string_constant.h"
|
|
|
|
"match.h"
|
|
|
|
"numbers.h"
|
|
|
|
"str_cat.h"
|
|
|
|
"str_join.h"
|
|
|
|
"str_replace.h"
|
|
|
|
"str_split.h"
|
|
|
|
"string_view.h"
|
|
|
|
"strip.h"
|
|
|
|
"substitute.h"
|
|
|
|
SRCS
|
|
|
|
"ascii.cc"
|
|
|
|
"charconv.cc"
|
|
|
|
"escaping.cc"
|
|
|
|
"internal/charconv_bigint.cc"
|
|
|
|
"internal/charconv_bigint.h"
|
|
|
|
"internal/charconv_parse.cc"
|
|
|
|
"internal/charconv_parse.h"
|
|
|
|
"internal/memutil.cc"
|
|
|
|
"internal/memutil.h"
|
|
|
|
"internal/stl_type_traits.h"
|
|
|
|
"internal/str_join_internal.h"
|
|
|
|
"internal/str_split_internal.h"
|
|
|
|
"match.cc"
|
|
|
|
"numbers.cc"
|
|
|
|
"str_cat.cc"
|
|
|
|
"str_replace.cc"
|
|
|
|
"str_split.cc"
|
|
|
|
"string_view.cc"
|
|
|
|
"substitute.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings_internal
|
|
|
|
absl::base
|
|
|
|
absl::bits
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::endian
|
|
|
|
absl::int128
|
|
|
|
absl::memory
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::throw_delegate
|
|
|
|
absl::type_traits
|
|
|
|
PUBLIC
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
strings_internal
|
|
|
|
HDRS
|
|
|
|
"internal/char_map.h"
|
|
|
|
"internal/escaping.cc"
|
|
|
|
"internal/escaping.h"
|
|
|
|
"internal/ostringstream.h"
|
|
|
|
"internal/resize_uninitialized.h"
|
|
|
|
"internal/utf8.h"
|
|
|
|
SRCS
|
|
|
|
"internal/ostringstream.cc"
|
|
|
|
"internal/utf8.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::endian
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::type_traits
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
match_test
|
|
|
|
SRCS
|
|
|
|
"match_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::base
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
escaping_test
|
|
|
|
SRCS
|
|
|
|
"escaping_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
absl::fixed_array
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
ascii_test
|
|
|
|
SRCS
|
|
|
|
"ascii_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
memutil_test
|
|
|
|
SRCS
|
|
|
|
"internal/memutil.h"
|
|
|
|
"internal/memutil_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
utf8_test
|
|
|
|
SRCS
|
|
|
|
"internal/utf8_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings_internal
|
|
|
|
absl::base
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
string_constant_test
|
|
|
|
SRCS
|
|
|
|
"internal/string_constant_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::type_traits
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
string_view_test
|
|
|
|
SRCS
|
|
|
|
"string_view_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::dynamic_annotations
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
substitute_test
|
|
|
|
SRCS
|
|
|
|
"substitute_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_replace_test
|
|
|
|
SRCS
|
|
|
|
"str_replace_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_split_test
|
|
|
|
SRCS
|
|
|
|
"str_split_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
absl::dynamic_annotations
|
|
|
|
absl::btree
|
|
|
|
absl::flat_hash_map
|
|
|
|
absl::node_hash_map
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
ostringstream_test
|
|
|
|
SRCS
|
|
|
|
"internal/ostringstream_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
resize_uninitialized_test
|
|
|
|
SRCS
|
|
|
|
"internal/resize_uninitialized.h"
|
|
|
|
"internal/resize_uninitialized_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::core_headers
|
|
|
|
absl::type_traits
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_join_test
|
|
|
|
SRCS
|
|
|
|
"str_join_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::base
|
|
|
|
absl::core_headers
|
|
|
|
absl::memory
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_cat_test
|
|
|
|
SRCS
|
|
|
|
"str_cat_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
numbers_test
|
|
|
|
SRCS
|
|
|
|
"internal/numbers_test_common.h"
|
|
|
|
"numbers_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
absl::pow10_helper
|
|
|
|
absl::config
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::random_random
|
|
|
|
absl::random_distributions
|
|
|
|
absl::strings_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
strip_test
|
|
|
|
SRCS
|
|
|
|
"strip_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::base
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
char_map_test
|
|
|
|
SRCS
|
|
|
|
"internal/char_map_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
charconv_test
|
|
|
|
SRCS
|
|
|
|
"charconv_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::str_format
|
|
|
|
absl::pow10_helper
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
charconv_parse_test
|
|
|
|
SRCS
|
|
|
|
"internal/charconv_parse.h"
|
|
|
|
"internal/charconv_parse_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::config
|
|
|
|
absl::raw_logging_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
charconv_bigint_test
|
|
|
|
SRCS
|
|
|
|
"internal/charconv_bigint.h"
|
|
|
|
"internal/charconv_bigint_test.cc"
|
|
|
|
"internal/charconv_parse.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::config
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
str_format
|
|
|
|
HDRS
|
|
|
|
"str_format.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format_internal
|
|
|
|
PUBLIC
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
str_format_internal
|
|
|
|
HDRS
|
|
|
|
"internal/str_format/arg.h"
|
|
|
|
"internal/str_format/bind.h"
|
|
|
|
"internal/str_format/checker.h"
|
|
|
|
"internal/str_format/extension.h"
|
|
|
|
"internal/str_format/float_conversion.h"
|
|
|
|
"internal/str_format/output.h"
|
|
|
|
"internal/str_format/parser.h"
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/arg.cc"
|
|
|
|
"internal/str_format/bind.cc"
|
|
|
|
"internal/str_format/extension.cc"
|
|
|
|
"internal/str_format/float_conversion.cc"
|
|
|
|
"internal/str_format/output.cc"
|
|
|
|
"internal/str_format/parser.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::bits
|
|
|
|
absl::strings
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
Export of internal Abseil changes
--
e2de21d54c02b6419c57c0f4e2a16b608deca260 by Evan Brown <ezb@google.com>:
Remove the InsertEnd benchmark.
This benchmark has significantly different possible behaviors that can result in misleading metrics. Specifically, we can have a case where we are deallocating the last node in the b-tree in the erase and then allocating a new node in the insert call repeatedly, whereas normally, we end up just inserting/erasing a value from the last node. Also, the name of the benchmark is misleading because it involves an erase and an insert, but the name only mentions the insert.
PiperOrigin-RevId: 360930639
--
51f6bb97b9cbdb809c31b77e93ce080ca3cba9ea by Benjamin Barenblat <bbaren@google.com>:
Stop testing with double-double random variables
On POWER, long double is often represented as a pair of doubles added
together (double-double arithmetic). We’ve already special-cased
double-double arithmetic in a number of tests, but compiler
bugs [1, 2, 3] have now triggered both false positives and false
negatives, which suggests testing with double doubles is unlikely to
yield useful signal. Remove the special casing and detect if we’re on a
double-double system; if so, just don’t test long doubles.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048
[2] https://bugs.llvm.org/show_bug.cgi?id=49131
[3] https://bugs.llvm.org/show_bug.cgi?id=49132
PiperOrigin-RevId: 360793161
--
07fb4d7932c2f5d711c480f759dacb0be60f975e by Abseil Team <absl-team@google.com>:
internal change
PiperOrigin-RevId: 360712825
GitOrigin-RevId: e2de21d54c02b6419c57c0f4e2a16b608deca260
Change-Id: I98389b5a8789dcc8f35abc00c767e909181665f0
4 years ago
|
|
|
absl::numeric_representation
|
|
|
|
absl::type_traits
|
|
|
|
absl::int128
|
|
|
|
absl::span
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_test
|
|
|
|
SRCS
|
|
|
|
"str_format_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format
|
|
|
|
absl::cord
|
|
|
|
absl::strings
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_extension_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/extension_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format
|
|
|
|
absl::str_format_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_arg_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/arg_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format
|
|
|
|
absl::str_format_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_bind_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/bind_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format_internal
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_checker_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/checker_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_convert_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/convert_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::strings
|
|
|
|
absl::str_format_internal
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::int128
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_output_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/output_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format_internal
|
|
|
|
absl::cord
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
str_format_parser_test
|
|
|
|
SRCS
|
|
|
|
"internal/str_format/parser_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::str_format_internal
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
pow10_helper
|
|
|
|
HDRS
|
|
|
|
"internal/pow10_helper.h"
|
|
|
|
SRCS
|
|
|
|
"internal/pow10_helper.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
TESTONLY
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
pow10_helper_test
|
|
|
|
SRCS
|
|
|
|
"internal/pow10_helper_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::pow10_helper
|
|
|
|
absl::str_format
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cord_internal
|
|
|
|
HDRS
|
|
|
|
"internal/cord_internal.h"
|
|
|
|
"internal/cord_rep_btree.h"
|
|
|
|
"internal/cord_rep_btree_navigator.h"
|
|
|
|
"internal/cord_rep_btree_reader.h"
|
|
|
|
"internal/cord_rep_crc.h"
|
Export of internal Abseil changes
--
1620e8ffaa93ef24510ca60c7fff2a07248ac9f6 by Abseil Team <absl-team@google.com>:
Update comment.
PiperOrigin-RevId: 382858259
--
20db116f28469149d10e0f7f8b976cb903dd4879 by Gennadiy Rozental <rogeeff@google.com>:
Add benchmark running on multiple flags.
Update size_tester to include cost of absl::GetFlag call.
Add size_tester invocation for bool flag.
New benchmark better represent GetFlag usage.
PiperOrigin-RevId: 382820341
--
2e097ad3811c4e329f75b98877a5e74c1d3d84fd by Abseil Team <absl-team@google.com>:
Avoid 64x64->128 multiplication in absl::Hash's mix on AArch64
On AArch64, calculating a 128-bit product is inefficient, because it requires a sequence of two instructions to calculate the upper and lower halves of the result. So calculate a 64-bit product instead.
Making MultType 64-bits means the upper 32 bits of the result do not participate in shift/xor, but the add/multiply gives us sufficient mixing.
PiperOrigin-RevId: 382625931
--
f3ae3f32cb53168c8dc91b766f2932dc87cec503 by Abseil Team <absl-team@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382605191
--
a13631c91bf5478289e1a512ce215c85501a26f7 by Martijn Vels <mvels@google.com>:
Move the Consume() conversion functions out of cord_rep_ring into cord_rep_consume.
This makes these functions generic, so we can repurpose these for the new Btree conversion functions.
PiperOrigin-RevId: 382594902
--
7394c737500c2d8371fcf913b21ad1b321ba499d by Benjamin Barenblat <bbaren@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382569900
--
d72a761f43dc5c9b9510c3a1363177ed26646b5d by Abseil Team <absl-team@google.com>:
Prefer `getentropy` for Emscripten.
It needs a different header, so I've separated it out from the GLIBC
check above.
PiperOrigin-RevId: 382332475
--
74e261dbb467741b2ddd8b490e04c531fdd2f559 by Martijn Vels <mvels@google.com>:
Add BTREE tag for CordRepNode implementing a Btree cord.
This change only forward declared the CordRepBtree class (not implemented yet) and defines the enum value BTREE. While RING and BTREE should never co-exist, we define a new value for BTREE so as not to make transitioning between RING and BTREE harder than it needs to be. This changes shifts the FLAT value / computation from FLAT = 4 to FLAT =5
PiperOrigin-RevId: 382326710
GitOrigin-RevId: 1620e8ffaa93ef24510ca60c7fff2a07248ac9f6
Change-Id: Ia8f99dde3874808f56062bd37ab3e63764099734
3 years ago
|
|
|
"internal/cord_rep_consume.h"
|
|
|
|
"internal/cord_rep_flat.h"
|
|
|
|
"internal/cord_rep_ring.h"
|
|
|
|
"internal/cord_rep_ring_reader.h"
|
|
|
|
SRCS
|
|
|
|
"internal/cord_internal.cc"
|
|
|
|
"internal/cord_rep_btree.cc"
|
|
|
|
"internal/cord_rep_btree_navigator.cc"
|
|
|
|
"internal/cord_rep_btree_reader.cc"
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
"internal/cord_rep_concat.cc"
|
|
|
|
"internal/cord_rep_crc.cc"
|
Export of internal Abseil changes
--
1620e8ffaa93ef24510ca60c7fff2a07248ac9f6 by Abseil Team <absl-team@google.com>:
Update comment.
PiperOrigin-RevId: 382858259
--
20db116f28469149d10e0f7f8b976cb903dd4879 by Gennadiy Rozental <rogeeff@google.com>:
Add benchmark running on multiple flags.
Update size_tester to include cost of absl::GetFlag call.
Add size_tester invocation for bool flag.
New benchmark better represent GetFlag usage.
PiperOrigin-RevId: 382820341
--
2e097ad3811c4e329f75b98877a5e74c1d3d84fd by Abseil Team <absl-team@google.com>:
Avoid 64x64->128 multiplication in absl::Hash's mix on AArch64
On AArch64, calculating a 128-bit product is inefficient, because it requires a sequence of two instructions to calculate the upper and lower halves of the result. So calculate a 64-bit product instead.
Making MultType 64-bits means the upper 32 bits of the result do not participate in shift/xor, but the add/multiply gives us sufficient mixing.
PiperOrigin-RevId: 382625931
--
f3ae3f32cb53168c8dc91b766f2932dc87cec503 by Abseil Team <absl-team@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382605191
--
a13631c91bf5478289e1a512ce215c85501a26f7 by Martijn Vels <mvels@google.com>:
Move the Consume() conversion functions out of cord_rep_ring into cord_rep_consume.
This makes these functions generic, so we can repurpose these for the new Btree conversion functions.
PiperOrigin-RevId: 382594902
--
7394c737500c2d8371fcf913b21ad1b321ba499d by Benjamin Barenblat <bbaren@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382569900
--
d72a761f43dc5c9b9510c3a1363177ed26646b5d by Abseil Team <absl-team@google.com>:
Prefer `getentropy` for Emscripten.
It needs a different header, so I've separated it out from the GLIBC
check above.
PiperOrigin-RevId: 382332475
--
74e261dbb467741b2ddd8b490e04c531fdd2f559 by Martijn Vels <mvels@google.com>:
Add BTREE tag for CordRepNode implementing a Btree cord.
This change only forward declared the CordRepBtree class (not implemented yet) and defines the enum value BTREE. While RING and BTREE should never co-exist, we define a new value for BTREE so as not to make transitioning between RING and BTREE harder than it needs to be. This changes shifts the FLAT value / computation from FLAT = 4 to FLAT =5
PiperOrigin-RevId: 382326710
GitOrigin-RevId: 1620e8ffaa93ef24510ca60c7fff2a07248ac9f6
Change-Id: Ia8f99dde3874808f56062bd37ab3e63764099734
3 years ago
|
|
|
"internal/cord_rep_consume.cc"
|
|
|
|
"internal/cord_rep_ring.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base_internal
|
|
|
|
absl::compressed_tuple
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::endian
|
|
|
|
absl::inlined_vector
|
|
|
|
absl::layout
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
absl::throw_delegate
|
|
|
|
absl::type_traits
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_update_tracker
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_update_tracker.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_update_tracker_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_update_tracker_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
absl::synchronization
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_functions
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_functions.h"
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_functions.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::exponential_biased
|
|
|
|
absl::raw_logging_internal
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_functions_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_functions_test.cc"
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cordz_functions
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_statistics
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_statistics.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
Export of internal Abseil changes
--
ac1df60490c9583e475e22de7adfc40023196fbf by Martijn Vels <mvels@google.com>:
Change Cord constructor(string_view) to explicit make_tree and Cordz tracking
This CL changes the ctor to use an easier to maintain model where Cord code explicitly invokes Cordz update or new / tree logic, which avoids the ambiguity of the 'branched' InlineRep::set_tree code. This removes the need to equip InlineRep with 'MethodIdentifier' or other necessary call info, and also is a cleaner model: InlineRep is carrying too much code now that should plainly sit in Cord, especially with all internal abstractions having moved to InlineData.
See child CL(s) for desired state
PiperOrigin-RevId: 369433619
--
b665af7f586e6c679a8b27d4f78d5a1d2b596058 by Abseil Team <absl-team@google.com>:
Rename the 'Compare' template type to 'LessThan', as the passed-in function is expected to act like operator<. It is worth avoiding confusion with std::compare, which returns an int (-1/0/1), as due to implicit casting this can lead to hard-to-spot bugs.
PiperOrigin-RevId: 369391118
--
c3c775269cad0f4982ec63f3616dd78bb9e52dca by Martijn Vels <mvels@google.com>:
Integrate CordzUpdateTracker into CordzInfo
PiperOrigin-RevId: 369348824
--
771d81ed357496c117179e1daec76eba5155932d by Martijn Vels <mvels@google.com>:
Replace mutex() with Lock() / Unlock() function
Mini design future tracking of CordzInfo sampled cords: CordzInfo holds a CordRep* reference without a reference count. Cord is responsible for synchronizing updates for sampled cords such that the CordRep* contained in CordzInfo is at all times valid. This is done by scoping Lock() and Unlock() calls around the code modifying the code of a sampled cord. For example (using the future CL CordzUpdateScope()):
CordzInfo* cordz_info = get_cordz_info();
CordzUpdateScope scope(cordz_info, CordzUpdateTracker::kRemovePrefix);
CordRep* rep = RemovePrefixImpl(root);
set_tree(rep);
if (cordz_info) {
cordz_info->SetCordRep(rep);
}
On CordzInfo::Unlock(), if the internal rep is null, the cord is no longer sampled, and CordzInfo will be deleted. Thus any update resulting in the Cord being inlined will automatically no longer be sampled.
PiperOrigin-RevId: 369338802
--
5563c12df04a1e965a03b50bdd032739c55c0706 by Martijn Vels <mvels@google.com>:
Add UpdateTracker to CordzStatistics
PiperOrigin-RevId: 369318178
--
6b4d8463722a3e55a3e8f6cb3741a41055e7f83e by Martijn Vels <mvels@google.com>:
Add kClear, kConstructor* and kUnknown values and fix typo
PiperOrigin-RevId: 369297163
--
041adcbc929789d6d53371a8236840fc350e1eeb by Derek Mauro <dmauro@google.com>:
Switch from malloc to operator new in pool_urbg.cc
so it can only fail by throwing/aborting
PiperOrigin-RevId: 369274087
--
5d97a5f43e3f2d02d0a5bbe586d93b5751812981 by Benjamin Barenblat <bbaren@google.com>:
Correct Thumb function bound computation in the symbolizer
On 32-bit ARM, all functions are aligned to multiples of two bytes, and
the lowest-order bit in a function’s address is ignored by the CPU when
computing branch targets. That bit is still present in instructions and
ELF symbol tables, though; it’s repurposed to indicate whether the
function contains ARM or Thumb code. If the symbolizer doesn’t ignore
that bit, it will believe Thumb functions have boundaries that are off
by one byte, so instruct the symbolizer to null out the lowest-order bit
after retrieving it from the symbol table.
PiperOrigin-RevId: 369254082
--
462bb307c6cc332c1e2c3adb5f0cad51804bf937 by Derek Mauro <dmauro@google.com>:
Add a check for malloc failure in pool_urbg.cc
GitHub #940
PiperOrigin-RevId: 369238100
GitOrigin-RevId: ac1df60490c9583e475e22de7adfc40023196fbf
Change-Id: Ic6ec91c62cd3a0031f6a75a43a83da959ece2d25
4 years ago
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::synchronization
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_handle
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_handle.h"
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_handle.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::synchronization
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_handle_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_handle_test.cc"
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cordz_handle
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::memory
|
|
|
|
absl::random_random
|
|
|
|
absl::random_distributions
|
|
|
|
absl::synchronization
|
|
|
|
absl::time
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_info
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_info.h"
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_info.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_functions
|
|
|
|
absl::cordz_handle
|
|
|
|
absl::cordz_statistics
|
Export of internal Abseil changes
--
ac1df60490c9583e475e22de7adfc40023196fbf by Martijn Vels <mvels@google.com>:
Change Cord constructor(string_view) to explicit make_tree and Cordz tracking
This CL changes the ctor to use an easier to maintain model where Cord code explicitly invokes Cordz update or new / tree logic, which avoids the ambiguity of the 'branched' InlineRep::set_tree code. This removes the need to equip InlineRep with 'MethodIdentifier' or other necessary call info, and also is a cleaner model: InlineRep is carrying too much code now that should plainly sit in Cord, especially with all internal abstractions having moved to InlineData.
See child CL(s) for desired state
PiperOrigin-RevId: 369433619
--
b665af7f586e6c679a8b27d4f78d5a1d2b596058 by Abseil Team <absl-team@google.com>:
Rename the 'Compare' template type to 'LessThan', as the passed-in function is expected to act like operator<. It is worth avoiding confusion with std::compare, which returns an int (-1/0/1), as due to implicit casting this can lead to hard-to-spot bugs.
PiperOrigin-RevId: 369391118
--
c3c775269cad0f4982ec63f3616dd78bb9e52dca by Martijn Vels <mvels@google.com>:
Integrate CordzUpdateTracker into CordzInfo
PiperOrigin-RevId: 369348824
--
771d81ed357496c117179e1daec76eba5155932d by Martijn Vels <mvels@google.com>:
Replace mutex() with Lock() / Unlock() function
Mini design future tracking of CordzInfo sampled cords: CordzInfo holds a CordRep* reference without a reference count. Cord is responsible for synchronizing updates for sampled cords such that the CordRep* contained in CordzInfo is at all times valid. This is done by scoping Lock() and Unlock() calls around the code modifying the code of a sampled cord. For example (using the future CL CordzUpdateScope()):
CordzInfo* cordz_info = get_cordz_info();
CordzUpdateScope scope(cordz_info, CordzUpdateTracker::kRemovePrefix);
CordRep* rep = RemovePrefixImpl(root);
set_tree(rep);
if (cordz_info) {
cordz_info->SetCordRep(rep);
}
On CordzInfo::Unlock(), if the internal rep is null, the cord is no longer sampled, and CordzInfo will be deleted. Thus any update resulting in the Cord being inlined will automatically no longer be sampled.
PiperOrigin-RevId: 369338802
--
5563c12df04a1e965a03b50bdd032739c55c0706 by Martijn Vels <mvels@google.com>:
Add UpdateTracker to CordzStatistics
PiperOrigin-RevId: 369318178
--
6b4d8463722a3e55a3e8f6cb3741a41055e7f83e by Martijn Vels <mvels@google.com>:
Add kClear, kConstructor* and kUnknown values and fix typo
PiperOrigin-RevId: 369297163
--
041adcbc929789d6d53371a8236840fc350e1eeb by Derek Mauro <dmauro@google.com>:
Switch from malloc to operator new in pool_urbg.cc
so it can only fail by throwing/aborting
PiperOrigin-RevId: 369274087
--
5d97a5f43e3f2d02d0a5bbe586d93b5751812981 by Benjamin Barenblat <bbaren@google.com>:
Correct Thumb function bound computation in the symbolizer
On 32-bit ARM, all functions are aligned to multiples of two bytes, and
the lowest-order bit in a function’s address is ignored by the CPU when
computing branch targets. That bit is still present in instructions and
ELF symbol tables, though; it’s repurposed to indicate whether the
function contains ARM or Thumb code. If the symbolizer doesn’t ignore
that bit, it will believe Thumb functions have boundaries that are off
by one byte, so instruct the symbolizer to null out the lowest-order bit
after retrieving it from the symbol table.
PiperOrigin-RevId: 369254082
--
462bb307c6cc332c1e2c3adb5f0cad51804bf937 by Derek Mauro <dmauro@google.com>:
Add a check for malloc failure in pool_urbg.cc
GitHub #940
PiperOrigin-RevId: 369238100
GitOrigin-RevId: ac1df60490c9583e475e22de7adfc40023196fbf
Change-Id: Ic6ec91c62cd3a0031f6a75a43a83da959ece2d25
4 years ago
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
absl::inlined_vector
|
|
|
|
absl::span
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::stacktrace
|
|
|
|
absl::synchronization
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_info_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_info_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::cordz_handle
|
|
|
|
absl::cordz_info
|
Export of internal Abseil changes
--
ac1df60490c9583e475e22de7adfc40023196fbf by Martijn Vels <mvels@google.com>:
Change Cord constructor(string_view) to explicit make_tree and Cordz tracking
This CL changes the ctor to use an easier to maintain model where Cord code explicitly invokes Cordz update or new / tree logic, which avoids the ambiguity of the 'branched' InlineRep::set_tree code. This removes the need to equip InlineRep with 'MethodIdentifier' or other necessary call info, and also is a cleaner model: InlineRep is carrying too much code now that should plainly sit in Cord, especially with all internal abstractions having moved to InlineData.
See child CL(s) for desired state
PiperOrigin-RevId: 369433619
--
b665af7f586e6c679a8b27d4f78d5a1d2b596058 by Abseil Team <absl-team@google.com>:
Rename the 'Compare' template type to 'LessThan', as the passed-in function is expected to act like operator<. It is worth avoiding confusion with std::compare, which returns an int (-1/0/1), as due to implicit casting this can lead to hard-to-spot bugs.
PiperOrigin-RevId: 369391118
--
c3c775269cad0f4982ec63f3616dd78bb9e52dca by Martijn Vels <mvels@google.com>:
Integrate CordzUpdateTracker into CordzInfo
PiperOrigin-RevId: 369348824
--
771d81ed357496c117179e1daec76eba5155932d by Martijn Vels <mvels@google.com>:
Replace mutex() with Lock() / Unlock() function
Mini design future tracking of CordzInfo sampled cords: CordzInfo holds a CordRep* reference without a reference count. Cord is responsible for synchronizing updates for sampled cords such that the CordRep* contained in CordzInfo is at all times valid. This is done by scoping Lock() and Unlock() calls around the code modifying the code of a sampled cord. For example (using the future CL CordzUpdateScope()):
CordzInfo* cordz_info = get_cordz_info();
CordzUpdateScope scope(cordz_info, CordzUpdateTracker::kRemovePrefix);
CordRep* rep = RemovePrefixImpl(root);
set_tree(rep);
if (cordz_info) {
cordz_info->SetCordRep(rep);
}
On CordzInfo::Unlock(), if the internal rep is null, the cord is no longer sampled, and CordzInfo will be deleted. Thus any update resulting in the Cord being inlined will automatically no longer be sampled.
PiperOrigin-RevId: 369338802
--
5563c12df04a1e965a03b50bdd032739c55c0706 by Martijn Vels <mvels@google.com>:
Add UpdateTracker to CordzStatistics
PiperOrigin-RevId: 369318178
--
6b4d8463722a3e55a3e8f6cb3741a41055e7f83e by Martijn Vels <mvels@google.com>:
Add kClear, kConstructor* and kUnknown values and fix typo
PiperOrigin-RevId: 369297163
--
041adcbc929789d6d53371a8236840fc350e1eeb by Derek Mauro <dmauro@google.com>:
Switch from malloc to operator new in pool_urbg.cc
so it can only fail by throwing/aborting
PiperOrigin-RevId: 369274087
--
5d97a5f43e3f2d02d0a5bbe586d93b5751812981 by Benjamin Barenblat <bbaren@google.com>:
Correct Thumb function bound computation in the symbolizer
On 32-bit ARM, all functions are aligned to multiples of two bytes, and
the lowest-order bit in a function’s address is ignored by the CPU when
computing branch targets. That bit is still present in instructions and
ELF symbol tables, though; it’s repurposed to indicate whether the
function contains ARM or Thumb code. If the symbolizer doesn’t ignore
that bit, it will believe Thumb functions have boundaries that are off
by one byte, so instruct the symbolizer to null out the lowest-order bit
after retrieving it from the symbol table.
PiperOrigin-RevId: 369254082
--
462bb307c6cc332c1e2c3adb5f0cad51804bf937 by Derek Mauro <dmauro@google.com>:
Add a check for malloc failure in pool_urbg.cc
GitHub #940
PiperOrigin-RevId: 369238100
GitOrigin-RevId: ac1df60490c9583e475e22de7adfc40023196fbf
Change-Id: Ic6ec91c62cd3a0031f6a75a43a83da959ece2d25
4 years ago
|
|
|
absl::cordz_statistics
|
|
|
|
absl::cordz_test_helpers
|
Export of internal Abseil changes
--
ac1df60490c9583e475e22de7adfc40023196fbf by Martijn Vels <mvels@google.com>:
Change Cord constructor(string_view) to explicit make_tree and Cordz tracking
This CL changes the ctor to use an easier to maintain model where Cord code explicitly invokes Cordz update or new / tree logic, which avoids the ambiguity of the 'branched' InlineRep::set_tree code. This removes the need to equip InlineRep with 'MethodIdentifier' or other necessary call info, and also is a cleaner model: InlineRep is carrying too much code now that should plainly sit in Cord, especially with all internal abstractions having moved to InlineData.
See child CL(s) for desired state
PiperOrigin-RevId: 369433619
--
b665af7f586e6c679a8b27d4f78d5a1d2b596058 by Abseil Team <absl-team@google.com>:
Rename the 'Compare' template type to 'LessThan', as the passed-in function is expected to act like operator<. It is worth avoiding confusion with std::compare, which returns an int (-1/0/1), as due to implicit casting this can lead to hard-to-spot bugs.
PiperOrigin-RevId: 369391118
--
c3c775269cad0f4982ec63f3616dd78bb9e52dca by Martijn Vels <mvels@google.com>:
Integrate CordzUpdateTracker into CordzInfo
PiperOrigin-RevId: 369348824
--
771d81ed357496c117179e1daec76eba5155932d by Martijn Vels <mvels@google.com>:
Replace mutex() with Lock() / Unlock() function
Mini design future tracking of CordzInfo sampled cords: CordzInfo holds a CordRep* reference without a reference count. Cord is responsible for synchronizing updates for sampled cords such that the CordRep* contained in CordzInfo is at all times valid. This is done by scoping Lock() and Unlock() calls around the code modifying the code of a sampled cord. For example (using the future CL CordzUpdateScope()):
CordzInfo* cordz_info = get_cordz_info();
CordzUpdateScope scope(cordz_info, CordzUpdateTracker::kRemovePrefix);
CordRep* rep = RemovePrefixImpl(root);
set_tree(rep);
if (cordz_info) {
cordz_info->SetCordRep(rep);
}
On CordzInfo::Unlock(), if the internal rep is null, the cord is no longer sampled, and CordzInfo will be deleted. Thus any update resulting in the Cord being inlined will automatically no longer be sampled.
PiperOrigin-RevId: 369338802
--
5563c12df04a1e965a03b50bdd032739c55c0706 by Martijn Vels <mvels@google.com>:
Add UpdateTracker to CordzStatistics
PiperOrigin-RevId: 369318178
--
6b4d8463722a3e55a3e8f6cb3741a41055e7f83e by Martijn Vels <mvels@google.com>:
Add kClear, kConstructor* and kUnknown values and fix typo
PiperOrigin-RevId: 369297163
--
041adcbc929789d6d53371a8236840fc350e1eeb by Derek Mauro <dmauro@google.com>:
Switch from malloc to operator new in pool_urbg.cc
so it can only fail by throwing/aborting
PiperOrigin-RevId: 369274087
--
5d97a5f43e3f2d02d0a5bbe586d93b5751812981 by Benjamin Barenblat <bbaren@google.com>:
Correct Thumb function bound computation in the symbolizer
On 32-bit ARM, all functions are aligned to multiples of two bytes, and
the lowest-order bit in a function’s address is ignored by the CPU when
computing branch targets. That bit is still present in instructions and
ELF symbol tables, though; it’s repurposed to indicate whether the
function contains ARM or Thumb code. If the symbolizer doesn’t ignore
that bit, it will believe Thumb functions have boundaries that are off
by one byte, so instruct the symbolizer to null out the lowest-order bit
after retrieving it from the symbol table.
PiperOrigin-RevId: 369254082
--
462bb307c6cc332c1e2c3adb5f0cad51804bf937 by Derek Mauro <dmauro@google.com>:
Add a check for malloc failure in pool_urbg.cc
GitHub #940
PiperOrigin-RevId: 369238100
GitOrigin-RevId: ac1df60490c9583e475e22de7adfc40023196fbf
Change-Id: Ic6ec91c62cd3a0031f6a75a43a83da959ece2d25
4 years ago
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::span
|
|
|
|
absl::stacktrace
|
|
|
|
absl::symbolize
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_info_statistics_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_info_statistics_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_sample_token
|
|
|
|
absl::cordz_statistics
|
|
|
|
absl::cordz_update_scope
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::thread_pool
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_sample_token
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_sample_token.h"
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_sample_token.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cordz_handle
|
|
|
|
absl::cordz_info
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_sample_token_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_sample_token_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_handle
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_sample_token
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::memory
|
|
|
|
absl::random_random
|
|
|
|
absl::synchronization
|
|
|
|
absl::thread_pool
|
|
|
|
absl::time
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_update_scope
|
|
|
|
HDRS
|
|
|
|
"internal/cordz_update_scope.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_update_scope_test
|
|
|
|
SRCS
|
|
|
|
"internal/cordz_update_scope_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::cordz_update_scope
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cord
|
|
|
|
HDRS
|
|
|
|
"cord.h"
|
|
|
|
SRCS
|
|
|
|
"cord.cc"
|
|
|
|
"cord_analysis.cc"
|
|
|
|
"cord_analysis.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_DEFAULT_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_functions
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_update_scope
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
absl::endian
|
|
|
|
absl::fixed_array
|
|
|
|
absl::function_ref
|
|
|
|
absl::inlined_vector
|
|
|
|
absl::optional
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::span
|
|
|
|
absl::strings
|
|
|
|
absl::type_traits
|
|
|
|
PUBLIC
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cord_rep_test_util
|
|
|
|
HDRS
|
|
|
|
"internal/cord_rep_test_util.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
TESTONLY
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cord_test_helpers
|
|
|
|
HDRS
|
|
|
|
"cord_test_helpers.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
Export of internal Abseil changes
--
60b8e77be4bab1bbd3b4c3b70054879229634511 by Derek Mauro <dmauro@google.com>:
Use _MSVC_LANG for some C++ dialect checks since MSVC doesn't
set __cplusplus accurately by default.
https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
See GitHub #722.
PiperOrigin-RevId: 371362181
--
5d736accdff04db0e722f377c0d79f2d3ed53263 by Martijn Vels <mvels@google.com>:
Fix the estimated memory size for CordRepExternal
PiperOrigin-RevId: 371350380
--
eaaa1d8a167aeca67a2aa3a098a2b61a9d72172f by Martijn Vels <mvels@google.com>:
Remove flakes by not enforcing re-allocated pointers do never match original
Tests that do multiple updates could end up with the original allocated pointer on a 2nd resize, so the 'EqIfPrivate' should not assume that if we do 'not' have the capacity that all following relocations will never match the original. We only care about 'pointer unchanged if private and there is capacity', trying to establish 'pointer changed at some point due to re-allocation; is pointless.
PiperOrigin-RevId: 371338965
--
d1837bee6bade1902b095c1cbf64231668bb84c5 by Martijn Vels <mvels@google.com>:
Undo inline of small data copy in cord
This leads to a performance regression as the code is not inlined (absent hard FDO inputs), and there are no suitable tail call options.
PiperOrigin-RevId: 371332332
--
06dc64b833069efc7d18b11df607c8c22be690da by Martijn Vels <mvels@google.com>:
Add final instrumentation for Cordz and remove 'old' cordz logic.
This change instruments the last cord function for cordz. It removes the 'old' functions: set_tree, replace_tree, UpdateCordzStatistics and RecordMetrics.
PiperOrigin-RevId: 371219909
--
a5e0be538579c603052feec03e6d9910c43ea787 by Martijn Vels <mvels@google.com>:
Extend the life of CordRep* if inside a snapshot
If a snapshot (potentially) includes the current CordzInfo, we need to extent the lifetime of the CordRep*, as the snapshot 'point in time' observation of the cord should ideally be preserved.
PiperOrigin-RevId: 371146151
--
74d77a89774cd6c8ecdeebee0193b294a39383d6 by Martijn Vels <mvels@google.com>:
Instrument std::string consuming methods: ctor, operator=, Append and Prepend
This change moves the 'steal into CordRep' logic into a separate function so we can use it directly in the ctor, operator assign and append and prepend, allowing Cordz instrumentation with the proper method attributes.
The assign operator is implemented in AssignLargeString leaving the dispatch inlined in cord.h (which as a side effects also allows clean tail calls in the AssignLargeString method)
PiperOrigin-RevId: 371094756
--
b39effc45266b7ce2e7f96caa3b16cb6e3acc2dd by Martijn Vels <mvels@google.com>:
Add Cordz instrumentation to CordReader
PiperOrigin-RevId: 370990181
GitOrigin-RevId: 60b8e77be4bab1bbd3b4c3b70054879229634511
Change-Id: I96af62e6f1a643e8b1228ae01e6c84e33706bb05
4 years ago
|
|
|
absl::config
|
|
|
|
absl::cord
|
|
|
|
absl::cord_internal
|
|
|
|
absl::strings
|
|
|
|
TESTONLY
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_library(
|
|
|
|
NAME
|
|
|
|
cordz_test_helpers
|
|
|
|
HDRS
|
|
|
|
"cordz_test_helpers.h"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_sample_token
|
|
|
|
absl::cordz_statistics
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::core_headers
|
|
|
|
absl::strings
|
|
|
|
TESTONLY
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_test
|
|
|
|
SRCS
|
|
|
|
"cord_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::cord
|
|
|
|
absl::str_format
|
|
|
|
absl::strings
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_test_helpers
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::core_headers
|
|
|
|
absl::endian
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
absl::hash
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
absl::random_random
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::fixed_array
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
Export of internal Abseil changes
--
1620e8ffaa93ef24510ca60c7fff2a07248ac9f6 by Abseil Team <absl-team@google.com>:
Update comment.
PiperOrigin-RevId: 382858259
--
20db116f28469149d10e0f7f8b976cb903dd4879 by Gennadiy Rozental <rogeeff@google.com>:
Add benchmark running on multiple flags.
Update size_tester to include cost of absl::GetFlag call.
Add size_tester invocation for bool flag.
New benchmark better represent GetFlag usage.
PiperOrigin-RevId: 382820341
--
2e097ad3811c4e329f75b98877a5e74c1d3d84fd by Abseil Team <absl-team@google.com>:
Avoid 64x64->128 multiplication in absl::Hash's mix on AArch64
On AArch64, calculating a 128-bit product is inefficient, because it requires a sequence of two instructions to calculate the upper and lower halves of the result. So calculate a 64-bit product instead.
Making MultType 64-bits means the upper 32 bits of the result do not participate in shift/xor, but the add/multiply gives us sufficient mixing.
PiperOrigin-RevId: 382625931
--
f3ae3f32cb53168c8dc91b766f2932dc87cec503 by Abseil Team <absl-team@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382605191
--
a13631c91bf5478289e1a512ce215c85501a26f7 by Martijn Vels <mvels@google.com>:
Move the Consume() conversion functions out of cord_rep_ring into cord_rep_consume.
This makes these functions generic, so we can repurpose these for the new Btree conversion functions.
PiperOrigin-RevId: 382594902
--
7394c737500c2d8371fcf913b21ad1b321ba499d by Benjamin Barenblat <bbaren@google.com>:
Remove homegrown Round implementation
absl/time/duration.cc defined a Round implementation to accommodate old
versions of MSVC that lacked std::round(long double). Abseil no longer
supports those MSVCs, so we don’t need the homegrown implementation
anymore. Remove it, and replace calls to it with std::rint.
PiperOrigin-RevId: 382569900
--
d72a761f43dc5c9b9510c3a1363177ed26646b5d by Abseil Team <absl-team@google.com>:
Prefer `getentropy` for Emscripten.
It needs a different header, so I've separated it out from the GLIBC
check above.
PiperOrigin-RevId: 382332475
--
74e261dbb467741b2ddd8b490e04c531fdd2f559 by Martijn Vels <mvels@google.com>:
Add BTREE tag for CordRepNode implementing a Btree cord.
This change only forward declared the CordRepBtree class (not implemented yet) and defines the enum value BTREE. While RING and BTREE should never co-exist, we define a new value for BTREE so as not to make transitioning between RING and BTREE harder than it needs to be. This changes shifts the FLAT value / computation from FLAT = 4 to FLAT =5
PiperOrigin-RevId: 382326710
GitOrigin-RevId: 1620e8ffaa93ef24510ca60c7fff2a07248ac9f6
Change-Id: Ia8f99dde3874808f56062bd37ab3e63764099734
3 years ago
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_rep_consume_test
|
|
|
|
SRCS
|
|
|
|
"internal/cord_rep_consume_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::core_headers
|
|
|
|
absl::function_ref
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
cord_rep_concat_test
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
SRCS
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
"internal/cord_rep_concat_test.cc"
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
absl::base
|
|
|
|
absl::config
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
absl::cord_internal
|
Export of internal Abseil changes
--
83e4cdf03a4d702b30e69204060de09e462e23c6 by Greg Falcon <gfalcon@google.com>:
Revert the crc addition to RefcountAndFlags, and restore related comments to their original state.
In development, the implementation of SetExpectedCrc() changed, and there is no longer a need to track the CRC status in the refcount.
Since the distinction between IsOne() and IsMutable() is subtle *and unused*, removing it now can help avoid subtle bugs in the future. This distinction can always be added back later, if it proves necessary.
Keep the reserved bit for now; all it costs is one extra mask instruction in the refcount checks, and space for extra state in Cord is always hard to find.
PiperOrigin-RevId: 408647038
--
ee67585cf66954176615271f50f8b278119dd138 by Greg Falcon <gfalcon@google.com>:
Implement Cord::SetExpectedChecksum() and Cord::ExpectedChecksum().
SetExpectedChecksum() will store a uint32_t out-of-band alongside a Cord's data. This value persists through copies and assignments. Mutating operations on a Cord cause the value to be forgotten. ExpectedChecksum() retrieves the stored value, if present.
This API is intended for storing a CRC32C checksum alongside data, allowing checksums to be passed through dataflows and validated at the final step. However, this API is agnostic to the meaning of the stored value. No CRC32C validation is performed by these new APIs.
This implementation adds a new CordRep node, CordRepCrc. A CordRepCrc may (currently) only live at the top of a tree. This allows traversal logic to be agnostic to these nodes, instead putting the needed branches at the mutation level. This also implements the property requested from API review, that any mutation is guaranteed to permanently forget the stored CRC.
PiperOrigin-RevId: 408611221
--
a86f592402b37c854ebdc77d2b9b425451a7a675 by Martijn Vels <mvels@google.com>:
Move 'ExtractResult' into CordRep
The result of an extract operation is logically identical for any tree implementation, and having a single type makes 'tree independent' implementation in cord.cc more concise.
PiperOrigin-RevId: 408332408
--
baa7647e21db59a87f75af9cac62172ce38a0f71 by Abseil Team <absl-team@google.com>:
Replace usages of `assert` macros with `ABSL_HARDENING_ASSERT`.
PiperOrigin-RevId: 408272133
--
c7658133d8662c39fa5035fc93a364c7c3d327e0 by Martijn Vels <mvels@google.com>:
Add CordRepBtree::ExtractAppendBuffer
PiperOrigin-RevId: 407944179
--
5775100363b5890ebfe710fadebf040445eab991 by Martijn Vels <mvels@google.com>:
Add CordRepConcat::ExtractAppendBuffer
PiperOrigin-RevId: 407932968
--
9f520ba1600a93352c78f644a369c7c76195ee86 by Greg Falcon <gfalcon@google.com>:
Add cordz tracking for crc nodes.
This also adds a new kSetExpectedChecksum method to the list of tracked methods. This is presently unused but will be used soon.
PiperOrigin-RevId: 407884120
GitOrigin-RevId: 83e4cdf03a4d702b30e69204060de09e462e23c6
Change-Id: I134ace2d87215813eaa60a282996a33884676c06
3 years ago
|
|
|
absl::cord_rep_test_util
|
|
|
|
absl::core_headers
|
Export of internal Abseil changes
--
f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b by Martijn Vels <mvels@google.com>:
Add common [container.requirements] type definitions to `CharRange` and `ChunkRange`
The presence of these allow these range classes to be used in various utility functions which require some minimum type of container. For example, this change allows tests to use `EXPECT_THAT(cord.Chunks(), ElementsAre(...))`
PiperOrigin-RevId: 406941278
--
0c195f073632e21d9a4bce158047b2ba8551c2d1 by Evan Brown <ezb@google.com>:
Use explicit exponential growth in SubstituteAndAppendArray.
PiperOrigin-RevId: 406931952
--
afb043bccd809a55cab78abadb7548a057d9eda0 by Jorg Brown <jorg@google.com>:
Use longer var names in macro to avoid clang-tidy warning
PiperOrigin-RevId: 406930978
--
80397e2604e6b3d929a34742c3a32581b34d3ac4 by Martijn Vels <mvels@google.com>:
Add future kAppendBuffer and kPrependBuffer API trackers for Cordz sampling
PiperOrigin-RevId: 406912759
--
e910ce919ef83933f08a690e8b7325c7cc5b6d5d by Martijn Vels <mvels@google.com>:
Implement Prepend(string_view) in terms of PrependArray(string_view, MethodIdentifier).
PiperOrigin-RevId: 406891665
--
c9cff43d4c0568ed01f2fca0f6ef038ae03112b5 by Martijn Vels <mvels@google.com>:
Add 'Rebuild' logic to CordRepBtree
There are btree hostile scenarios where an application could perform repeated split/insert/merge operations on a cord leading to a tree exceeding the maximum height. While this should be rare in practice, this change adds a Rebuild() method that will rebuild a tree with a 100% fill factor, and we will invoke this rebuild when a tree exceeds the maximum height. This basically follows the similar 'balance' logic in Concat trees (although the latter is common in Concat uses)
PiperOrigin-RevId: 406875739
--
5b2b8fb88f1ebfdc1c670088152da2cb2ea4c376 by Martijn Vels <mvels@google.com>:
Add 'in place' enabled RemoveSuffix
An in-place RemoveSuffix is more efficient than SubTree() as it can directly modify privately owned nodes and flats allowing easy re-use of free capacity in right-most flats that may turn into Substring edges when using SubTree.
PiperOrigin-RevId: 406431230
--
f09903c0a3d7344f59aaf1380a16ea10829217d4 by Derek Mauro <dmauro@google.com>:
Internal change
PiperOrigin-RevId: 406430373
--
9957af575c33bb18dc170572a4ee8cc5901df6b2 by Greg Falcon <gfalcon@google.com>:
Initial groundwork to allow storing checksum data inside CordRep instances.
This uses a RefcountAndFlags bit that was reserved for this purpose, and will be leveraged in a follow-up change to allow attaching checksums to a Cord's value.
This change splits RefcountAndFlags::IsOne() into two distinct operations:
* IsOne(): This returns true when the associated CordRep is not shared with other threads. This is useful for functions that consume CordRep instances; for example, code that consumes an unshared CordRep can assume ownership of its children without modifying those refcounts.
* IsMutable(): This returns true when the associated CordRep reference is not shared with other threads, *and* does not store an associated checksum value. This is useful for functions that modify a CordRep's contents: code may modify the bytes of a mutable-unshared CordRep without fear of races with other threads, or of invalidating a stored checksum.
The tricky part of this CL is ensuring that the correct choice between IsMutable() and IsOne() was made at each point. An incorrect application of IsOne() could lead to correctness bugs in the future. Code conditioned on IsOne() may delete the CordRep in question, or assume ownership of its children, but must not modify the CordRep's data without explicitly adjusting the CRC.
PiperOrigin-RevId: 406191103
--
686544814079e5ab6d4593cca0c068b510be400a by Martijn Vels <mvels@google.com>:
Reduce the size in the LargeString test when running with Sanitizers
PiperOrigin-RevId: 406186945
--
735b4490bdb695c35731f06ce4b8de14ce2be6ed by Alex Strelnikov <strel@google.com>:
Release absl::SimpleHexAtoi.
PiperOrigin-RevId: 406143188
GitOrigin-RevId: f49e405201d2ffd5955503fa8ad0f08ec0cdfb2b
Change-Id: Ic6527ac40fa03ea02ca813e8bb7868a219544de4
3 years ago
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_rep_btree_test
|
|
|
|
SRCS
|
|
|
|
"internal/cord_rep_btree_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::cleanup
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cord_rep_test_util
|
|
|
|
absl::core_headers
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_rep_btree_navigator_test
|
|
|
|
SRCS
|
|
|
|
"internal/cord_rep_btree_navigator_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cord_rep_test_util
|
|
|
|
absl::core_headers
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_rep_btree_reader_test
|
|
|
|
SRCS
|
|
|
|
"internal/cord_rep_btree_reader_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cord_rep_test_util
|
|
|
|
absl::core_headers
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_rep_crc_test
|
|
|
|
SRCS
|
|
|
|
"internal/cord_rep_crc_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::cord_rep_test_util
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_ring_test
|
|
|
|
SRCS
|
|
|
|
"cord_ring_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::cord_internal
|
|
|
|
absl::core_headers
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cord_ring_reader_test
|
|
|
|
SRCS
|
|
|
|
"cord_ring_reader_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::base
|
|
|
|
absl::cord_internal
|
|
|
|
absl::core_headers
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|
|
|
|
|
|
|
|
absl_cc_test(
|
|
|
|
NAME
|
|
|
|
cordz_test
|
|
|
|
SRCS
|
|
|
|
"cordz_test.cc"
|
|
|
|
COPTS
|
|
|
|
${ABSL_TEST_COPTS}
|
|
|
|
DEPS
|
|
|
|
absl::cord
|
|
|
|
absl::cord_test_helpers
|
|
|
|
absl::cordz_test_helpers
|
|
|
|
absl::cordz_functions
|
|
|
|
absl::cordz_info
|
|
|
|
absl::cordz_sample_token
|
|
|
|
absl::cordz_statistics
|
|
|
|
absl::cordz_update_tracker
|
|
|
|
absl::base
|
|
|
|
absl::config
|
|
|
|
absl::core_headers
|
|
|
|
absl::raw_logging_internal
|
|
|
|
absl::strings
|
|
|
|
GTest::gmock_main
|
|
|
|
)
|