< prev index next >

src/share/vm/gc/g1/workerDataArray.inline.hpp

Print this page

        

*** 48,58 **** } template <typename T> T WorkerDataArray<T>::get(uint worker_i) const { assert(worker_i < _length, "Worker %d is greater than max: %d", worker_i, _length); - assert(_data[worker_i] != uninitialized(), "No data added for worker %d", worker_i); return _data[worker_i]; } template <typename T> WorkerDataArray<T>::~WorkerDataArray() { --- 48,57 ----
*** 76,159 **** assert(_data[worker_i] != uninitialized(), "No data to add to for worker %d", worker_i); _data[worker_i] += value; } template <typename T> ! double WorkerDataArray<T>::average(uint active_threads) const { ! return sum(active_threads) / (double) active_threads; } template <typename T> ! T WorkerDataArray<T>::sum(uint active_threads) const { ! T s = get(0); ! for (uint i = 1; i < active_threads; ++i) { s += get(i); } return s; } template <typename T> - void WorkerDataArray<T>::clear() { - set_all(0); - } - - template <typename T> void WorkerDataArray<T>::set_all(T value) { for (uint i = 0; i < _length; i++) { _data[i] = value; } } template <class T> ! void WorkerDataArray<T>::print_summary_on(outputStream* out, uint active_threads, bool print_sum) const { ! T max = get(0); ! T min = max; T sum = 0; ! for (uint i = 1; i < active_threads; ++i) { T value = get(i); max = MAX2(max, value); min = MIN2(min, value); sum += value; } T diff = max - min; double avg = sum / (double) active_threads; ! WDAPrinter::summary(out, title(), min, avg, max, diff, sum, print_sum); } template <class T> ! void WorkerDataArray<T>::print_details_on(outputStream* out, uint active_threads) const { ! WDAPrinter::details(this, out, active_threads); } - #ifndef PRODUCT template <typename T> void WorkerDataArray<T>::reset() { set_all(uninitialized()); if (_thread_work_items != NULL) { _thread_work_items->reset(); } } - template <typename T> - void WorkerDataArray<T>::verify(uint active_threads) const { - assert(active_threads <= _length, "Wrong number of active threads"); - for (uint i = 0; i < active_threads; i++) { - assert(_data[i] != uninitialized(), - "Invalid data for worker %u in '%s'", i, _title); - } - if (_thread_work_items != NULL) { - _thread_work_items->verify(active_threads); - } - } - - template <> - inline size_t WorkerDataArray<size_t>::uninitialized() const { - return (size_t)-1; - } - - template <> - inline double WorkerDataArray<double>::uninitialized() const { - return -1.0; - } - #endif - #endif // SHARE_VM_GC_G1_WORKERDATAARRAY_INLINE_HPP --- 75,156 ---- assert(_data[worker_i] != uninitialized(), "No data to add to for worker %d", worker_i); _data[worker_i] += value; } template <typename T> ! double WorkerDataArray<T>::average() const { ! uint active_threads = 0; ! for (uint i = 0; i < _length; ++i) { ! if (get(i) != uninitialized()) { ! active_threads++; ! } ! } ! if (active_threads == 0) { ! return 0.0; ! } ! return sum() / (double) active_threads; } template <typename T> ! T WorkerDataArray<T>::sum() const { ! T s = 0; ! for (uint i = 0; i < _length; ++i) { ! if (get(i) != uninitialized()) { s += get(i); } + } return s; } template <typename T> void WorkerDataArray<T>::set_all(T value) { for (uint i = 0; i < _length; i++) { _data[i] = value; } } template <class T> ! void WorkerDataArray<T>::print_summary_on(outputStream* out, bool print_sum) const { ! out->print("%-25s", title()); ! uint start = 0; ! while (start < _length && get(start) == uninitialized()) { ! start++; ! } ! if (start < _length) { ! T min = get(start); ! T max = min; T sum = 0; ! uint active_threads = 0; ! for (uint i = start; i < _length; ++i) { T value = get(i); + if (value != uninitialized()) { max = MAX2(max, value); min = MIN2(min, value); sum += value; + active_threads++; + } } T diff = max - min; + assert(active_threads != 0, "Must be since we found a used value for the start index"); double avg = sum / (double) active_threads; ! WDAPrinter::summary(out, min, avg, max, diff, sum, print_sum); ! out->print_cr(", Workers: %d", active_threads); ! } else { ! // No data for this phase. ! out->print_cr(" skipped"); ! } } template <class T> ! void WorkerDataArray<T>::print_details_on(outputStream* out) const { ! WDAPrinter::details(this, out); } template <typename T> void WorkerDataArray<T>::reset() { set_all(uninitialized()); if (_thread_work_items != NULL) { _thread_work_items->reset(); } } #endif // SHARE_VM_GC_G1_WORKERDATAARRAY_INLINE_HPP
< prev index next >