< prev index next >
src/share/vm/gc/g1/workerDataArray.inline.hpp
Print this page
@@ -48,11 +48,10 @@
}
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() {
@@ -76,84 +75,86 @@
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;
+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(uint active_threads) const {
- T s = get(0);
- for (uint i = 1; i < active_threads; ++i) {
+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>::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;
+void WorkerDataArray<T>::print_summary_on(outputStream* out, bool print_sum) const {
+ uint start = 0;
+ while (get(start) == uninitialized()) {
+ assert(start < _length, "Printing unused WorkerDataArray.");
+ start++;
+ }
+ T min = get(start);
+ T max = min;
T sum = 0;
- for (uint i = 1; i < active_threads; ++i) {
+ 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, 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);
+void WorkerDataArray<T>::print_details_on(outputStream* out) const {
+ WDAPrinter::details(this, out);
}
-#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
< prev index next >