8058184: Move _highest_comp_level and _highest_osr_comp_level from MethodData to MethodCounters

Tiered policy requires highest compilation levels always available

Reviewed-by: kvn, vlivanov
This commit is contained in:
Igor Veresov 2014-09-11 00:04:50 -07:00
parent 7275456c3a
commit 6dc6f53f6a
5 changed files with 58 additions and 24 deletions

View file

@ -1635,34 +1635,34 @@ int Method::backedge_count() {
} }
int Method::highest_comp_level() const { int Method::highest_comp_level() const {
const MethodData* mdo = method_data(); const MethodCounters* mcs = method_counters();
if (mdo != NULL) { if (mcs != NULL) {
return mdo->highest_comp_level(); return mcs->highest_comp_level();
} else { } else {
return CompLevel_none; return CompLevel_none;
} }
} }
int Method::highest_osr_comp_level() const { int Method::highest_osr_comp_level() const {
const MethodData* mdo = method_data(); const MethodCounters* mcs = method_counters();
if (mdo != NULL) { if (mcs != NULL) {
return mdo->highest_osr_comp_level(); return mcs->highest_osr_comp_level();
} else { } else {
return CompLevel_none; return CompLevel_none;
} }
} }
void Method::set_highest_comp_level(int level) { void Method::set_highest_comp_level(int level) {
MethodData* mdo = method_data(); MethodCounters* mcs = method_counters();
if (mdo != NULL) { if (mcs != NULL) {
mdo->set_highest_comp_level(level); mcs->set_highest_comp_level(level);
} }
} }
void Method::set_highest_osr_comp_level(int level) { void Method::set_highest_osr_comp_level(int level) {
MethodData* mdo = method_data(); MethodCounters* mcs = method_counters();
if (mdo != NULL) { if (mcs != NULL) {
mdo->set_highest_osr_comp_level(level); mcs->set_highest_osr_comp_level(level);
} }
} }

View file

@ -35,4 +35,40 @@ void MethodCounters::clear_counters() {
set_interpreter_throwout_count(0); set_interpreter_throwout_count(0);
set_interpreter_invocation_count(0); set_interpreter_invocation_count(0);
set_nmethod_age(INT_MAX); set_nmethod_age(INT_MAX);
#ifdef TIERED
set_prev_time(0);
set_rate(0);
set_highest_comp_level(0);
set_highest_osr_comp_level(0);
#endif
} }
int MethodCounters::highest_comp_level() const {
#ifdef TIERED
return _highest_comp_level;
#else
return CompLevel_none;
#endif
}
void MethodCounters::set_highest_comp_level(int level) {
#ifdef TIERED
_highest_comp_level = level;
#endif
}
int MethodCounters::highest_osr_comp_level() const {
#ifdef TIERED
return _highest_osr_comp_level;
#else
return CompLevel_none;
#endif
}
void MethodCounters::set_highest_osr_comp_level(int level) {
#ifdef TIERED
_highest_osr_comp_level = level;
#endif
}

View file

@ -49,6 +49,8 @@ class MethodCounters: public MetaspaceObj {
#ifdef TIERED #ifdef TIERED
float _rate; // Events (invocation and backedge counter increments) per millisecond float _rate; // Events (invocation and backedge counter increments) per millisecond
jlong _prev_time; // Previous time the rate was acquired jlong _prev_time; // Previous time the rate was acquired
u1 _highest_comp_level; // Highest compile level this method has ever seen.
u1 _highest_osr_comp_level; // Same for OSR level
#endif #endif
MethodCounters() : _interpreter_invocation_count(0), MethodCounters() : _interpreter_invocation_count(0),
@ -57,7 +59,9 @@ class MethodCounters: public MetaspaceObj {
_nmethod_age(INT_MAX) _nmethod_age(INT_MAX)
#ifdef TIERED #ifdef TIERED
, _rate(0), , _rate(0),
_prev_time(0) _prev_time(0),
_highest_comp_level(0),
_highest_osr_comp_level(0)
#endif #endif
{ {
invocation_counter()->init(); invocation_counter()->init();
@ -114,6 +118,11 @@ class MethodCounters: public MetaspaceObj {
void set_rate(float rate) { _rate = rate; } void set_rate(float rate) { _rate = rate; }
#endif #endif
int highest_comp_level() const;
void set_highest_comp_level(int level);
int highest_osr_comp_level() const;
void set_highest_osr_comp_level(int level);
// invocation counter // invocation counter
InvocationCounter* invocation_counter() { return &_invocation_counter; } InvocationCounter* invocation_counter() { return &_invocation_counter; }
InvocationCounter* backedge_counter() { return &_backedge_counter; } InvocationCounter* backedge_counter() { return &_backedge_counter; }

View file

@ -1134,8 +1134,6 @@ void MethodData::init() {
_tenure_traps = 0; _tenure_traps = 0;
_num_loops = 0; _num_loops = 0;
_num_blocks = 0; _num_blocks = 0;
_highest_comp_level = 0;
_highest_osr_comp_level = 0;
_would_profile = true; _would_profile = true;
#if INCLUDE_RTM_OPT #if INCLUDE_RTM_OPT

View file

@ -2095,10 +2095,6 @@ private:
// time with C1. It is used to determine if method is trivial. // time with C1. It is used to determine if method is trivial.
short _num_loops; short _num_loops;
short _num_blocks; short _num_blocks;
// Highest compile level this method has ever seen.
u1 _highest_comp_level;
// Same for OSR level
u1 _highest_osr_comp_level;
// Does this method contain anything worth profiling? // Does this method contain anything worth profiling?
bool _would_profile; bool _would_profile;
@ -2277,11 +2273,6 @@ public:
void set_would_profile(bool p) { _would_profile = p; } void set_would_profile(bool p) { _would_profile = p; }
bool would_profile() const { return _would_profile; } bool would_profile() const { return _would_profile; }
int highest_comp_level() const { return _highest_comp_level; }
void set_highest_comp_level(int level) { _highest_comp_level = level; }
int highest_osr_comp_level() const { return _highest_osr_comp_level; }
void set_highest_osr_comp_level(int level) { _highest_osr_comp_level = level; }
int num_loops() const { return _num_loops; } int num_loops() const { return _num_loops; }
void set_num_loops(int n) { _num_loops = n; } void set_num_loops(int n) { _num_loops = n; }
int num_blocks() const { return _num_blocks; } int num_blocks() const { return _num_blocks; }