Add SHARD_COUNT support and default COST prioritization to absl_cc_test. Adds optional SHARD_COUNT support to absl_cc_test() in AbseilHelpers.cmake by registering N separate CTest tests with GTEST_TOTAL_SHARDS and GTEST_SHARD_INDEX environment variables, and assigns a higher CTest COST property (100) to sharded tests so CTest schedules them first during parallel test execution. Also aligns SHARD_COUNT in CMakeLists.txt with shard_count in Bazel BUILD files: - Propagates existing Bazel shard_count values (btree_test, btree_instantiate_test, crc_memcpy_test, sequence_lock_test, mutex_test) to CMakeLists.txt. - Adds 4-way sharding in both BUILD and CMakeLists.txt for the remaining slowest tests identified by test suite profiling (long-running CPU/template tests such as raw_hash_set_test, hash_test, cord*_test, str_format_convert_test, and random distribution tests; sleep-bound tests such as waiter_test and simulated_clock_test; and death-test-heavy check tests) to reduce critical-path test latency in both Bazel and CTest. PiperOrigin-RevId: 1001308801
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake index 61e1ae4..271e5ba 100644 --- a/CMake/AbseilHelpers.cmake +++ b/CMake/AbseilHelpers.cmake
@@ -372,6 +372,7 @@ # COPTS: List of private compile options # DEFINES: List of public defines # LINKOPTS: List of link options +# SHARD_COUNT: Number of shards to split the test into for ctest # # Note: # By default, absl_cc_test will always create a binary named absl_${NAME}. @@ -405,7 +406,7 @@ cmake_parse_arguments(ABSL_CC_TEST "" - "NAME" + "NAME;SHARD_COUNT" "SRCS;COPTS;DEFINES;LINKOPTS;DEPS" ${ARGN} ) @@ -461,5 +462,16 @@ target_compile_features(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE}) endif() - add_test(NAME ${_NAME} COMMAND ${_NAME}) + if(ABSL_CC_TEST_SHARD_COUNT AND ABSL_CC_TEST_SHARD_COUNT GREATER 1) + math(EXPR _LAST_SHARD "${ABSL_CC_TEST_SHARD_COUNT} - 1") + foreach(_SHARD RANGE 0 ${_LAST_SHARD}) + add_test(NAME "${_NAME}_shard_${_SHARD}" COMMAND ${_NAME}) + set_tests_properties("${_NAME}_shard_${_SHARD}" PROPERTIES + ENVIRONMENT "GTEST_TOTAL_SHARDS=${ABSL_CC_TEST_SHARD_COUNT};GTEST_SHARD_INDEX=${_SHARD}" + COST 100 + ) + endforeach() + else() + add_test(NAME ${_NAME} COMMAND ${_NAME}) + endif() endfunction()
diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel index 749c54f..2ee5c2b 100644 --- a/absl/base/BUILD.bazel +++ b/absl/base/BUILD.bazel
@@ -565,6 +565,7 @@ srcs = ["spinlock_test_common.cc"], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, tags = [ "no_test_wasm", ],
diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt index 2f8846f..5325df7 100644 --- a/absl/base/CMakeLists.txt +++ b/absl/base/CMakeLists.txt
@@ -533,6 +533,8 @@ absl::core_headers absl::synchronization GTest::gtest_main + SHARD_COUNT + 4 ) # Internal-only target, do not depend on directly.
diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel index 850eaec..7792be0 100644 --- a/absl/container/BUILD.bazel +++ b/absl/container/BUILD.bazel
@@ -845,6 +845,7 @@ srcs = ["internal/raw_hash_set_test.cc"], copts = ABSL_TEST_COPTS, linkstatic = 1, + shard_count = 4, tags = NOTEST_TAGS_MOBILE + [ "no_test_chromiumos_arm", "no_test_chromiumos_armv7",
diff --git a/absl/container/CMakeLists.txt b/absl/container/CMakeLists.txt index 7a2641c..0c07fed 100644 --- a/absl/container/CMakeLists.txt +++ b/absl/container/CMakeLists.txt
@@ -87,6 +87,8 @@ absl::test_allocator absl::test_instance_tracker GTest::gmock_main + SHARD_COUNT + 10 ) absl_cc_test( @@ -106,6 +108,8 @@ absl::flags absl::raw_logging_internal GTest::gmock_main + SHARD_COUNT + 10 ) # Internal-only target, do not depend on directly. @@ -871,6 +875,8 @@ absl::test_instance_tracker absl::type_traits GTest::gmock_main + SHARD_COUNT + 4 ) # Internal-only target, do not depend on directly.
diff --git a/absl/crc/CMakeLists.txt b/absl/crc/CMakeLists.txt index fb9beea..e50b242 100644 --- a/absl/crc/CMakeLists.txt +++ b/absl/crc/CMakeLists.txt
@@ -122,6 +122,8 @@ absl::string_view absl::strings GTest::gtest_main + SHARD_COUNT + 3 ) absl_cc_test(
diff --git a/absl/flags/CMakeLists.txt b/absl/flags/CMakeLists.txt index 0e40085..162b654 100644 --- a/absl/flags/CMakeLists.txt +++ b/absl/flags/CMakeLists.txt
@@ -455,6 +455,8 @@ absl::flags_internal absl::time GTest::gmock_main + SHARD_COUNT + 31 ) absl_cc_test(
diff --git a/absl/hash/BUILD.bazel b/absl/hash/BUILD.bazel index fe76a1d..010668d 100644 --- a/absl/hash/BUILD.bazel +++ b/absl/hash/BUILD.bazel
@@ -89,6 +89,7 @@ ], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, deps = [ ":hash", ":hash_testing",
diff --git a/absl/hash/CMakeLists.txt b/absl/hash/CMakeLists.txt index 2ced4b1..f8e7afa 100644 --- a/absl/hash/CMakeLists.txt +++ b/absl/hash/CMakeLists.txt
@@ -78,6 +78,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test(
diff --git a/absl/log/BUILD.bazel b/absl/log/BUILD.bazel index 2c0a8ff..3e15e0b 100644 --- a/absl/log/BUILD.bazel +++ b/absl/log/BUILD.bazel
@@ -315,6 +315,7 @@ srcs = ["absl_check_test.cc"], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, tags = [ "no_test:os:ios", "no_test_ios", @@ -350,6 +351,7 @@ srcs = ["check_test.cc"], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, tags = [ "no_test:os:ios", "no_test_ios",
diff --git a/absl/log/CMakeLists.txt b/absl/log/CMakeLists.txt index ebc24f3..1da38e4 100644 --- a/absl/log/CMakeLists.txt +++ b/absl/log/CMakeLists.txt
@@ -838,6 +838,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test( @@ -883,6 +885,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test(
diff --git a/absl/random/BUILD.bazel b/absl/random/BUILD.bazel index edc4e93..d63f8f3 100644 --- a/absl/random/BUILD.bazel +++ b/absl/random/BUILD.bazel
@@ -199,6 +199,7 @@ srcs = ["bernoulli_distribution_test.cc"], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, deps = [ ":distributions", ":random", @@ -217,6 +218,7 @@ copts = ABSL_TEST_COPTS, flaky = 1, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, tags = [ "no_test_wasm", ], @@ -326,6 +328,7 @@ ], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, tags = [ # Too Slow. "no_test_android_arm",
diff --git a/absl/random/CMakeLists.txt b/absl/random/CMakeLists.txt index 8a31015..f9d2d60 100644 --- a/absl/random/CMakeLists.txt +++ b/absl/random/CMakeLists.txt
@@ -272,6 +272,8 @@ absl::random_random GTest::gmock GTest::gtest_main + SHARD_COUNT + 4 ) absl_cc_test( @@ -295,6 +297,8 @@ absl::strings GTest::gmock GTest::gtest_main + SHARD_COUNT + 4 ) absl_cc_test( @@ -398,6 +402,8 @@ absl::strings GTest::gmock GTest::gtest_main + SHARD_COUNT + 4 ) absl_cc_test(
diff --git a/absl/strings/BUILD.bazel b/absl/strings/BUILD.bazel index 7711ad2..756300e 100644 --- a/absl/strings/BUILD.bazel +++ b/absl/strings/BUILD.bazel
@@ -598,6 +598,7 @@ timeout = "long", srcs = ["internal/cord_rep_btree_test.cc"], copts = ABSL_TEST_COPTS, + shard_count = 4, visibility = ["//visibility:private"], deps = [ ":cord_internal", @@ -1039,6 +1040,7 @@ timeout = "long", srcs = ["cord_test.cc"], copts = ABSL_TEST_COPTS, + shard_count = 4, visibility = ["//visibility:private"], deps = [ ":cord", @@ -1565,6 +1567,7 @@ timeout = "long", srcs = ["internal/str_format/convert_test.cc"], copts = ABSL_TEST_COPTS, + shard_count = 4, visibility = ["//visibility:private"], deps = [ ":str_format",
diff --git a/absl/strings/CMakeLists.txt b/absl/strings/CMakeLists.txt index 1461d94..8ba84b5 100644 --- a/absl/strings/CMakeLists.txt +++ b/absl/strings/CMakeLists.txt
@@ -714,6 +714,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test( @@ -1196,6 +1198,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test( @@ -1233,6 +1237,8 @@ absl::string_view absl::strings GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test(
diff --git a/absl/synchronization/BUILD.bazel b/absl/synchronization/BUILD.bazel index 977af61..7acbec4 100644 --- a/absl/synchronization/BUILD.bazel +++ b/absl/synchronization/BUILD.bazel
@@ -382,6 +382,7 @@ copts = ABSL_TEST_COPTS, flaky = 1, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, deps = [ ":kernel_timeout_internal", ":synchronization",
diff --git a/absl/synchronization/CMakeLists.txt b/absl/synchronization/CMakeLists.txt index 3502d11..50129ce 100644 --- a/absl/synchronization/CMakeLists.txt +++ b/absl/synchronization/CMakeLists.txt
@@ -198,6 +198,8 @@ absl::thread_pool absl::time GTest::gmock_main + SHARD_COUNT + 25 ) absl_cc_test( @@ -278,6 +280,8 @@ absl::thread_pool absl::time GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test(
diff --git a/absl/time/BUILD.bazel b/absl/time/BUILD.bazel index eaea38a..347e24b 100644 --- a/absl/time/BUILD.bazel +++ b/absl/time/BUILD.bazel
@@ -181,6 +181,7 @@ ], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + shard_count = 4, deps = [ ":clock_interface", ":simulated_clock",
diff --git a/absl/time/CMakeLists.txt b/absl/time/CMakeLists.txt index b141b62..79b99e8 100644 --- a/absl/time/CMakeLists.txt +++ b/absl/time/CMakeLists.txt
@@ -202,6 +202,8 @@ absl::synchronization absl::time GTest::gmock_main + SHARD_COUNT + 4 ) absl_cc_test(