diff options
-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. |