diff options
author | 2017-07-20 15:38:52 -0700 | |
---|---|---|
committer | 2017-07-21 10:54:48 -0700 | |
commit | 3d324fdb9b43742d851aec681846b67203a536f0 (patch) | |
tree | 5c31e0403a53fa222d01e4768a78ea9e98541c31 | |
parent | e8f48da635c4d07bbe431e5819da8e1fad91a8ef (diff) |
Freeze capabilities JVMTI tests request by default.
Some capabilities might change the characteristics of the runtime when
they are gained (for example disabling the jit). We want to test in
all configurations when possible so freeze the default jvmti
capabilities given to jvmti tests to those that are known not to make
major runtime changes.
Test: ./test.py --host -j40
Change-Id: I90a8ad31f203590153ef53bc4950b2f3952b4970
-rw-r--r-- | test/901-hello-ti-agent/basics.cc | 2 | ||||
-rw-r--r-- | test/905-object-free/tracking_free.cc | 2 | ||||
-rw-r--r-- | test/936-search-onload/search_onload.cc | 2 | ||||
-rw-r--r-- | test/983-source-transform-verify/source_transform.cc | 2 | ||||
-rw-r--r-- | test/ti-agent/common_load.cc | 2 | ||||
-rw-r--r-- | test/ti-agent/jvmti_helper.cc | 61 | ||||
-rw-r--r-- | test/ti-agent/jvmti_helper.h | 7 | ||||
-rw-r--r-- | test/ti-agent/redefinition_helper.cc | 10 | ||||
-rw-r--r-- | test/ti-stress/stress.cc | 45 |
9 files changed, 116 insertions, 17 deletions
diff --git a/test/901-hello-ti-agent/basics.cc b/test/901-hello-ti-agent/basics.cc index 21dcf98ba7..2edd91eb66 100644 --- a/test/901-hello-ti-agent/basics.cc +++ b/test/901-hello-ti-agent/basics.cc @@ -127,7 +127,7 @@ jint OnLoad(JavaVM* vm, printf("Unable to get jvmti env!\n"); return 1; } - SetAllCapabilities(jvmti_env); + SetStandardCapabilities(jvmti_env); jvmtiPhase current_phase; jvmtiError phase_result = jvmti_env->GetPhase(¤t_phase); diff --git a/test/905-object-free/tracking_free.cc b/test/905-object-free/tracking_free.cc index 998194a611..5479772c5d 100644 --- a/test/905-object-free/tracking_free.cc +++ b/test/905-object-free/tracking_free.cc @@ -61,7 +61,7 @@ extern "C" JNIEXPORT void JNICALL Java_art_Test905_setupObjectFreeCallback( JavaVM* jvm = nullptr; env->GetJavaVM(&jvm); CHECK_EQ(jvm->GetEnv(reinterpret_cast<void**>(&jvmti_env2), JVMTI_VERSION_1_2), 0); - SetAllCapabilities(jvmti_env2); + SetStandardCapabilities(jvmti_env2); setupObjectFreeCallback(env, jvmti_env2, ObjectFree2); } diff --git a/test/936-search-onload/search_onload.cc b/test/936-search-onload/search_onload.cc index b2ef05690f..90d87e0e7b 100644 --- a/test/936-search-onload/search_onload.cc +++ b/test/936-search-onload/search_onload.cc @@ -39,7 +39,7 @@ jint OnLoad(JavaVM* vm, printf("Unable to get jvmti env!\n"); return 1; } - SetAllCapabilities(jvmti_env); + SetStandardCapabilities(jvmti_env); char* dex_loc = getenv("DEX_LOCATION"); std::string dex1 = android::base::StringPrintf("%s/936-search-onload.jar", dex_loc); diff --git a/test/983-source-transform-verify/source_transform.cc b/test/983-source-transform-verify/source_transform.cc index a433dc9b75..7cd39f4008 100644 --- a/test/983-source-transform-verify/source_transform.cc +++ b/test/983-source-transform-verify/source_transform.cc @@ -111,7 +111,7 @@ jint OnLoad(JavaVM* vm, printf("Unable to get jvmti env!\n"); return 1; } - SetAllCapabilities(jvmti_env); + SetStandardCapabilities(jvmti_env); jvmtiEventCallbacks cb; memset(&cb, 0, sizeof(cb)); cb.ClassFileLoadHook = CheckDexFileHook; diff --git a/test/ti-agent/common_load.cc b/test/ti-agent/common_load.cc index 0679c1bc17..1d13c620e3 100644 --- a/test/ti-agent/common_load.cc +++ b/test/ti-agent/common_load.cc @@ -62,7 +62,7 @@ static jint MinimalOnLoad(JavaVM* vm, printf("Unable to get jvmti env!\n"); return 1; } - SetAllCapabilities(jvmti_env); + SetStandardCapabilities(jvmti_env); return 0; } diff --git a/test/ti-agent/jvmti_helper.cc b/test/ti-agent/jvmti_helper.cc index 598a30f940..ccd3cab3ea 100644 --- a/test/ti-agent/jvmti_helper.cc +++ b/test/ti-agent/jvmti_helper.cc @@ -38,12 +38,65 @@ void CheckJvmtiError(jvmtiEnv* env, jvmtiError error) { } } +// These are a set of capabilities we will enable in all situations. These are chosen since they +// will not affect the runtime in any significant way if they are enabled. +static const jvmtiCapabilities standard_caps = { + .can_tag_objects = 1, + .can_generate_field_modification_events = 1, + .can_generate_field_access_events = 1, + .can_get_bytecodes = 1, + .can_get_synthetic_attribute = 1, + .can_get_owned_monitor_info = 0, + .can_get_current_contended_monitor = 0, + .can_get_monitor_info = 0, + .can_pop_frame = 0, + .can_redefine_classes = 1, + .can_signal_thread = 0, + .can_get_source_file_name = 1, + .can_get_line_numbers = 1, + .can_get_source_debug_extension = 1, + .can_access_local_variables = 0, + .can_maintain_original_method_order = 0, + .can_generate_single_step_events = 1, + .can_generate_exception_events = 0, + .can_generate_frame_pop_events = 0, + .can_generate_breakpoint_events = 1, + .can_suspend = 1, + .can_redefine_any_class = 0, + .can_get_current_thread_cpu_time = 0, + .can_get_thread_cpu_time = 0, + .can_generate_method_entry_events = 1, + .can_generate_method_exit_events = 1, + .can_generate_all_class_hook_events = 0, + .can_generate_compiled_method_load_events = 0, + .can_generate_monitor_events = 0, + .can_generate_vm_object_alloc_events = 1, + .can_generate_native_method_bind_events = 1, + .can_generate_garbage_collection_events = 1, + .can_generate_object_free_events = 1, + .can_force_early_return = 0, + .can_get_owned_monitor_stack_depth_info = 0, + .can_get_constant_pool = 0, + .can_set_native_method_prefix = 0, + .can_retransform_classes = 1, + .can_retransform_any_class = 0, + .can_generate_resource_exhaustion_heap_events = 0, + .can_generate_resource_exhaustion_threads_events = 0, +}; + +jvmtiCapabilities GetStandardCapabilities() { + return standard_caps; +} + +void SetStandardCapabilities(jvmtiEnv* env) { + jvmtiCapabilities caps = GetStandardCapabilities(); + CheckJvmtiError(env, env->AddCapabilities(&caps)); +} + void SetAllCapabilities(jvmtiEnv* env) { jvmtiCapabilities caps; - jvmtiError error1 = env->GetPotentialCapabilities(&caps); - CheckJvmtiError(env, error1); - jvmtiError error2 = env->AddCapabilities(&caps); - CheckJvmtiError(env, error2); + CheckJvmtiError(env, env->GetPotentialCapabilities(&caps)); + CheckJvmtiError(env, env->AddCapabilities(&caps)); } bool JvmtiErrorToException(JNIEnv* env, jvmtiEnv* jvmti_env, jvmtiError error) { diff --git a/test/ti-agent/jvmti_helper.h b/test/ti-agent/jvmti_helper.h index 66d88d0752..0145f36826 100644 --- a/test/ti-agent/jvmti_helper.h +++ b/test/ti-agent/jvmti_helper.h @@ -26,7 +26,14 @@ namespace art { +// Get a standard set of capabilities for use in tests. +jvmtiCapabilities GetStandardCapabilities(); + +// Add all the standard capabilities to the given env. +void SetStandardCapabilities(jvmtiEnv* env); + // Add all capabilities to the given env. +// TODO Remove this in the future. void SetAllCapabilities(jvmtiEnv* env); // Check whether the given error is NONE. If not, print out the corresponding error message diff --git a/test/ti-agent/redefinition_helper.cc b/test/ti-agent/redefinition_helper.cc index 3b18879ca5..75a6f5fe40 100644 --- a/test/ti-agent/redefinition_helper.cc +++ b/test/ti-agent/redefinition_helper.cc @@ -332,7 +332,7 @@ extern "C" JNIEXPORT void JNICALL Java_art_Redefinition_doCommonClassRetransform "Unable to create temporary jvmtiEnv for RetransformClasses call."); return; } - SetAllCapabilities(real_env); + SetStandardCapabilities(real_env); } else { real_env = jvmti_env; } @@ -373,15 +373,14 @@ jint OnLoad(JavaVM* vm, } // namespace common_transform static void SetupCommonRedefine() { - jvmtiCapabilities caps; - jvmti_env->GetPotentialCapabilities(&caps); + jvmtiCapabilities caps = GetStandardCapabilities(); caps.can_retransform_classes = 0; caps.can_retransform_any_class = 0; jvmti_env->AddCapabilities(&caps); } static void SetupCommonRetransform() { - SetAllCapabilities(jvmti_env); + SetStandardCapabilities(jvmti_env); jvmtiEventCallbacks cb; memset(&cb, 0, sizeof(cb)); cb.ClassFileLoadHook = common_retransform::CommonClassFileLoadHookRetransformable; @@ -392,8 +391,7 @@ static void SetupCommonRetransform() { static void SetupCommonTransform() { // Don't set the retransform caps - jvmtiCapabilities caps; - jvmti_env->GetPotentialCapabilities(&caps); + jvmtiCapabilities caps = GetStandardCapabilities(); caps.can_retransform_classes = 0; caps.can_retransform_any_class = 0; jvmti_env->AddCapabilities(&caps); diff --git a/test/ti-stress/stress.cc b/test/ti-stress/stress.cc index d197acd216..aa50648808 100644 --- a/test/ti-stress/stress.cc +++ b/test/ti-stress/stress.cc @@ -780,8 +780,49 @@ extern "C" JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM* vm, } // Just get all capabilities. - jvmtiCapabilities caps; - jvmti->GetPotentialCapabilities(&caps); + jvmtiCapabilities caps = { + .can_tag_objects = 0, + .can_generate_field_modification_events = 1, + .can_generate_field_access_events = 1, + .can_get_bytecodes = 0, + .can_get_synthetic_attribute = 0, + .can_get_owned_monitor_info = 0, + .can_get_current_contended_monitor = 0, + .can_get_monitor_info = 0, + .can_pop_frame = 0, + .can_redefine_classes = 1, + .can_signal_thread = 0, + .can_get_source_file_name = 1, + .can_get_line_numbers = 1, + .can_get_source_debug_extension = 0, + .can_access_local_variables = 0, + .can_maintain_original_method_order = 0, + .can_generate_single_step_events = 1, + .can_generate_exception_events = 0, + .can_generate_frame_pop_events = 0, + .can_generate_breakpoint_events = 0, + .can_suspend = 0, + .can_redefine_any_class = 0, + .can_get_current_thread_cpu_time = 0, + .can_get_thread_cpu_time = 0, + .can_generate_method_entry_events = 1, + .can_generate_method_exit_events = 1, + .can_generate_all_class_hook_events = 0, + .can_generate_compiled_method_load_events = 0, + .can_generate_monitor_events = 0, + .can_generate_vm_object_alloc_events = 0, + .can_generate_native_method_bind_events = 1, + .can_generate_garbage_collection_events = 0, + .can_generate_object_free_events = 0, + .can_force_early_return = 0, + .can_get_owned_monitor_stack_depth_info = 0, + .can_get_constant_pool = 0, + .can_set_native_method_prefix = 0, + .can_retransform_classes = 1, + .can_retransform_any_class = 0, + .can_generate_resource_exhaustion_heap_events = 0, + .can_generate_resource_exhaustion_threads_events = 0, + }; jvmti->AddCapabilities(&caps); // Set callbacks. |