302 exclude(current, unwanted, result); 303 } 304 305 306 void JvmtiManageCapabilities::update() { 307 jvmtiCapabilities avail; 308 309 // all capabilities 310 either(&always_capabilities, &always_solo_capabilities, &avail); 311 312 bool interp_events = 313 avail.can_generate_field_access_events || 314 avail.can_generate_field_modification_events || 315 avail.can_generate_single_step_events || 316 avail.can_generate_frame_pop_events || 317 avail.can_generate_method_entry_events || 318 avail.can_generate_method_exit_events; 319 bool enter_all_methods = 320 interp_events || 321 avail.can_generate_breakpoint_events; 322 UseFastEmptyMethods = !enter_all_methods; 323 UseFastAccessorMethods = !enter_all_methods; 324 325 if (avail.can_generate_breakpoint_events) { 326 RewriteFrequentPairs = false; 327 } 328 329 // If can_redefine_classes is enabled in the onload phase then we know that the 330 // dependency information recorded by the compiler is complete. 331 if ((avail.can_redefine_classes || avail.can_retransform_classes) && 332 JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) { 333 JvmtiExport::set_all_dependencies_are_recorded(true); 334 } 335 336 JvmtiExport::set_can_get_source_debug_extension(avail.can_get_source_debug_extension); 337 JvmtiExport::set_can_maintain_original_method_order(avail.can_maintain_original_method_order); 338 JvmtiExport::set_can_post_interpreter_events(interp_events); 339 JvmtiExport::set_can_hotswap_or_post_breakpoint( 340 avail.can_generate_breakpoint_events || 341 avail.can_redefine_classes || 342 avail.can_retransform_classes); 343 JvmtiExport::set_can_modify_any_class( | 302 exclude(current, unwanted, result); 303 } 304 305 306 void JvmtiManageCapabilities::update() { 307 jvmtiCapabilities avail; 308 309 // all capabilities 310 either(&always_capabilities, &always_solo_capabilities, &avail); 311 312 bool interp_events = 313 avail.can_generate_field_access_events || 314 avail.can_generate_field_modification_events || 315 avail.can_generate_single_step_events || 316 avail.can_generate_frame_pop_events || 317 avail.can_generate_method_entry_events || 318 avail.can_generate_method_exit_events; 319 bool enter_all_methods = 320 interp_events || 321 avail.can_generate_breakpoint_events; 322 if (enter_all_methods) { 323 // Disable these when tracking the bytecodes 324 UseFastEmptyMethods = false; 325 UseFastAccessorMethods = false; 326 } 327 328 if (avail.can_generate_breakpoint_events) { 329 RewriteFrequentPairs = false; 330 } 331 332 // If can_redefine_classes is enabled in the onload phase then we know that the 333 // dependency information recorded by the compiler is complete. 334 if ((avail.can_redefine_classes || avail.can_retransform_classes) && 335 JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) { 336 JvmtiExport::set_all_dependencies_are_recorded(true); 337 } 338 339 JvmtiExport::set_can_get_source_debug_extension(avail.can_get_source_debug_extension); 340 JvmtiExport::set_can_maintain_original_method_order(avail.can_maintain_original_method_order); 341 JvmtiExport::set_can_post_interpreter_events(interp_events); 342 JvmtiExport::set_can_hotswap_or_post_breakpoint( 343 avail.can_generate_breakpoint_events || 344 avail.can_redefine_classes || 345 avail.can_retransform_classes); 346 JvmtiExport::set_can_modify_any_class( |