diff options
author | 2020-05-11 23:30:29 +0000 | |
---|---|---|
committer | 2020-05-15 18:06:16 +0100 | |
commit | 883c1346b87537ed93f7d4fd88bbbb041c14d320 (patch) | |
tree | efb8205d15d677d3e3fdf90f0ae09c4a2eba9a4f | |
parent | 612809740453427ce4c9211062794dde3823ab6d (diff) |
Revert^2 "Remove test_per_src from ART tests."
Second attempt at this, which fixes the asan failures.
Remove test_per_src since it is not supported by atest.
Replace it with gtest_isolate which is transparent to atest,
and which still allows us to run tests in parallel.
The size of test binaries halves (from 1GB to 0.5GB).
Test run-time on host is unchanged.
Test run-time on target is 4x faster (tested on walleye).
Added a gtest_main.cc with the gtest isolated main function,
and ART-specific initialization.
Bug: 147819342
Test: m test-art-host-gtest
Test: art/tools/run-gtests.sh
Test: art/test/testrunner/run_build_test_target.py art-gtest-asan
Change-Id: I515c911bb7d44285495802fc66cd732fc8e6d8df
-rw-r--r-- | build/Android.gtest.mk | 44 | ||||
-rwxr-xr-x | build/apex/art_apex_test.py | 264 | ||||
-rw-r--r-- | compiler/optimizing/codegen_test_utils.h | 8 | ||||
-rw-r--r-- | compiler/optimizing/optimizing_unit_test.h | 12 | ||||
-rw-r--r-- | libartbase/base/common_art_test.cc | 3 | ||||
-rw-r--r-- | libartbase/base/utils_test.cc | 2 | ||||
-rw-r--r-- | libartpalette/Android.bp | 1 | ||||
-rw-r--r-- | libdexfile/Android.bp | 11 | ||||
-rw-r--r-- | libnativebridge/tests/Android.bp | 2 | ||||
-rw-r--r-- | libnativeloader/test/Android.bp | 1 | ||||
-rw-r--r-- | runtime/common_runtime_test.cc | 22 | ||||
-rw-r--r-- | runtime/gc/space/dlmalloc_space_random_test.cc | 2 | ||||
-rw-r--r-- | runtime/gc/space/dlmalloc_space_static_test.cc | 2 | ||||
-rw-r--r-- | runtime/gc/space/rosalloc_space_random_test.cc | 2 | ||||
-rw-r--r-- | runtime/gc/space/rosalloc_space_static_test.cc | 2 | ||||
-rw-r--r-- | runtime/proxy_test.h | 10 | ||||
-rw-r--r-- | test/Android.bp | 14 | ||||
-rw-r--r-- | test/common/gtest_main.cc | 52 |
18 files changed, 155 insertions, 299 deletions
diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk index fe66bbb990..7c2d6ba824 100644 --- a/build/Android.gtest.mk +++ b/build/Android.gtest.mk @@ -14,6 +14,9 @@ # limitations under the License. # +# Build rules are excluded from Mac, since we can not run ART tests there in the first place. +ifneq ($(HOST_OS),darwin) + # The path for which all the dex files are relative, not actually the current directory. LOCAL_PATH := art/test @@ -507,6 +510,7 @@ define define-art-gtest-rule-host gtest_exe := $(2) # Dependencies for all host gtests. gtest_deps := $$(ART_HOST_DEX_DEPENDENCIES) \ + $$(ART_TEST_HOST_GTEST_DEPENDENCIES) \ $$(HOST_BOOT_IMAGE_JARS) \ $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$$(ART_HOST_SHLIB_EXTENSION) \ $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \ @@ -538,14 +542,14 @@ define define-art-gtest-rule-host gtest_deps += $$($(3)HOST_BOOT_IMAGE) endif - ART_TEST_HOST_GTEST_DEPENDENCIES += $$(gtest_deps) - .PHONY: $$(gtest_rule) $$(gtest_rule): $$(gtest_output) # Re-run the tests, even if nothing changed. Until the build system has a dedicated "no cache" # option, claim to write a file that is never produced. $$(gtest_output): .KATI_IMPLICIT_OUTPUTS := $$(gtest_output)-nocache +# Limit concurrent runs. Each test itself is already highly parallel (and thus memory hungry). +$$(gtest_output): .KATI_NINJA_POOL := highmem_pool $$(gtest_output): NAME := $$(gtest_rule) ifeq (,$(SANITIZE_HOST)) $$(gtest_output): $$(gtest_exe) $$(gtest_deps) @@ -585,6 +589,40 @@ endif gtest_suffix := endef # define-art-gtest-rule-host +# Global list of all dependencies. All tests depend on all tools. +# Removal of test_per_src broke the naming convention for dependencies, +# so the fine-grained dependencies no longer work for now. +# TODO: Move all dependency tracking to the blueprint file. +ART_GTEST_ALL_DEX_DEPS := \ + EmptyUncompressed \ + EmptyUncompressedAligned \ + LinkageTest \ + MainStripped \ + MainUncompressedAligned \ + MultiDexUncompressedAligned \ + VerifierDeps \ + VerifierDepsMulti \ + VerifySoftFailDuringClinit \ + $(foreach dir,$(GTEST_DEX_DIRECTORIES),$(dir)) +ART_TEST_HOST_GTEST_DEPENDENCIES += \ + $(HOST_OUT_EXECUTABLES)/dex2oatd \ + $(HOST_OUT_EXECUTABLES)/dex2oatds \ + $(HOST_OUT_EXECUTABLES)/dexanalyze \ + $(HOST_OUT_EXECUTABLES)/dexdiag \ + $(HOST_OUT_EXECUTABLES)/dexdump \ + $(HOST_OUT_EXECUTABLES)/dexlayoutd \ + $(HOST_OUT_EXECUTABLES)/dexlist \ + $(HOST_OUT_EXECUTABLES)/dexoptanalyzerd \ + $(HOST_OUT_EXECUTABLES)/hiddenapid \ + $(HOST_OUT_EXECUTABLES)/imgdiagd \ + $(HOST_OUT_EXECUTABLES)/oatdumpd \ + $(HOST_OUT_EXECUTABLES)/oatdumpds \ + $(HOST_OUT_EXECUTABLES)/profmand \ + $(foreach file,$(ART_GTEST_ALL_DEX_DEPS),$(ART_TEST_HOST_GTEST_$(file)_DEX)) +ART_TEST_TARGET_GTEST_DEPENDENCIES += \ + $(TESTING_ART_APEX) \ + $(foreach file,$(ART_GTEST_ALL_DEX_DEPS),$(ART_TEST_TARGET_GTEST_$(file)_DEX)) + # Add the additional dependencies for the specified test # $(1): test name define add-art-gtest-dependencies @@ -779,3 +817,5 @@ ART_TEST_HOST_GTEST_VerifySoftFailDuringClinit_DEX := ART_TEST_TARGET_GTEST_VerifySoftFailDuringClinit_DEX := GTEST_DEX_DIRECTORIES := LOCAL_PATH := + +endif # ifneq ($(HOST_OS),darwin) diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py index f6c81db3d5..b97ac237ae 100755 --- a/build/apex/art_apex_test.py +++ b/build/apex/art_apex_test.py @@ -728,251 +728,27 @@ class TestingTargetChecker: return 'Testing (Target) Checker' def run(self): - # Check cmdline tests. - self._checker.check_optional_art_test_executable('cmdline_parser_test') - - # Check compiler tests. - self._checker.check_art_test_executable('atomic_dex_ref_map_test') - self._checker.check_art_test_executable('bounds_check_elimination_test') - self._checker.check_art_test_executable('codegen_test') - self._checker.check_art_test_executable('compiled_method_storage_test') - self._checker.check_art_test_executable('constant_folding_test') - self._checker.check_art_test_executable('data_type_test') - self._checker.check_art_test_executable('dead_code_elimination_test') - self._checker.check_art_test_executable('dedupe_set_test') - self._checker.check_art_test_executable('dominator_test') - self._checker.check_art_test_executable('dwarf_test') - self._checker.check_art_test_executable('exception_test') - self._checker.check_art_test_executable('find_loops_test') - self._checker.check_art_test_executable('graph_checker_test') - self._checker.check_art_test_executable('graph_test') - self._checker.check_art_test_executable('gvn_test') - self._checker.check_art_test_executable('induction_var_analysis_test') - self._checker.check_art_test_executable('induction_var_range_test') - self._checker.check_art_test_executable('jni_cfi_test') - self._checker.check_art_test_executable('jni_compiler_test') - self._checker.check_art_test_executable('licm_test') - self._checker.check_art_test_executable('linearize_test') - self._checker.check_art_test_executable('linker_patch_test') - self._checker.check_art_test_executable('live_interval_test') - self._checker.check_art_test_executable('live_ranges_test') - self._checker.check_art_test_executable('liveness_test') - self._checker.check_art_test_executable('load_store_analysis_test') - self._checker.check_art_test_executable('load_store_elimination_test') - self._checker.check_art_test_executable('loop_optimization_test') - self._checker.check_art_test_executable('nodes_test') - self._checker.check_art_test_executable('nodes_vector_test') - self._checker.check_art_test_executable('optimizing_cfi_test') - self._checker.check_art_test_executable('output_stream_test') - self._checker.check_art_test_executable('parallel_move_test') - self._checker.check_art_test_executable('pretty_printer_test') - self._checker.check_art_test_executable('reference_type_propagation_test') - self._checker.check_art_test_executable('scheduler_test') - self._checker.check_art_test_executable('select_generator_test') - self._checker.check_art_test_executable('side_effects_test') - self._checker.check_art_test_executable('src_map_elem_test') - self._checker.check_art_test_executable('ssa_liveness_analysis_test') - self._checker.check_art_test_executable('ssa_test') - self._checker.check_art_test_executable('stack_map_test') - self._checker.check_art_test_executable('superblock_cloner_test') - self._checker.check_art_test_executable('suspend_check_test') - self._checker.check_art_test_executable('swap_space_test') - # These tests depend on a specific code generator and are conditionally included. - self._checker.check_optional_art_test_executable('constant_folding_test') - self._checker.check_optional_art_test_executable('dead_code_elimination_test') - self._checker.check_optional_art_test_executable('linearize_test') - self._checker.check_optional_art_test_executable('live_ranges_test') - self._checker.check_optional_art_test_executable('liveness_test') - self._checker.check_optional_art_test_executable('managed_register_arm64_test') - self._checker.check_optional_art_test_executable('managed_register_arm_test') - self._checker.check_optional_art_test_executable('managed_register_x86_64_test') - self._checker.check_optional_art_test_executable('managed_register_x86_test') - self._checker.check_optional_art_test_executable('register_allocator_test') - - # Check dex2oat tests. - self._checker.check_art_test_executable('compiler_driver_test') - self._checker.check_art_test_executable('dex2oat_image_test') - self._checker.check_art_test_executable('dex2oat_test') - self._checker.check_art_test_executable('dex_to_dex_decompiler_test') - self._checker.check_art_test_executable('elf_writer_test') - self._checker.check_art_test_executable('image_test') - self._checker.check_art_test_executable('image_write_read_test') - self._checker.check_art_test_executable('index_bss_mapping_encoder_test') - self._checker.check_art_test_executable('multi_oat_relative_patcher_test') - self._checker.check_art_test_executable('oat_writer_test') - self._checker.check_art_test_executable('verifier_deps_test') - # These tests depend on a specific code generator and are conditionally included. - self._checker.check_optional_art_test_executable('relative_patcher_arm64_test') - self._checker.check_optional_art_test_executable('relative_patcher_thumb2_test') - self._checker.check_optional_art_test_executable('relative_patcher_x86_64_test') - self._checker.check_optional_art_test_executable('relative_patcher_x86_test') - - # Check dexanalyze tests. - self._checker.check_optional_art_test_executable('dexanalyze_test') - - # Check dexdiag tests. - self._checker.check_optional_art_test_executable('dexdiag_test') - - # Check dexdump tests. - self._checker.check_art_test_executable('dexdump_test') - - # Check dexlayout tests. - self._checker.check_optional_art_test_executable('dexlayout_test') - - # Check dexlist tests. - self._checker.check_art_test_executable('dexlist_test') - - # Check dexoptanalyzer tests. - self._checker.check_art_test_executable('dexoptanalyzer_test') - - # Check imgdiag tests. - self._checker.check_art_test_executable('imgdiag_test') - - # Check libartbase tests. - self._checker.check_art_test_executable('arena_allocator_test') - self._checker.check_art_test_executable('bit_field_test') - self._checker.check_art_test_executable('bit_memory_region_test') - self._checker.check_art_test_executable('bit_string_test') - self._checker.check_art_test_executable('bit_struct_test') - self._checker.check_art_test_executable('bit_table_test') - self._checker.check_art_test_executable('bit_utils_test') - self._checker.check_art_test_executable('bit_vector_test') - self._checker.check_art_test_executable('fd_file_test') - self._checker.check_art_test_executable('file_utils_test') - self._checker.check_art_test_executable('hash_set_test') - self._checker.check_art_test_executable('hex_dump_test') - self._checker.check_art_test_executable('histogram_test') - self._checker.check_art_test_executable('indenter_test') - self._checker.check_art_test_executable('instruction_set_test') - self._checker.check_art_test_executable('intrusive_forward_list_test') - self._checker.check_art_test_executable('leb128_test') - self._checker.check_art_test_executable('logging_test') - self._checker.check_art_test_executable('mem_map_test') - self._checker.check_art_test_executable('membarrier_test') - self._checker.check_art_test_executable('memfd_test') - self._checker.check_art_test_executable('memory_region_test') - self._checker.check_art_test_executable('safe_copy_test') - self._checker.check_art_test_executable('scoped_flock_test') - self._checker.check_art_test_executable('time_utils_test') - self._checker.check_art_test_executable('transform_array_ref_test') - self._checker.check_art_test_executable('transform_iterator_test') - self._checker.check_art_test_executable('utils_test') - self._checker.check_art_test_executable('variant_map_test') - self._checker.check_art_test_executable('zip_archive_test') - - # Check libartpalette tests. - self._checker.check_art_test_executable('palette_test') - - # Check libdexfile tests. - self._checker.check_art_test_executable('art_dex_file_loader_test') + # Check ART test binaries. + self._checker.check_art_test_executable('art_cmdline_tests') + self._checker.check_art_test_executable('art_compiler_tests') + self._checker.check_art_test_executable('art_dex2oat_tests') + self._checker.check_art_test_executable('art_dexanalyze_tests') + self._checker.check_art_test_executable('art_dexdiag_tests') + self._checker.check_art_test_executable('art_dexdump_tests') + self._checker.check_art_test_executable('art_dexlayout_tests') + self._checker.check_art_test_executable('art_dexlist_tests') + self._checker.check_art_test_executable('art_dexoptanalyzer_tests') + self._checker.check_art_test_executable('art_imgdiag_tests') + self._checker.check_art_test_executable('art_libartbase_tests') + self._checker.check_art_test_executable('art_libartpalette_tests') self._checker.check_art_test_executable('art_libdexfile_support_tests') - self._checker.check_art_test_executable('class_accessor_test') - self._checker.check_art_test_executable('code_item_accessors_test') - self._checker.check_art_test_executable('compact_dex_file_test') - self._checker.check_art_test_executable('compact_offset_table_test') - self._checker.check_art_test_executable('descriptors_names_test') - self._checker.check_art_test_executable('dex_file_loader_test') - self._checker.check_art_test_executable('dex_file_verifier_test') - self._checker.check_art_test_executable('dex_instruction_test') - self._checker.check_art_test_executable('primitive_test') - self._checker.check_art_test_executable('string_reference_test') - self._checker.check_art_test_executable('test_dex_file_builder_test') - self._checker.check_art_test_executable('type_lookup_table_test') - self._checker.check_art_test_executable('utf_test') - - # Check libprofile tests. - self._checker.check_optional_art_test_executable('profile_boot_info_test') - self._checker.check_optional_art_test_executable('profile_compilation_info_test') - - # Check oatdump tests. - self._checker.check_art_test_executable('oatdump_app_test') - self._checker.check_art_test_executable('oatdump_image_test') - self._checker.check_art_test_executable('oatdump_test') - - # Check profman tests. - self._checker.check_art_test_executable('profile_assistant_test') - - # Check runtime compiler tests. - self._checker.check_art_test_executable('module_exclusion_test') - self._checker.check_art_test_executable('reflection_test') - - # Check runtime tests. - self._checker.check_art_test_executable('arch_test') - self._checker.check_art_test_executable('barrier_test') - self._checker.check_art_test_executable('card_table_test') - self._checker.check_art_test_executable('cha_test') - self._checker.check_art_test_executable('class_linker_test') - self._checker.check_art_test_executable('class_loader_context_test') - self._checker.check_art_test_executable('class_table_test') - self._checker.check_art_test_executable('compiler_filter_test') - self._checker.check_art_test_executable('dex_cache_test') - self._checker.check_art_test_executable('dlmalloc_space_random_test') - self._checker.check_art_test_executable('dlmalloc_space_static_test') - self._checker.check_art_test_executable('entrypoints_order_test') - self._checker.check_art_test_executable('exec_utils_test') - self._checker.check_art_test_executable('gtest_test') - self._checker.check_art_test_executable('handle_scope_test') - self._checker.check_art_test_executable('heap_test') - self._checker.check_art_test_executable('heap_verification_test') - self._checker.check_art_test_executable('hidden_api_test') - self._checker.check_art_test_executable('image_space_test') - self._checker.check_art_test_executable('immune_spaces_test') - self._checker.check_art_test_executable('imtable_test') - self._checker.check_art_test_executable('indirect_reference_table_test') - self._checker.check_art_test_executable('instruction_set_features_arm64_test') - self._checker.check_art_test_executable('instruction_set_features_arm_test') - self._checker.check_art_test_executable('instruction_set_features_test') - self._checker.check_art_test_executable('instruction_set_features_x86_64_test') - self._checker.check_art_test_executable('instruction_set_features_x86_test') - self._checker.check_art_test_executable('instrumentation_test') - self._checker.check_art_test_executable('intern_table_test') - self._checker.check_art_test_executable('java_vm_ext_test') - self._checker.check_art_test_executable('jit_memory_region_test') - self._checker.check_art_test_executable('jni_internal_test') - self._checker.check_art_test_executable('large_object_space_test') - self._checker.check_art_test_executable('math_entrypoints_test') - self._checker.check_art_test_executable('memcmp16_test') - self._checker.check_art_test_executable('method_handles_test') - self._checker.check_art_test_executable('method_type_test') - self._checker.check_art_test_executable('method_verifier_test') - self._checker.check_art_test_executable('mod_union_table_test') - self._checker.check_art_test_executable('monitor_pool_test') - self._checker.check_art_test_executable('monitor_test') - self._checker.check_art_test_executable('mutex_test') - self._checker.check_art_test_executable('oat_file_assistant_test') - self._checker.check_art_test_executable('oat_file_test') - self._checker.check_art_test_executable('object_test') - self._checker.check_art_test_executable('parsed_options_test') - self._checker.check_art_test_executable('prebuilt_tools_test') - self._checker.check_art_test_executable('profiling_info_test') - self._checker.check_art_test_executable('profile_saver_test') - self._checker.check_art_test_executable('proxy_test') - self._checker.check_art_test_executable('quick_trampoline_entrypoints_test') - self._checker.check_art_test_executable('reference_queue_test') - self._checker.check_art_test_executable('reference_table_test') - self._checker.check_art_test_executable('reg_type_test') - self._checker.check_art_test_executable('rosalloc_space_random_test') - self._checker.check_art_test_executable('rosalloc_space_static_test') - self._checker.check_art_test_executable('runtime_callbacks_test') - self._checker.check_art_test_executable('runtime_test') - self._checker.check_art_test_executable('safe_math_test') - self._checker.check_art_test_executable('space_bitmap_test') - self._checker.check_art_test_executable('space_create_test') - self._checker.check_art_test_executable('stub_test') - self._checker.check_art_test_executable('subtype_check_info_test') - self._checker.check_art_test_executable('subtype_check_test') - self._checker.check_art_test_executable('system_weak_test') - self._checker.check_art_test_executable('task_processor_test') - self._checker.check_art_test_executable('thread_pool_test') - self._checker.check_art_test_executable('timing_logger_test') - self._checker.check_art_test_executable('transaction_test') - self._checker.check_art_test_executable('two_runtimes_test') - self._checker.check_art_test_executable('unstarted_runtime_test') - self._checker.check_art_test_executable('var_handle_test') - self._checker.check_art_test_executable('vdex_file_test') - - # Check sigchainlib tests. - self._checker.check_art_test_executable('sigchain_test') + self._checker.check_art_test_executable('art_libdexfile_tests') + self._checker.check_art_test_executable('art_libprofile_tests') + self._checker.check_art_test_executable('art_oatdump_tests') + self._checker.check_art_test_executable('art_profman_tests') + self._checker.check_art_test_executable('art_runtime_compiler_tests') + self._checker.check_art_test_executable('art_runtime_tests') + self._checker.check_art_test_executable('art_sigchain_tests') # Check ART test (internal) libraries. self._checker.check_native_library('libart-gtest') diff --git a/compiler/optimizing/codegen_test_utils.h b/compiler/optimizing/codegen_test_utils.h index 9fbd7d6fc0..9d15f1f294 100644 --- a/compiler/optimizing/codegen_test_utils.h +++ b/compiler/optimizing/codegen_test_utils.h @@ -313,25 +313,25 @@ static void RunCode(CodegenTargetConfig target_config, } #ifdef ART_ENABLE_CODEGEN_arm -CodeGenerator* create_codegen_arm_vixl32(HGraph* graph, const CompilerOptions& compiler_options) { +inline CodeGenerator* create_codegen_arm_vixl32(HGraph* graph, const CompilerOptions& compiler_options) { return new (graph->GetAllocator()) TestCodeGeneratorARMVIXL(graph, compiler_options); } #endif #ifdef ART_ENABLE_CODEGEN_arm64 -CodeGenerator* create_codegen_arm64(HGraph* graph, const CompilerOptions& compiler_options) { +inline CodeGenerator* create_codegen_arm64(HGraph* graph, const CompilerOptions& compiler_options) { return new (graph->GetAllocator()) TestCodeGeneratorARM64(graph, compiler_options); } #endif #ifdef ART_ENABLE_CODEGEN_x86 -CodeGenerator* create_codegen_x86(HGraph* graph, const CompilerOptions& compiler_options) { +inline CodeGenerator* create_codegen_x86(HGraph* graph, const CompilerOptions& compiler_options) { return new (graph->GetAllocator()) TestCodeGeneratorX86(graph, compiler_options); } #endif #ifdef ART_ENABLE_CODEGEN_x86_64 -CodeGenerator* create_codegen_x86_64(HGraph* graph, const CompilerOptions& compiler_options) { +inline CodeGenerator* create_codegen_x86_64(HGraph* graph, const CompilerOptions& compiler_options) { return new (graph->GetAllocator()) x86_64::CodeGeneratorX86_64(graph, compiler_options); } #endif diff --git a/compiler/optimizing/optimizing_unit_test.h b/compiler/optimizing/optimizing_unit_test.h index c884f5b0a4..484e444d6d 100644 --- a/compiler/optimizing/optimizing_unit_test.h +++ b/compiler/optimizing/optimizing_unit_test.h @@ -56,11 +56,11 @@ namespace art { #define FIVE_REGISTERS_CODE_ITEM(...) N_REGISTERS_CODE_ITEM(5, __VA_ARGS__) #define SIX_REGISTERS_CODE_ITEM(...) N_REGISTERS_CODE_ITEM(6, __VA_ARGS__) -LiveInterval* BuildInterval(const size_t ranges[][2], - size_t number_of_ranges, - ScopedArenaAllocator* allocator, - int reg = -1, - HInstruction* defined_by = nullptr) { +inline LiveInterval* BuildInterval(const size_t ranges[][2], + size_t number_of_ranges, + ScopedArenaAllocator* allocator, + int reg = -1, + HInstruction* defined_by = nullptr) { LiveInterval* interval = LiveInterval::MakeInterval(allocator, DataType::Type::kInt32, defined_by); if (defined_by != nullptr) { @@ -73,7 +73,7 @@ LiveInterval* BuildInterval(const size_t ranges[][2], return interval; } -void RemoveSuspendChecks(HGraph* graph) { +inline void RemoveSuspendChecks(HGraph* graph) { for (HBasicBlock* block : graph->GetBlocks()) { if (block != nullptr) { if (block->GetLoopInformation() != nullptr) { diff --git a/libartbase/base/common_art_test.cc b/libartbase/base/common_art_test.cc index 5f3574d403..9c35dd420e 100644 --- a/libartbase/base/common_art_test.cc +++ b/libartbase/base/common_art_test.cc @@ -462,7 +462,8 @@ std::vector<std::string> CommonArtTestImpl::GetLibCoreDexLocations( std::string prefix = GetAndroidBuildTop(); for (std::string& location : result) { CHECK_GT(location.size(), prefix.size()); - CHECK_EQ(location.compare(0u, prefix.size(), prefix), 0); + CHECK_EQ(location.compare(0u, prefix.size(), prefix), 0) + << " prefix=" << prefix << " location=" << location; location.erase(0u, prefix.size()); } } diff --git a/libartbase/base/utils_test.cc b/libartbase/base/utils_test.cc index 631a225db4..e24794b096 100644 --- a/libartbase/base/utils_test.cc +++ b/libartbase/base/utils_test.cc @@ -108,7 +108,7 @@ TEST_F(UtilsTest, Split) { } TEST_F(UtilsTest, GetProcessStatus) { - EXPECT_EQ("utils_test", GetProcessStatus("Name")); + EXPECT_EQ("art_libartbase_", GetProcessStatus("Name")); EXPECT_EQ("R (running)", GetProcessStatus("State")); EXPECT_EQ("<unknown>", GetProcessStatus("tate")); EXPECT_EQ("<unknown>", GetProcessStatus("e")); diff --git a/libartpalette/Android.bp b/libartpalette/Android.bp index ce31a793eb..3f076d156b 100644 --- a/libartpalette/Android.bp +++ b/libartpalette/Android.bp @@ -107,5 +107,4 @@ art_cc_test { host_supported: true, srcs: ["apex/palette_test.cc"], shared_libs: ["libartpalette"], - test_per_src: true, } diff --git a/libdexfile/Android.bp b/libdexfile/Android.bp index c79522d01e..74390ecfd6 100644 --- a/libdexfile/Android.bp +++ b/libdexfile/Android.bp @@ -356,7 +356,6 @@ cc_library { art_cc_test { name: "art_libdexfile_external_tests", host_supported: true, - test_per_src: true, // For consistency with other ART gtests. test_suites: ["general-tests"], srcs: [ "external/dex_file_ext_c_test.c", @@ -393,9 +392,8 @@ cc_library { ], } -// The same source file is used in two tests here, so unlike other ART gtests it -// doesn't use test_per_src. Its test target is -// test-art-{host,target}-gtest-art_libdexfile_support_tests. +// The same source file is used in two tests here. +// Its test target is test-art-{host,target}-gtest-art_libdexfile_support_tests. art_cc_test { name: "art_libdexfile_support_tests", defaults: [ @@ -462,9 +460,8 @@ cc_library_static { ], } -// The same source file is used in two tests here, so unlike other ART gtests it -// doesn't use test_per_src. Its test target is -// test-art-{host,target}-gtest-art_libdexfile_support_static_tests. +// The same source file is used in two tests here. +// Its test target is test-art-{host,target}-gtest-art_libdexfile_support_static_tests. art_cc_test { name: "art_libdexfile_support_static_tests", host_supported: true, diff --git a/libnativebridge/tests/Android.bp b/libnativebridge/tests/Android.bp index 50bf0abd25..fe70a067b2 100644 --- a/libnativebridge/tests/Android.bp +++ b/libnativebridge/tests/Android.bp @@ -80,7 +80,6 @@ cc_defaults { "art_defaults", "art_test_defaults", ], - test_per_src: true, // TODO(mast): Split up art_gtest_defaults so that it can be used for the // following without pulling in lots of libs. target: { @@ -146,7 +145,6 @@ cc_test { "art_defaults", "art_test_defaults", ], - test_per_src: true, // TODO(mast): Split up art_gtest_defaults so that it can be used for the // following without pulling in lots of libs. target: { diff --git a/libnativeloader/test/Android.bp b/libnativeloader/test/Android.bp index 72e8c0fbc5..60c9f3cf77 100644 --- a/libnativeloader/test/Android.bp +++ b/libnativeloader/test/Android.bp @@ -77,7 +77,6 @@ cc_test { "art_defaults", "art_test_defaults", ], - test_per_src: true, srcs: [ "api_test.c", ], diff --git a/runtime/common_runtime_test.cc b/runtime/common_runtime_test.cc index a846346edd..c4e83b9ad4 100644 --- a/runtime/common_runtime_test.cc +++ b/runtime/common_runtime_test.cc @@ -650,25 +650,3 @@ void CheckJniAbortCatcher::Hook(void* data, const std::string& reason) { } } // namespace art - -// Allow other test code to run global initialization/configuration before -// gtest infra takes over. -extern "C" -__attribute__((visibility("default"))) __attribute__((weak)) -void ArtTestGlobalInit() { -} - -int main(int argc, char **argv) { - // Gtests can be very noisy. For example, an executable with multiple tests will trigger native - // bridge warnings. The following line reduces the minimum log severity to ERROR and suppresses - // everything else. In case you want to see all messages, comment out the line. - setenv("ANDROID_LOG_TAGS", "*:e", 1); - - art::Locks::Init(); - art::InitLogging(argv, art::Runtime::Abort); - art::MemMap::Init(); - LOG(INFO) << "Running main() from common_runtime_test.cc..."; - testing::InitGoogleTest(&argc, argv); - ArtTestGlobalInit(); - return RUN_ALL_TESTS(); -} diff --git a/runtime/gc/space/dlmalloc_space_random_test.cc b/runtime/gc/space/dlmalloc_space_random_test.cc index 92b56bda22..b653bcf03a 100644 --- a/runtime/gc/space/dlmalloc_space_random_test.cc +++ b/runtime/gc/space/dlmalloc_space_random_test.cc @@ -21,6 +21,7 @@ namespace art { namespace gc { namespace space { +namespace { MallocSpace* CreateDlMallocSpace(const std::string& name, size_t initial_size, @@ -32,6 +33,7 @@ MallocSpace* CreateDlMallocSpace(const std::string& name, TEST_SPACE_CREATE_FN_RANDOM(DlMallocSpace, CreateDlMallocSpace) +} // namespace } // namespace space } // namespace gc } // namespace art diff --git a/runtime/gc/space/dlmalloc_space_static_test.cc b/runtime/gc/space/dlmalloc_space_static_test.cc index 550d1bbe77..74dd765dfd 100644 --- a/runtime/gc/space/dlmalloc_space_static_test.cc +++ b/runtime/gc/space/dlmalloc_space_static_test.cc @@ -21,6 +21,7 @@ namespace art { namespace gc { namespace space { +namespace { MallocSpace* CreateDlMallocSpace(const std::string& name, size_t initial_size, @@ -32,6 +33,7 @@ MallocSpace* CreateDlMallocSpace(const std::string& name, TEST_SPACE_CREATE_FN_STATIC(DlMallocSpace, CreateDlMallocSpace) +} // namespace } // namespace space } // namespace gc } // namespace art diff --git a/runtime/gc/space/rosalloc_space_random_test.cc b/runtime/gc/space/rosalloc_space_random_test.cc index f0b3231b3a..3010b775f3 100644 --- a/runtime/gc/space/rosalloc_space_random_test.cc +++ b/runtime/gc/space/rosalloc_space_random_test.cc @@ -21,6 +21,7 @@ namespace art { namespace gc { namespace space { +namespace { MallocSpace* CreateRosAllocSpace(const std::string& name, size_t initial_size, @@ -36,6 +37,7 @@ MallocSpace* CreateRosAllocSpace(const std::string& name, TEST_SPACE_CREATE_FN_RANDOM(RosAllocSpace, CreateRosAllocSpace) +} // namespace } // namespace space } // namespace gc } // namespace art diff --git a/runtime/gc/space/rosalloc_space_static_test.cc b/runtime/gc/space/rosalloc_space_static_test.cc index d7e7e90188..860a4615e4 100644 --- a/runtime/gc/space/rosalloc_space_static_test.cc +++ b/runtime/gc/space/rosalloc_space_static_test.cc @@ -21,6 +21,7 @@ namespace art { namespace gc { namespace space { +namespace { MallocSpace* CreateRosAllocSpace(const std::string& name, size_t initial_size, @@ -35,6 +36,7 @@ MallocSpace* CreateRosAllocSpace(const std::string& name, TEST_SPACE_CREATE_FN_STATIC(RosAllocSpace, CreateRosAllocSpace) +} // namespace } // namespace space } // namespace gc } // namespace art diff --git a/runtime/proxy_test.h b/runtime/proxy_test.h index 0a871a4950..9a014413ef 100644 --- a/runtime/proxy_test.h +++ b/runtime/proxy_test.h @@ -33,11 +33,11 @@ namespace proxy_test { // Generate a proxy class with the given name and interfaces. This is a simplification from what // libcore does to fit to our test needs. We do not check for duplicated interfaces or methods and // we do not declare exceptions. -ObjPtr<mirror::Class> GenerateProxyClass(ScopedObjectAccess& soa, - jobject jclass_loader, - ClassLinker* class_linker, - const char* className, - const std::vector<Handle<mirror::Class>>& interfaces) +inline ObjPtr<mirror::Class> GenerateProxyClass(ScopedObjectAccess& soa, + jobject jclass_loader, + ClassLinker* class_linker, + const char* className, + const std::vector<Handle<mirror::Class>>& interfaces) REQUIRES_SHARED(Locks::mutator_lock_) { StackHandleScope<1> hs(soa.Self()); Handle<mirror::Class> javaLangObject = hs.NewHandle(GetClassRoot<mirror::Object>()); diff --git a/test/Android.bp b/test/Android.bp index 43f1631eab..769f39f0e3 100644 --- a/test/Android.bp +++ b/test/Android.bp @@ -46,7 +46,6 @@ art_cc_defaults { art_cc_defaults { name: "art_gtest_defaults", - test_per_src: true, // These really are gtests, but the gtest library comes from libart-gtest.so gtest: false, defaults: [ @@ -115,9 +114,10 @@ art_cc_defaults { "libdexfiled", "libprofiled", "libartbased", + "liblog", ], static_libs: [ - "libgtest", + "libgtest_isolated", ], target: { android32: { @@ -146,11 +146,18 @@ art_cc_defaults { art_cc_library { name: "libart-gtest", host_supported: true, + defaults: [ + "art_debug_defaults", + "art_defaults", + ], + srcs: [ + "common/gtest_main.cc", + ], whole_static_libs: [ "libart-compiler-gtest", "libart-runtime-gtest", "libartbase-art-gtest", - "libgtest", + "libgtest_isolated", ], shared_libs: [ "libartd", @@ -160,6 +167,7 @@ art_cc_library { "libartbased", "libbase", "libbacktrace", + "liblog", ], target: { darwin: { diff --git a/test/common/gtest_main.cc b/test/common/gtest_main.cc new file mode 100644 index 0000000000..2fb67019f5 --- /dev/null +++ b/test/common/gtest_main.cc @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * 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 + * + * http://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. + */ + +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include "base/logging.h" +#include "base/mem_map.h" +#include "base/mutex.h" +#include "gtest_extras/IsolateMain.h" +#include "runtime.h" + +extern "C" bool GetInitialArgs(const char*** args, size_t* num_args) { + static const char* initial_args[] = {"--deadline_threshold_ms=600000", + "--slow_threshold_ms=300000"}; + *args = initial_args; + *num_args = 2; + return true; +} + +// Allow other test code to run global initialization/configuration before gtest infra takes over. +extern "C" __attribute__((visibility("default"))) __attribute__((weak)) void ArtTestGlobalInit(); + +int main(int argc, char** argv, char** envp) { + // Gtests can be very noisy. For example, an executable with multiple tests will trigger native + // bridge warnings. The following line reduces the minimum log severity to ERROR and suppresses + // everything else. In case you want to see all messages, comment out the line. + setenv("ANDROID_LOG_TAGS", "*:e", 1); + + art::Locks::Init(); + art::InitLogging(argv, art::Runtime::Abort); + art::MemMap::Init(); + LOG(INFO) << "Running main() from common_runtime_test.cc..."; + if (ArtTestGlobalInit != nullptr) { + ArtTestGlobalInit(); + } + return IsolateMain(argc, argv, envp); +} |