package net.minecraft.util.profiling.jfr.stats; import java.time.Duration; import java.util.Comparator; import java.util.List; import java.util.Map; import javax.annotation.Nullable; import net.minecraft.util.profiling.jfr.Percentiles; public record TimedStatSummary( T fastest, T slowest, @Nullable T secondSlowest, int count, Map percentilesNanos, Duration totalDuration ) { public static TimedStatSummary summary(List p_185850_) { if (p_185850_.isEmpty()) { throw new IllegalArgumentException("No values"); } else { List list = p_185850_.stream().sorted(Comparator.comparing(TimedStat::duration)).toList(); Duration duration = list.stream().map(TimedStat::duration).reduce(Duration::plus).orElse(Duration.ZERO); T t = (T)list.get(0); T t1 = (T)list.get(list.size() - 1); T t2 = list.size() > 1 ? list.get(list.size() - 2) : null; int i = list.size(); Map map = Percentiles.evaluate(list.stream().mapToLong(p_185848_ -> p_185848_.duration().toNanos()).toArray()); return new TimedStatSummary<>(t, t1, t2, i, map, duration); } } }