< prev index next >

src/share/vm/runtime/advancedThresholdPolicy.cpp

Print this page
rev 10354 : 8150646: Add support for blocking compiles though whitebox API
Reviewed-by: kvn, ppunegov, simonis, neliasso
Contributed-by: nils.eliasson@oracle.com, volker.simonis@gmail.com

*** 1,7 **** /* ! * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 162,174 **** return false; } // Called with the queue locked and with at least one element CompileTask* AdvancedThresholdPolicy::select_task(CompileQueue* compile_queue) { - #if INCLUDE_JVMCI CompileTask *max_blocking_task = NULL; - #endif CompileTask *max_task = NULL; Method* max_method = NULL; jlong t = os::javaTimeMillis(); // Iterate through the queue and find a method with a maximum rate. for (CompileTask* task = compile_queue->first(); task != NULL;) { --- 162,172 ----
*** 178,188 **** if (max_task == NULL) { max_task = task; max_method = method; } else { // If a method has been stale for some time, remove it from the queue. ! if (is_stale(t, TieredCompileTaskTimeout, method) && !is_old(method)) { if (PrintTieredEvents) { print_event(REMOVE_FROM_QUEUE, method, method, task->osr_bci(), (CompLevel)task->comp_level()); } task->log_task_dequeued("stale"); compile_queue->remove_and_mark_stale(task); --- 176,187 ---- if (max_task == NULL) { max_task = task; max_method = method; } else { // If a method has been stale for some time, remove it from the queue. ! // Blocking tasks don't become stale ! if (!task->is_blocking() && is_stale(t, TieredCompileTaskTimeout, method) && !is_old(method)) { if (PrintTieredEvents) { print_event(REMOVE_FROM_QUEUE, method, method, task->osr_bci(), (CompLevel)task->comp_level()); } task->log_task_dequeued("stale"); compile_queue->remove_and_mark_stale(task);
*** 195,227 **** if (compare_methods(method, max_method)) { max_task = task; max_method = method; } } ! #if INCLUDE_JVMCI ! if (UseJVMCICompiler && task->is_blocking()) { if (max_blocking_task == NULL || compare_methods(method, max_blocking_task->method())) { max_blocking_task = task; } } ! #endif task = next_task; } - #if INCLUDE_JVMCI - if (UseJVMCICompiler) { if (max_blocking_task != NULL) { // In blocking compilation mode, the CompileBroker will make // compilations submitted by a JVMCI compiler thread non-blocking. These // compilations should be scheduled after all blocking compilations // to service non-compiler related compilations sooner and reduce the // chance of such compilations timing out. max_task = max_blocking_task; max_method = max_task->method(); } - } - #endif if (max_task->comp_level() == CompLevel_full_profile && TieredStopAtLevel > CompLevel_full_profile && is_method_profiled(max_method)) { max_task->set_comp_level(CompLevel_limited_profile); if (PrintTieredEvents) { --- 194,222 ---- if (compare_methods(method, max_method)) { max_task = task; max_method = method; } } ! ! if (task->is_blocking()) { if (max_blocking_task == NULL || compare_methods(method, max_blocking_task->method())) { max_blocking_task = task; } } ! task = next_task; } if (max_blocking_task != NULL) { // In blocking compilation mode, the CompileBroker will make // compilations submitted by a JVMCI compiler thread non-blocking. These // compilations should be scheduled after all blocking compilations // to service non-compiler related compilations sooner and reduce the // chance of such compilations timing out. max_task = max_blocking_task; max_method = max_task->method(); } if (max_task->comp_level() == CompLevel_full_profile && TieredStopAtLevel > CompLevel_full_profile && is_method_profiled(max_method)) { max_task->set_comp_level(CompLevel_limited_profile); if (PrintTieredEvents) {
< prev index next >