< prev index next >

src/hotspot/share/compiler/compileBroker.cpp

Print this page

        

*** 133,142 **** --- 133,147 ---- // These counters are used to assign an unique ID to each compilation. volatile jint CompileBroker::_compilation_id = 0; volatile jint CompileBroker::_osr_compilation_id = 0; + // Debugging information + int CompileBroker::_last_compile_type = no_compile; + int CompileBroker::_last_compile_level = CompLevel_none; + char CompileBroker::_last_method_compiled[CompileBroker::name_buffer_length]; + // Performance counters PerfCounter* CompileBroker::_perf_total_compilation = NULL; PerfCounter* CompileBroker::_perf_osr_compilation = NULL; PerfCounter* CompileBroker::_perf_standard_compilation = NULL;
*** 570,579 **** --- 575,586 ---- // ------------------------------------------------------------------ // CompileBroker::compilation_init // // Initialize the Compilation object void CompileBroker::compilation_init_phase1(TRAPS) { + _last_method_compiled[0] = '\0'; + // No need to initialize compilation system if we do not use it. if (!UseCompiler) { return; } // Set the interface to the current compiler(s).
*** 2023,2036 **** assert(!method->is_native(), "no longer compile natives"); // Look up matching directives directive = DirectivesStack::getMatchingDirective(method, comp); ! // Update compile information when using perfdata. ! if (UsePerfData) { ! update_compile_perf_data(thread, method, is_osr); ! } DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level)); } should_break = directive->BreakAtExecuteOption || task->check_break_at_flags(); --- 2030,2041 ---- assert(!method->is_native(), "no longer compile natives"); // Look up matching directives directive = DirectivesStack::getMatchingDirective(method, comp); ! // Save information about this method in case of failure. ! set_last_compile(thread, method, is_osr, task_level); DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level)); } should_break = directive->BreakAtExecuteOption || task->check_break_at_flags();
*** 2257,2275 **** CodeCache::report_codemem_full(code_blob_type, should_print_compiler_warning()); } } // ------------------------------------------------------------------ ! // CompileBroker::update_compile_perf_data // // Record this compilation for debugging purposes. ! void CompileBroker::update_compile_perf_data(CompilerThread* thread, const methodHandle& method, bool is_osr) { ResourceMark rm; char* method_name = method->name()->as_C_string(); char current_method[CompilerCounters::cmname_buffer_length]; size_t maxLen = CompilerCounters::cmname_buffer_length; const char* class_name = method->method_holder()->name()->as_C_string(); size_t s1len = strlen(class_name); size_t s2len = strlen(method_name); --- 2262,2283 ---- CodeCache::report_codemem_full(code_blob_type, should_print_compiler_warning()); } } // ------------------------------------------------------------------ ! // CompileBroker::set_last_compile // // Record this compilation for debugging purposes. ! void CompileBroker::set_last_compile(CompilerThread* thread, const methodHandle& method, bool is_osr, int comp_level) { ResourceMark rm; char* method_name = method->name()->as_C_string(); + strncpy(_last_method_compiled, method_name, CompileBroker::name_buffer_length); + _last_method_compiled[CompileBroker::name_buffer_length - 1] = '\0'; // ensure null terminated char current_method[CompilerCounters::cmname_buffer_length]; size_t maxLen = CompilerCounters::cmname_buffer_length; + if (UsePerfData) { const char* class_name = method->method_holder()->name()->as_C_string(); size_t s1len = strlen(class_name); size_t s2len = strlen(method_name);
*** 2289,2309 **** class_name += ((s1len + s2len + 2) - maxLen); } } jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name); - int last_compile_type = normal_compile; if (CICountOSR && is_osr) { ! last_compile_type = osr_compile; } CompilerCounters* counters = thread->counters(); counters->set_current_method(current_method); ! counters->set_compile_type((jlong) last_compile_type); } // ------------------------------------------------------------------ // CompileBroker::push_jni_handle_block // // Push on a new block of JNI handles. void CompileBroker::push_jni_handle_block() { --- 2297,2323 ---- class_name += ((s1len + s2len + 2) - maxLen); } } jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name); + } if (CICountOSR && is_osr) { ! _last_compile_type = osr_compile; ! } else { ! _last_compile_type = normal_compile; } + _last_compile_level = comp_level; + if (UsePerfData) { CompilerCounters* counters = thread->counters(); counters->set_current_method(current_method); ! counters->set_compile_type((jlong)_last_compile_type); ! } } + // ------------------------------------------------------------------ // CompileBroker::push_jni_handle_block // // Push on a new block of JNI handles. void CompileBroker::push_jni_handle_block() {
*** 2602,2611 **** --- 2616,2640 ---- tty->cr(); tty->print_cr(" nmethod code size : %8d bytes", nmethods_code_size); tty->print_cr(" nmethod total size : %8d bytes", nmethods_size); } + // Debugging output for failure + void CompileBroker::print_last_compile() { + if (_last_compile_level != CompLevel_none && + compiler(_last_compile_level) != NULL && + _last_compile_type != no_compile) { + if (_last_compile_type == osr_compile) { + tty->print_cr("Last parse: [osr]%d+++(%d) %s", + _osr_compilation_id, _last_compile_level, _last_method_compiled); + } else { + tty->print_cr("Last parse: %d+++(%d) %s", + _compilation_id, _last_compile_level, _last_method_compiled); + } + } + } + // Print general/accumulated JIT information. void CompileBroker::print_info(outputStream *out) { if (out == NULL) out = tty; out->cr(); out->print_cr("======================");
< prev index next >