/** * Creates an aggregate of the passed long values * * @param values the longs to aggregate * @return An array of longs containing <b><code>AVG, MIN, MAX</code></b>. */ public static long[] aggregate(long... values) { if (values == null || values.length < 1) return new long[] {0, 0, 0}; long[] aggr = new long[3]; long max = Long.MIN_VALUE; long min = Long.MAX_VALUE; int cnt = 0; BigDecimal total = new BigDecimal(0); for (long value : values) { if (value == -1) continue; total = total.add(BigDecimal.valueOf(value)); if (value > max) max = value; if (value < min) min = value; cnt++; } try { aggr[0] = (cnt != 0 && total.longValue() > 0) ? (SimpleMath.avg(cnt, total.longValue())) : 0; } catch (Exception e) { System.err.println( "Failed to compute average for a total of [" + total + "] and count [" + cnt + "]. Stack trace follows:"); e.printStackTrace(System.err); } aggr[1] = min == Long.MAX_VALUE ? -1 : min; aggr[2] = max == Long.MIN_VALUE ? -1 : max; return aggr; }
/** * Returns an aggregate of the passed ThreadBenchmarkResult * * @param results the ThreadBenchmarkResult to aggregate * @return the aggregate */ public static AggregatedThreadBenchmarkResult aggregate(ThreadBenchmarkResult... results) { long[] args = new long[LONG_VALUE_CNT]; AggregatedElapsedTime aggregatedElapsedTime = AggregatedElapsedTime.aggregate(getElapsedTimes(results)); int index = 0; long[] values = getAggregate("AvgPerOpMs", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("AvgPerOpNs", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("BlockCount", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("BlockTime", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("WaitCount", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("WaitTime", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; values = getAggregate("ElapsedSysCpu", results); args[index++] = values[0]; args[index++] = values[1]; args[index++] = values[2]; final int opCount = results[0].opCount; args[index++] = SimpleMath.avg(opCount, values[0]); args[index++] = SimpleMath.avg(opCount, values[1]); args[index++] = SimpleMath.avg(opCount, values[2]); return new AggregatedThreadBenchmarkResult(aggregatedElapsedTime, args); }