8049530: Provide descriptive failure reason for compilation tasks removed for the queue

Reviewed-by: roland, iveresov
This commit is contained in:
Vladimir Ivanov 2014-07-14 03:26:52 -07:00
parent 3dd313825d
commit 9b8aaef575
3 changed files with 14 additions and 3 deletions

View File

@ -1125,9 +1125,6 @@ int ciEnv::num_inlined_bytecodes() const {
// ------------------------------------------------------------------
// 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;

View File

@ -297,6 +297,7 @@ void CompileTask::initialize(int compile_id,
_hot_count = hot_count;
_time_queued = 0; // tidy
_comment = comment;
_failure_reason = NULL;
if (LogCompilation) {
_time_queued = os::elapsed_counter();
@ -566,6 +567,11 @@ void CompileTask::log_task_done(CompileLog* log) {
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);
}
// <task_done ... stamp='1.234'> </task>
nmethod* nm = code();
log->begin_elem("task_done success='%d' nmsize='%d' count='%d'",
@ -733,6 +739,7 @@ void CompileQueue::purge_stale_tasks() {
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;
}
}
@ -1786,6 +1793,7 @@ void CompileBroker::compiler_thread_loop() {
} else {
// After compilation is disabled, remove remaining methods from queue
method->clear_queued_for_compilation();
task->set_failure_reason("compilation is disabled");
}
}
}
@ -1973,6 +1981,7 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
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);

View File

@ -64,6 +64,7 @@ class CompileTask : public CHeapObj<mtCompiler> {
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() {
@ -138,6 +139,10 @@ public:
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