< 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 >