< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.cpp
Print this page
rev 59132 : 8244326: Shenandoah: global statistics should not accept bogus samples
Reviewed-by: XXX
*** 55,65 ****
for (uint i = 0; i < _num_phases; i++) {
#define SHENANDOAH_WORKER_DATA_NULL(type, title) \
_worker_data[i] = NULL;
SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_NULL)
#undef SHENANDOAH_WORKER_DATA_NULL
! _cycle_data[i] = 0;
}
// Then punch in the worker-related data.
// Every worker phase get a bunch of internal objects, except
// the very first slot, which is "<total>" and is not populated.
--- 55,65 ----
for (uint i = 0; i < _num_phases; i++) {
#define SHENANDOAH_WORKER_DATA_NULL(type, title) \
_worker_data[i] = NULL;
SHENANDOAH_PAR_PHASE_DO(,, SHENANDOAH_WORKER_DATA_NULL)
#undef SHENANDOAH_WORKER_DATA_NULL
! _cycle_data[i] = uninitialized();
}
// Then punch in the worker-related data.
// Every worker phase get a bunch of internal objects, except
// the very first slot, which is "<total>" and is not populated.
*** 132,142 ****
}
void ShenandoahPhaseTimings::set_cycle_data(Phase phase, double time) {
#ifdef ASSERT
double d = _cycle_data[phase];
! assert(d == 0, "Should not be set yet: %s, current value: %lf", phase_name(phase), d);
#endif
_cycle_data[phase] = time;
}
void ShenandoahPhaseTimings::record_phase_time(Phase phase, double time) {
--- 132,142 ----
}
void ShenandoahPhaseTimings::set_cycle_data(Phase phase, double time) {
#ifdef ASSERT
double d = _cycle_data[phase];
! assert(d == uninitialized(), "Should not be set yet: %s, current value: %lf", phase_name(phase), d);
#endif
_cycle_data[phase] = time;
}
void ShenandoahPhaseTimings::record_phase_time(Phase phase, double time) {
*** 173,199 ****
void ShenandoahPhaseTimings::flush_par_workers_to_cycle() {
for (uint pi = 0; pi < _num_phases; pi++) {
Phase phase = Phase(pi);
if (is_worker_phase(phase)) {
! double s = 0;
for (uint i = 1; i < _num_par_phases; i++) {
! double t = worker_data(phase, ParPhase(i))->sum();
! // add to each line in phase
! set_cycle_data(Phase(phase + i + 1), t);
! s += t;
}
- // add to total for phase
- set_cycle_data(Phase(phase + 1), s);
}
}
}
void ShenandoahPhaseTimings::flush_cycle_to_global() {
for (uint i = 0; i < _num_phases; i++) {
! _global_data[i].add(_cycle_data[i]);
! _cycle_data[i] = 0;
if (_worker_data[i] != NULL) {
_worker_data[i]->reset();
}
}
OrderAccess::fence();
--- 173,220 ----
void ShenandoahPhaseTimings::flush_par_workers_to_cycle() {
for (uint pi = 0; pi < _num_phases; pi++) {
Phase phase = Phase(pi);
if (is_worker_phase(phase)) {
! double s = uninitialized();
for (uint i = 1; i < _num_par_phases; i++) {
! ShenandoahWorkerData* wd = worker_data(phase, ParPhase(i));
! double ws = uninitialized();
! for (uint c = 0; c < _max_workers; c++) {
! double v = wd->get(c);
! if (v != ShenandoahWorkerData::uninitialized()) {
! if (ws == uninitialized()) {
! ws = v;
! } else {
! ws += v;
! }
! }
! }
! if (ws != uninitialized()) {
! // add to each line in phase
! set_cycle_data(Phase(phase + i + 1), ws);
! if (s == uninitialized()) {
! s = ws;
! } else {
! s += ws;
! }
! }
! }
! if (s != uninitialized()) {
! // add to total for phase
! set_cycle_data(Phase(phase + 1), s);
}
}
}
}
void ShenandoahPhaseTimings::flush_cycle_to_global() {
for (uint i = 0; i < _num_phases; i++) {
! if (_cycle_data[i] != uninitialized()) {
! _global_data[i].add(_cycle_data[i]);
! _cycle_data[i] = uninitialized();
! }
if (_worker_data[i] != NULL) {
_worker_data[i]->reset();
}
}
OrderAccess::fence();
< prev index next >