// ------------------------------------------------------------------ // Adjust a CounterData count to be commensurate with // interpreter_invocation_count. If the MDO exists for // only 25% of the time the method exists, then the // counts in the MDO should be scaled by 4X, so that // they can be usefully and stably compared against the // invocation counts in methods. int ciMethod::scale_count(int count, float prof_factor) { if (count > 0 && method_data() != NULL) { int current_mileage = method_data()->current_mileage(); int creation_mileage = method_data()->creation_mileage(); int counter_life = current_mileage - creation_mileage; int method_life = interpreter_invocation_count(); // counter_life due to backedge_counter could be > method_life if (counter_life > method_life) counter_life = method_life; if (0 < counter_life && counter_life <= method_life) { count = (int)((double)count * prof_factor * method_life / counter_life + 0.5); count = (count > 0) ? count : 1; } } return count; }
// ------------------------------------------------------------------ // Adjust a CounterData count to be commensurate with // interpreter_invocation_count. If the MDO exists for // only 25% of the time the method exists, then the // counts in the MDO should be scaled by 4X, so that // they can be usefully and stably compared against the // invocation counts in methods. int ciMethod::scale_count(int count, float prof_factor) { if (count > 0 && method_data() != NULL) { int counter_life; int method_life = interpreter_invocation_count(); if (TieredCompilation) { // In tiered the MDO's life is measured directly, so just use the snapshotted counters counter_life = MAX2(method_data()->invocation_count(), method_data()->backedge_count()); } else { int current_mileage = method_data()->current_mileage(); int creation_mileage = method_data()->creation_mileage(); counter_life = current_mileage - creation_mileage; } // counter_life due to backedge_counter could be > method_life if (counter_life > method_life) counter_life = method_life; if (0 < counter_life && counter_life <= method_life) { count = (int)((double)count * prof_factor * method_life / counter_life + 0.5); count = (count > 0) ? count : 1; } } return count; }