32 lines
1.1 KiB
Java
32 lines
1.1 KiB
Java
package net.minecraft.util.profiling.jfr;
|
|
|
|
import com.google.common.math.Quantiles;
|
|
import com.google.common.math.Quantiles.ScaleAndIndexes;
|
|
import it.unimi.dsi.fastutil.ints.Int2DoubleRBTreeMap;
|
|
import it.unimi.dsi.fastutil.ints.Int2DoubleSortedMap;
|
|
import it.unimi.dsi.fastutil.ints.Int2DoubleSortedMaps;
|
|
import java.util.Comparator;
|
|
import java.util.Map;
|
|
import net.minecraft.Util;
|
|
|
|
public class Percentiles {
|
|
public static final ScaleAndIndexes DEFAULT_INDEXES = Quantiles.scale(100).indexes(50, 75, 90, 99);
|
|
|
|
private Percentiles() {
|
|
}
|
|
|
|
public static Map<Integer, Double> evaluate(long[] input) {
|
|
return input.length == 0 ? Map.of() : sorted(DEFAULT_INDEXES.compute(input));
|
|
}
|
|
|
|
public static Map<Integer, Double> evaluate(double[] input) {
|
|
return input.length == 0 ? Map.of() : sorted(DEFAULT_INDEXES.compute(input));
|
|
}
|
|
|
|
private static Map<Integer, Double> sorted(Map<Integer, Double> input) {
|
|
Int2DoubleSortedMap int2DoubleSortedMap = Util.make(
|
|
new Int2DoubleRBTreeMap(Comparator.reverseOrder()), int2DoubleRBTreeMap -> int2DoubleRBTreeMap.putAll(input)
|
|
);
|
|
return Int2DoubleSortedMaps.unmodifiable(int2DoubleSortedMap);
|
|
}
|
|
}
|