diff options
| -rw-r--r-- | Android.mk | 1 | ||||
| -rw-r--r-- | compiler/optimizing/loop_optimization.cc | 4 | ||||
| -rw-r--r-- | runtime/openjdkjvmti/ti_redefine.h | 8 | ||||
| -rw-r--r-- | test/645-checker-abs-simd/src/Main.java | 52 | ||||
| -rw-r--r-- | test/Android.run-test-jvmti-java-library.mk | 57 | ||||
| -rw-r--r-- | test/Android.run-test.mk | 10 | ||||
| -rw-r--r-- | test/testrunner/env.py | 125 | ||||
| -rwxr-xr-x | test/testrunner/testrunner.py | 4 | ||||
| -rw-r--r-- | test/ti-agent/jni_binder.cc | 7 | ||||
| -rw-r--r-- | test/ti-agent/jni_binder.h | 4 |
10 files changed, 198 insertions, 74 deletions
diff --git a/Android.mk b/Android.mk index f8c537816f..7beb30f5d1 100644 --- a/Android.mk +++ b/Android.mk @@ -81,6 +81,7 @@ include $(art_path)/tools/Android.mk include $(art_path)/tools/ahat/Android.mk include $(art_path)/tools/dexfuzz/Android.mk include $(art_path)/libart_fake/Android.mk +include $(art_path)/test/Android.run-test-jvmti-java-library.mk ART_HOST_DEPENDENCIES := \ $(ART_HOST_EXECUTABLES) \ diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc index bf18cc9bbc..8eeff1f2f0 100644 --- a/compiler/optimizing/loop_optimization.cc +++ b/compiler/optimizing/loop_optimization.cc @@ -1011,6 +1011,10 @@ void HLoopOptimization::GenerateVecOp(HInstruction* org, for (size_t index = 0; index < inputs.size(); ++index) { new_invoke->SetArgumentAt(index, vector_map_->Get(inputs[index])); } + new_invoke->SetIntrinsic(invoke->GetIntrinsic(), + kNeedsEnvironmentOrCache, + kNoSideEffects, + kNoThrow); vector = new_invoke; } break; diff --git a/runtime/openjdkjvmti/ti_redefine.h b/runtime/openjdkjvmti/ti_redefine.h index 586259a3f6..5e31627694 100644 --- a/runtime/openjdkjvmti/ti_redefine.h +++ b/runtime/openjdkjvmti/ti_redefine.h @@ -69,15 +69,12 @@ class RedefinitionDataHolder; class RedefinitionDataIter; // Class that can redefine a single class's methods. -// TODO We should really make this be driven by an outside class so we can do multiple classes at -// the same time and have less required cleanup. class Redefiner { public: // Redefine the given classes with the given dex data. Note this function does not take ownership // of the dex_data pointers. It is not used after this call however and may be freed if desired. // The caller is responsible for freeing it. The runtime makes its own copy of the data. This // function does not call the transformation events. - // TODO Check modified flag of the definitions. static jvmtiError RedefineClassesDirect(ArtJvmTiEnv* env, art::Runtime* runtime, art::Thread* self, @@ -87,7 +84,6 @@ class Redefiner { // Redefine the given classes with the given dex data. Note this function does not take ownership // of the dex_data pointers. It is not used after this call however and may be freed if desired. // The caller is responsible for freeing it. The runtime makes its own copy of the data. - // TODO This function should call the transformation events. static jvmtiError RedefineClasses(ArtJvmTiEnv* env, EventHandler* event_handler, art::Runtime* runtime, @@ -164,8 +160,6 @@ class Redefiner { REQUIRES_SHARED(art::Locks::mutator_lock_); // Preallocates all needed allocations in klass so that we can pause execution safely. - // TODO We should be able to free the arrays if they end up not being used. Investigate doing - // this in the future. For now we will just take the memory hit. bool EnsureClassAllocationsFinished(/*out*/RedefinitionDataIter* data) REQUIRES_SHARED(art::Locks::mutator_lock_); @@ -222,7 +216,6 @@ class Redefiner { // mirror::Class difficult and confusing. std::string* error_msg_; - // TODO Maybe change jclass to a mirror::Class Redefiner(art::Runtime* runtime, art::Thread* self, std::string* error_msg) @@ -239,7 +232,6 @@ class Redefiner { /*out*/std::string* error_msg) REQUIRES_SHARED(art::Locks::mutator_lock_); - // TODO Put on all the lock qualifiers. jvmtiError Run() REQUIRES_SHARED(art::Locks::mutator_lock_); bool CheckAllRedefinitionAreValid() REQUIRES_SHARED(art::Locks::mutator_lock_); diff --git a/test/645-checker-abs-simd/src/Main.java b/test/645-checker-abs-simd/src/Main.java index 31113503ed..76850abded 100644 --- a/test/645-checker-abs-simd/src/Main.java +++ b/test/645-checker-abs-simd/src/Main.java @@ -22,24 +22,76 @@ public class Main { private static final int SPQUIET = 1 << 22; private static final long DPQUIET = 1L << 51; + /// CHECK-START: void Main.doitInt(int[]) loop_optimization (before) + /// CHECK-DAG: Phi loop:<<Loop:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsInt loop:<<Loop>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop>> outer_loop:none + // + /// CHECK-START-ARM64: void Main.doitInt(int[]) loop_optimization (after) + /// CHECK-DAG: Phi loop:<<Loop1:B\d+>> outer_loop:none + /// CHECK-DAG: VecLoad loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: VecAbs loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: VecStore loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: Phi loop:<<Loop2:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop2>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsInt loop:<<Loop2>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop2>> outer_loop:none + // + /// CHECK-EVAL: "<<Loop1>>" != "<<Loop2>>" private static void doitInt(int[] x) { for (int i = 0; i < x.length; i++) { x[i] = Math.abs(x[i]); } } + /// CHECK-START: void Main.doitLong(long[]) loop_optimization (before) + /// CHECK-DAG: Phi loop:<<Loop:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsLong loop:<<Loop>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop>> outer_loop:none + // + /// CHECK-START-ARM64: void Main.doitLong(long[]) loop_optimization (after) + // + // TODO: Not supported yet. private static void doitLong(long[] x) { for (int i = 0; i < x.length; i++) { x[i] = Math.abs(x[i]); } } + /// CHECK-START: void Main.doitFloat(float[]) loop_optimization (before) + /// CHECK-DAG: Phi loop:<<Loop:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsFloat loop:<<Loop>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop>> outer_loop:none + // + /// CHECK-START-ARM64: void Main.doitFloat(float[]) loop_optimization (after) + /// CHECK-DAG: Phi loop:<<Loop1:B\d+>> outer_loop:none + /// CHECK-DAG: VecLoad loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: VecAbs loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: VecStore loop:<<Loop1>> outer_loop:none + /// CHECK-DAG: Phi loop:<<Loop2:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop2>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsFloat loop:<<Loop2>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop2>> outer_loop:none + // + /// CHECK-EVAL: "<<Loop1>>" != "<<Loop2>>" private static void doitFloat(float[] x) { for (int i = 0; i < x.length; i++) { x[i] = Math.abs(x[i]); } } + /// CHECK-START: void Main.doitDouble(double[]) loop_optimization (before) + /// CHECK-DAG: Phi loop:<<Loop:B\d+>> outer_loop:none + /// CHECK-DAG: ArrayGet loop:<<Loop>> outer_loop:none + /// CHECK-DAG: InvokeStaticOrDirect intrinsic:MathAbsDouble loop:<<Loop>> outer_loop:none + /// CHECK-DAG: ArraySet loop:<<Loop>> outer_loop:none + // + /// CHECK-START-ARM64: void Main.doitDouble(double[]) loop_optimization (after) + // + // TODO: Not supported yet. private static void doitDouble(double[] x) { for (int i = 0; i < x.length; i++) { x[i] = Math.abs(x[i]); diff --git a/test/Android.run-test-jvmti-java-library.mk b/test/Android.run-test-jvmti-java-library.mk index 4a5b5c17c0..b6da92b942 100644 --- a/test/Android.run-test-jvmti-java-library.mk +++ b/test/Android.run-test-jvmti-java-library.mk @@ -19,8 +19,8 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Main shim classes. We use one that exposes the tagging common functionality. -LOCAL_SRC_FILES := \ - 903-hello-tagging/src/art/Main.java \ +LOCAL_MAIN_SHIM := 903-hello-tagging/src/art/Main.java +LOCAL_SRC_FILES := $(LOCAL_MAIN_SHIM) # Actual test classes. LOCAL_SRC_FILES += \ @@ -53,7 +53,58 @@ LOCAL_SRC_FILES += \ 931-agent-thread/src/art/Test931.java \ 933-misc-events/src/art/Test933.java \ +JVMTI_RUN_TEST_GENERATED_NUMBERS := \ + 901 \ + 903 \ + 904 \ + 905 \ + 906 \ + 907 \ + 908 \ + 910 \ + 911 \ + 913 \ + 918 \ + 920 \ + 922 \ + 923 \ + 924 \ + 925 \ + 927 \ + 928 \ + 931 \ + 933 \ + +# Try to enforce that the directories correspond to the Java files we pull in. +JVMTI_RUN_TEST_DIR_CHECK := $(sort $(foreach DIR,$(JVMTI_RUN_TEST_GENERATED_NUMBERS), \ + $(filter $(DIR)%,$(LOCAL_SRC_FILES)))) +ifneq ($(sort $(LOCAL_SRC_FILES)),$(JVMTI_RUN_TEST_DIR_CHECK)) + $(error Missing file, compare $(sort $(LOCAL_SRC_FILES)) with $(JVMTI_RUN_TEST_DIR_CHECK)) +endif + +LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_MODULE_TAGS := optional LOCAL_JAVA_LANGUAGE_VERSION := 1.8 LOCAL_MODULE := run-test-jvmti-java -include $(BUILD_HOST_JAVA_LIBRARY) + +GENERATED_SRC_DIR := $(call local-generated-sources-dir) +JVMTI_RUN_TEST_GENERATED_FILES := \ + $(foreach NR,$(JVMTI_RUN_TEST_GENERATED_NUMBERS),$(GENERATED_SRC_DIR)/results.$(NR).expected.txt) + +define GEN_JVMTI_RUN_TEST_GENERATED_FILE + +GEN_INPUT := $(wildcard $(LOCAL_PATH)/$(1)*/expected.txt) +GEN_OUTPUT := $(GENERATED_SRC_DIR)/results.$(1).expected.txt +$$(GEN_OUTPUT): $$(GEN_INPUT) + cp $$< $$@ + +GEN_INPUT := +GEN_OUTPUT := + +endef + +$(foreach NR,$(JVMTI_RUN_TEST_GENERATED_NUMBERS),\ + $(eval $(call GEN_JVMTI_RUN_TEST_GENERATED_FILE,$(NR)))) +LOCAL_JAVA_RESOURCE_FILES := $(JVMTI_RUN_TEST_GENERATED_FILES) + +include $(BUILD_JAVA_LIBRARY) diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index 187b383b14..ece57622fc 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -53,7 +53,11 @@ define define-build-art-run-test run_test_options += --quiet endif $$(dmart_target): PRIVATE_RUN_TEST_OPTIONS := $$(run_test_options) -$$(dmart_target): $(TEST_ART_RUN_TEST_DEPENDENCIES) $(TARGET_JACK_CLASSPATH_DEPENDENCIES) | $(TEST_ART_RUN_TEST_ORDERONLY_DEPENDENCIES) +$$(dmart_target): $(TEST_ART_RUN_TEST_DEPENDENCIES) | $(TEST_ART_RUN_TEST_ORDERONLY_DEPENDENCIES) +ifeq ($(ANDROID_COMPILE_WITH_JACK),true) +$$(dmart_target): $(TARGET_JACK_CLASSPATH_DEPENDENCIES) +endif +$$(dmart_target): $(hide) rm -rf $$(dir $$@) && mkdir -p $$(dir $$@) $(hide) DX=$(abspath $(DX)) JASMIN=$(abspath $(HOST_OUT_EXECUTABLES)/jasmin) \ SMALI=$(abspath $(HOST_OUT_EXECUTABLES)/smali) \ @@ -172,14 +176,18 @@ endif # Host executables. host_prereq_rules := $(ART_TEST_HOST_RUN_TEST_DEPENDENCIES) +ifeq ($(ANDROID_COMPILE_WITH_JACK),true) # Classpath for Jack compilation for host. host_prereq_rules += $(HOST_JACK_CLASSPATH_DEPENDENCIES) +endif # Required for dx, jasmin, smali, dexmerger, jack. host_prereq_rules += $(TEST_ART_RUN_TEST_DEPENDENCIES) +ifeq ($(ANDROID_COMPILE_WITH_JACK),true) # Classpath for Jack compilation for target. target_prereq_rules := $(TARGET_JACK_CLASSPATH_DEPENDENCIES) +endif # Sync test files to the target, depends upon all things that must be pushed #to the target. diff --git a/test/testrunner/env.py b/test/testrunner/env.py index 46244a4766..f5e2a61685 100644 --- a/test/testrunner/env.py +++ b/test/testrunner/env.py @@ -17,10 +17,10 @@ import re import tempfile import subprocess -env = dict(os.environ) +_env = dict(os.environ) -def getEnvBoolean(var, default): - val = env.get(var) +def _getEnvBoolean(var, default): + val = _env.get(var) if val: if val == "True" or val == "true": return True @@ -35,7 +35,7 @@ _DUMP_MANY_VARS_LIST = ['HOST_2ND_ARCH_PREFIX', 'HOST_OUT_EXECUTABLES'] _DUMP_MANY_VARS = None # To be set to a dictionary with above list being the keys, # and the build variable being the value. -def dump_many_vars(var_name): +def _dump_many_vars(var_name): """ Reach into the Android build system to dump many build vars simultaneously. Since the make system is so slow, we want to avoid calling into build frequently. @@ -74,142 +74,159 @@ def dump_many_vars(var_name): return _DUMP_MANY_VARS[var_name] -def get_build_var(var_name): - return dump_many_vars(var_name) +def _get_build_var(var_name): + return _dump_many_vars(var_name) def get_env(key): - return env.get(key) + return _env.get(key) -ANDROID_BUILD_TOP = env.get('ANDROID_BUILD_TOP', os.getcwd()) +def _get_android_build_top(): + path_to_top = _env.get('ANDROID_BUILD_TOP') + if not path_to_top: + # nothing set. try to guess it based on the relative path of this env.py file. + this_file_path = os.path.realpath(__file__) + path_to_top = os.path.join(os.path.dirname(this_file_path), '../../../') + path_to_top = os.path.realpath(path_to_top) + + if not os.path.exists(os.path.join(path_to_top, 'build/envsetup.sh')): + raise AssertionError("env.py must be located inside an android source tree") + + return path_to_top + +ANDROID_BUILD_TOP = _get_android_build_top() # Directory used for temporary test files on the host. ART_HOST_TEST_DIR = tempfile.mkdtemp(prefix = 'test-art-') # Keep going after encountering a test failure? -ART_TEST_KEEP_GOING = getEnvBoolean('ART_TEST_KEEP_GOING', True) +ART_TEST_KEEP_GOING = _getEnvBoolean('ART_TEST_KEEP_GOING', True) # Do you want all tests, even those that are time consuming? -ART_TEST_FULL = getEnvBoolean('ART_TEST_FULL', False) +ART_TEST_FULL = _getEnvBoolean('ART_TEST_FULL', False) # Do you want interpreter tests run? -ART_TEST_INTERPRETER = getEnvBoolean('ART_TEST_INTERPRETER', ART_TEST_FULL) -ART_TEST_INTERPRETER_ACCESS_CHECKS = getEnvBoolean('ART_TEST_INTERPRETER_ACCESS_CHECKS', +ART_TEST_INTERPRETER = _getEnvBoolean('ART_TEST_INTERPRETER', ART_TEST_FULL) +ART_TEST_INTERPRETER_ACCESS_CHECKS = _getEnvBoolean('ART_TEST_INTERPRETER_ACCESS_CHECKS', ART_TEST_FULL) # Do you want JIT tests run? -ART_TEST_JIT = getEnvBoolean('ART_TEST_JIT', ART_TEST_FULL) +ART_TEST_JIT = _getEnvBoolean('ART_TEST_JIT', ART_TEST_FULL) # Do you want optimizing compiler tests run? -ART_TEST_OPTIMIZING = getEnvBoolean('ART_TEST_OPTIMIZING', ART_TEST_FULL) +ART_TEST_OPTIMIZING = _getEnvBoolean('ART_TEST_OPTIMIZING', ART_TEST_FULL) # Do you want to test the optimizing compiler with graph coloring register allocation? -ART_TEST_OPTIMIZING_GRAPH_COLOR = getEnvBoolean('ART_TEST_OPTIMIZING_GRAPH_COLOR', ART_TEST_FULL) +ART_TEST_OPTIMIZING_GRAPH_COLOR = _getEnvBoolean('ART_TEST_OPTIMIZING_GRAPH_COLOR', ART_TEST_FULL) # Do you want to do run-tests with profiles? -ART_TEST_SPEED_PROFILE = getEnvBoolean('ART_TEST_SPEED_PROFILE', ART_TEST_FULL) +ART_TEST_SPEED_PROFILE = _getEnvBoolean('ART_TEST_SPEED_PROFILE', ART_TEST_FULL) # Do we want to test PIC-compiled tests ("apps")? -ART_TEST_PIC_TEST = getEnvBoolean('ART_TEST_PIC_TEST', ART_TEST_FULL) +ART_TEST_PIC_TEST = _getEnvBoolean('ART_TEST_PIC_TEST', ART_TEST_FULL) # Do you want tracing tests run? -ART_TEST_TRACE = getEnvBoolean('ART_TEST_TRACE', ART_TEST_FULL) +ART_TEST_TRACE = _getEnvBoolean('ART_TEST_TRACE', ART_TEST_FULL) # Do you want tracing tests (streaming mode) run? -ART_TEST_TRACE_STREAM = getEnvBoolean('ART_TEST_TRACE_STREAM', ART_TEST_FULL) +ART_TEST_TRACE_STREAM = _getEnvBoolean('ART_TEST_TRACE_STREAM', ART_TEST_FULL) # Do you want tests with GC verification enabled run? -ART_TEST_GC_VERIFY = getEnvBoolean('ART_TEST_GC_VERIFY', ART_TEST_FULL) +ART_TEST_GC_VERIFY = _getEnvBoolean('ART_TEST_GC_VERIFY', ART_TEST_FULL) # Do you want tests with the GC stress mode enabled run? -ART_TEST_GC_STRESS = getEnvBoolean('ART_TEST_GC_STRESS', ART_TEST_FULL) +ART_TEST_GC_STRESS = _getEnvBoolean('ART_TEST_GC_STRESS', ART_TEST_FULL) # Do you want tests with the JNI forcecopy mode enabled run? -ART_TEST_JNI_FORCECOPY = getEnvBoolean('ART_TEST_JNI_FORCECOPY', ART_TEST_FULL) +ART_TEST_JNI_FORCECOPY = _getEnvBoolean('ART_TEST_JNI_FORCECOPY', ART_TEST_FULL) # Do you want run-tests with relocation disabled run? -ART_TEST_RUN_TEST_RELOCATE = getEnvBoolean('ART_TEST_RUN_TEST_RELOCATE', ART_TEST_FULL) +ART_TEST_RUN_TEST_RELOCATE = _getEnvBoolean('ART_TEST_RUN_TEST_RELOCATE', ART_TEST_FULL) # Do you want run-tests with prebuilding? -ART_TEST_RUN_TEST_PREBUILD = getEnvBoolean('ART_TEST_RUN_TEST_PREBUILD', ART_TEST_FULL) +ART_TEST_RUN_TEST_PREBUILD = _getEnvBoolean('ART_TEST_RUN_TEST_PREBUILD', ART_TEST_FULL) # Do you want run-tests with no prebuilding enabled run? -ART_TEST_RUN_TEST_NO_PREBUILD = getEnvBoolean('ART_TEST_RUN_TEST_NO_PREBUILD', ART_TEST_FULL) +ART_TEST_RUN_TEST_NO_PREBUILD = _getEnvBoolean('ART_TEST_RUN_TEST_NO_PREBUILD', ART_TEST_FULL) # Do you want run-tests with a pregenerated core.art? -ART_TEST_RUN_TEST_IMAGE = getEnvBoolean('ART_TEST_RUN_TEST_IMAGE', ART_TEST_FULL) +ART_TEST_RUN_TEST_IMAGE = _getEnvBoolean('ART_TEST_RUN_TEST_IMAGE', ART_TEST_FULL) # Do you want run-tests without a pregenerated core.art? -ART_TEST_RUN_TEST_NO_IMAGE = getEnvBoolean('ART_TEST_RUN_TEST_NO_IMAGE', ART_TEST_FULL) +ART_TEST_RUN_TEST_NO_IMAGE = _getEnvBoolean('ART_TEST_RUN_TEST_NO_IMAGE', ART_TEST_FULL) # Do you want run-tests with relocation enabled but patchoat failing? -ART_TEST_RUN_TEST_RELOCATE_NO_PATCHOAT = getEnvBoolean('ART_TEST_RUN_TEST_RELOCATE_NO_PATCHOAT', +ART_TEST_RUN_TEST_RELOCATE_NO_PATCHOAT = _getEnvBoolean('ART_TEST_RUN_TEST_RELOCATE_NO_PATCHOAT', ART_TEST_FULL) # Do you want run-tests without a dex2oat? -ART_TEST_RUN_TEST_NO_DEX2OAT = getEnvBoolean('ART_TEST_RUN_TEST_NO_DEX2OAT', ART_TEST_FULL) +ART_TEST_RUN_TEST_NO_DEX2OAT = _getEnvBoolean('ART_TEST_RUN_TEST_NO_DEX2OAT', ART_TEST_FULL) # Do you want run-tests with libartd.so? -ART_TEST_RUN_TEST_DEBUG = getEnvBoolean('ART_TEST_RUN_TEST_DEBUG', ART_TEST_FULL) +ART_TEST_RUN_TEST_DEBUG = _getEnvBoolean('ART_TEST_RUN_TEST_DEBUG', ART_TEST_FULL) # Do you want run-tests with libart.so? -ART_TEST_RUN_TEST_NDEBUG = getEnvBoolean('ART_TEST_RUN_TEST_NDEBUG', ART_TEST_FULL) +ART_TEST_RUN_TEST_NDEBUG = _getEnvBoolean('ART_TEST_RUN_TEST_NDEBUG', ART_TEST_FULL) # Do you want failed tests to have their artifacts cleaned up? -ART_TEST_RUN_TEST_ALWAYS_CLEAN = getEnvBoolean('ART_TEST_RUN_TEST_ALWAYS_CLEAN', True) +ART_TEST_RUN_TEST_ALWAYS_CLEAN = _getEnvBoolean('ART_TEST_RUN_TEST_ALWAYS_CLEAN', True) # Do you want run-tests with the --debuggable flag -ART_TEST_RUN_TEST_DEBUGGABLE = getEnvBoolean('ART_TEST_RUN_TEST_DEBUGGABLE', ART_TEST_FULL) +ART_TEST_RUN_TEST_DEBUGGABLE = _getEnvBoolean('ART_TEST_RUN_TEST_DEBUGGABLE', ART_TEST_FULL) # Do you want to test multi-part boot-image functionality? -ART_TEST_RUN_TEST_MULTI_IMAGE = getEnvBoolean('ART_TEST_RUN_TEST_MULTI_IMAGE', ART_TEST_FULL) +ART_TEST_RUN_TEST_MULTI_IMAGE = _getEnvBoolean('ART_TEST_RUN_TEST_MULTI_IMAGE', ART_TEST_FULL) -ART_TEST_DEBUG_GC = getEnvBoolean('ART_TEST_DEBUG_GC', False) +ART_TEST_DEBUG_GC = _getEnvBoolean('ART_TEST_DEBUG_GC', False) -ART_TEST_BISECTION = getEnvBoolean('ART_TEST_BISECTION', False) +ART_TEST_BISECTION = _getEnvBoolean('ART_TEST_BISECTION', False) -DEX2OAT_HOST_INSTRUCTION_SET_FEATURES = env.get('DEX2OAT_HOST_INSTRUCTION_SET_FEATURES') +DEX2OAT_HOST_INSTRUCTION_SET_FEATURES = _env.get('DEX2OAT_HOST_INSTRUCTION_SET_FEATURES') # Do you want run-tests with the host/target's second arch? -ART_TEST_RUN_TEST_2ND_ARCH = getEnvBoolean('ART_TEST_RUN_TEST_2ND_ARCH', True) +ART_TEST_RUN_TEST_2ND_ARCH = _getEnvBoolean('ART_TEST_RUN_TEST_2ND_ARCH', True) -HOST_2ND_ARCH_PREFIX = get_build_var('HOST_2ND_ARCH_PREFIX') -HOST_2ND_ARCH_PREFIX_DEX2OAT_HOST_INSTRUCTION_SET_FEATURES = env.get( +HOST_2ND_ARCH_PREFIX = _get_build_var('HOST_2ND_ARCH_PREFIX') +HOST_2ND_ARCH_PREFIX_DEX2OAT_HOST_INSTRUCTION_SET_FEATURES = _env.get( HOST_2ND_ARCH_PREFIX + 'DEX2OAT_HOST_INSTRUCTION_SET_FEATURES') -ART_TEST_ANDROID_ROOT = env.get('ART_TEST_ANDROID_ROOT') +ART_TEST_ANDROID_ROOT = _env.get('ART_TEST_ANDROID_ROOT') + +ART_TEST_WITH_STRACE = _getEnvBoolean('ART_TEST_DEBUG_GC', False) -ART_TEST_WITH_STRACE = getEnvBoolean('ART_TEST_DEBUG_GC', False) +EXTRA_DISABLED_TESTS = set(_env.get("ART_TEST_RUN_TEST_SKIP", "").split()) -EXTRA_DISABLED_TESTS = set(env.get("ART_TEST_RUN_TEST_SKIP", "").split()) +ART_TEST_RUN_TEST_BUILD = _getEnvBoolean('ART_TEST_RUN_TEST_BUILD', False) -ART_TEST_RUN_TEST_BUILD = getEnvBoolean('ART_TEST_RUN_TEST_BUILD', False) +TARGET_2ND_ARCH = _get_build_var('TARGET_2ND_ARCH') +TARGET_ARCH = _get_build_var('TARGET_ARCH') -TARGET_2ND_ARCH = get_build_var('TARGET_2ND_ARCH') -TARGET_ARCH = get_build_var('TARGET_ARCH') +# Note: ART_2ND_PHONY_TEST_TARGET_SUFFIX is 2ND_ART_PHONY_TEST_TARGET_SUFFIX in .mk files +# Note: ART_2ND_PHONY_TEST_HOST_SUFFIX is 2ND_ART_PHONY_HOST_TARGET_SUFFIX in .mk files +# Python does not let us have variable names starting with a digit, so it has differ. if TARGET_2ND_ARCH: if "64" in TARGET_ARCH: ART_PHONY_TEST_TARGET_SUFFIX = "64" - _2ND_ART_PHONY_TEST_TARGET_SUFFIX = "32" + ART_2ND_PHONY_TEST_TARGET_SUFFIX = "32" else: ART_PHONY_TEST_TARGET_SUFFIX = "32" - _2ND_ART_PHONY_TEST_TARGET_SUFFIX = "" + ART_2ND_PHONY_TEST_TARGET_SUFFIX = "" else: if "64" in TARGET_ARCH: ART_PHONY_TEST_TARGET_SUFFIX = "64" - _2ND_ART_PHONY_TEST_TARGET_SUFFIX = "" + ART_2ND_PHONY_TEST_TARGET_SUFFIX = "" else: ART_PHONY_TEST_TARGET_SUFFIX = "32" - _2ND_ART_PHONY_TEST_TARGET_SUFFIX = "" + ART_2ND_PHONY_TEST_TARGET_SUFFIX = "" -HOST_PREFER_32_BIT = get_build_var('HOST_PREFER_32_BIT') +HOST_PREFER_32_BIT = _get_build_var('HOST_PREFER_32_BIT') if HOST_PREFER_32_BIT == "true": ART_PHONY_TEST_HOST_SUFFIX = "32" - _2ND_ART_PHONY_TEST_HOST_SUFFIX = "" + ART_2ND_PHONY_TEST_HOST_SUFFIX = "" else: ART_PHONY_TEST_HOST_SUFFIX = "64" - _2ND_ART_PHONY_TEST_HOST_SUFFIX = "32" + ART_2ND_PHONY_TEST_HOST_SUFFIX = "32" HOST_OUT_EXECUTABLES = os.path.join(ANDROID_BUILD_TOP, - get_build_var("HOST_OUT_EXECUTABLES")) + _get_build_var("HOST_OUT_EXECUTABLES")) os.environ['JACK'] = HOST_OUT_EXECUTABLES + '/jack' os.environ['DX'] = HOST_OUT_EXECUTABLES + '/dx' os.environ['SMALI'] = HOST_OUT_EXECUTABLES + '/smali' diff --git a/test/testrunner/testrunner.py b/test/testrunner/testrunner.py index 6a8b0aeb06..5d3687e293 100755 --- a/test/testrunner/testrunner.py +++ b/test/testrunner/testrunner.py @@ -256,8 +256,8 @@ def setup_test_env(): ADDRESS_SIZES_TARGET['target'].add(env.ART_PHONY_TEST_TARGET_SUFFIX) ADDRESS_SIZES_TARGET['host'].add(env.ART_PHONY_TEST_HOST_SUFFIX) if env.ART_TEST_RUN_TEST_2ND_ARCH: - ADDRESS_SIZES_TARGET['host'].add(env._2ND_ART_PHONY_TEST_HOST_SUFFIX) - ADDRESS_SIZES_TARGET['target'].add(env._2ND_ART_PHONY_TEST_TARGET_SUFFIX) + ADDRESS_SIZES_TARGET['host'].add(env.ART_2ND_PHONY_TEST_HOST_SUFFIX) + ADDRESS_SIZES_TARGET['target'].add(env.ART_2ND_PHONY_TEST_TARGET_SUFFIX) else: ADDRESS_SIZES_TARGET['host'] = ADDRESS_SIZES_TARGET['host'].union(ADDRESS_SIZES) ADDRESS_SIZES_TARGET['target'] = ADDRESS_SIZES_TARGET['target'].union(ADDRESS_SIZES) diff --git a/test/ti-agent/jni_binder.cc b/test/ti-agent/jni_binder.cc index b66c2c76e9..32236deba4 100644 --- a/test/ti-agent/jni_binder.cc +++ b/test/ti-agent/jni_binder.cc @@ -174,12 +174,7 @@ static jclass FindClassWithClassLoader(JNIEnv* env, const char* class_name, jobj class_loader)); } -// Find the given classname. First try the implied classloader, then the system classloader, -// then use JVMTI to find all classloaders. -static jclass FindClass(jvmtiEnv* jvmti_env, - JNIEnv* env, - const char* class_name, - jobject class_loader) { +jclass FindClass(jvmtiEnv* jvmti_env, JNIEnv* env, const char* class_name, jobject class_loader) { if (class_loader != nullptr) { return FindClassWithClassLoader(env, class_name, class_loader); } diff --git a/test/ti-agent/jni_binder.h b/test/ti-agent/jni_binder.h index 6f96257c75..e998dc561c 100644 --- a/test/ti-agent/jni_binder.h +++ b/test/ti-agent/jni_binder.h @@ -22,6 +22,10 @@ namespace art { +// Find the given classname. First try the implied classloader, then the system classloader, +// then use JVMTI to find all classloaders. +jclass FindClass(jvmtiEnv* jvmti_env, JNIEnv* env, const char* class_name, jobject class_loader); + // Load the class through JNI. Inspect it, find all native methods. Construct the corresponding // mangled name, run dlsym and bind the method. // |