# HG changeset patch # User vlivanov # Date 1405333612 25200 # Node ID dd89808e49bafd95459b0f340342bda18efa154d # Parent 1de115720e74c3d4690a9372f0511eb45cb07aca 8049530: Provide descriptive failure reason for compilation tasks removed for the queue Reviewed-by: roland, iveresov diff -r 1de115720e74 -r dd89808e49ba src/share/vm/ci/ciEnv.cpp --- a/src/share/vm/ci/ciEnv.cpp Mon Jul 14 03:24:35 2014 -0700 +++ b/src/share/vm/ci/ciEnv.cpp Mon Jul 14 03:26:52 2014 -0700 @@ -1112,9 +1112,6 @@ // ------------------------------------------------------------------ // ciEnv::record_failure() void ciEnv::record_failure(const char* reason) { - if (log() != NULL) { - log()->elem("failure reason='%s'", reason); - } if (_failure_reason == NULL) { // Record the first failure reason. _failure_reason = reason; diff -r 1de115720e74 -r dd89808e49ba src/share/vm/compiler/compileBroker.cpp --- a/src/share/vm/compiler/compileBroker.cpp Mon Jul 14 03:24:35 2014 -0700 +++ b/src/share/vm/compiler/compileBroker.cpp Mon Jul 14 03:26:52 2014 -0700 @@ -287,6 +287,7 @@ _hot_count = hot_count; _time_queued = 0; // tidy _comment = comment; + _failure_reason = NULL; if (LogCompilation) { _time_queued = os::elapsed_counter(); @@ -565,6 +566,11 @@ methodHandle method(thread, this->method()); ResourceMark rm(thread); + if (!_is_success) { + const char* reason = _failure_reason != NULL ? _failure_reason : "unknown"; + log->elem("failure reason='%s'", reason); + } + // nmethod* nm = code(); log->begin_elem("task_done success='%d' nmsize='%d' count='%d'", @@ -714,6 +720,7 @@ for (CompileTask* task = head; task != NULL; ) { CompileTask* next_task = task->next(); CompileTaskWrapper ctw(task); // Frees the task + task->set_failure_reason("stale task"); task = next_task; } } @@ -1788,6 +1795,7 @@ } else { // After compilation is disabled, remove remaining methods from queue method->clear_queued_for_compilation(); + task->set_failure_reason("compilation is disabled"); } } } @@ -1975,6 +1983,7 @@ compilable = ci_env.compilable(); if (ci_env.failing()) { + task->set_failure_reason(ci_env.failure_reason()); const char* retry_message = ci_env.retry_message(); if (_compilation_log != NULL) { _compilation_log->log_failure(thread, task, ci_env.failure_reason(), retry_message); diff -r 1de115720e74 -r dd89808e49ba src/share/vm/compiler/compileBroker.hpp --- a/src/share/vm/compiler/compileBroker.hpp Mon Jul 14 03:24:35 2014 -0700 +++ b/src/share/vm/compiler/compileBroker.hpp Mon Jul 14 03:26:52 2014 -0700 @@ -59,6 +59,7 @@ jobject _hot_method_holder; int _hot_count; // information about its invocation counter const char* _comment; // more info about the task + const char* _failure_reason; public: CompileTask() { @@ -130,6 +131,10 @@ void log_task_queued(); void log_task_start(CompileLog* log); void log_task_done(CompileLog* log); + + void set_failure_reason(const char* reason) { + _failure_reason = reason; + } }; // CompilerCounters