diff options
author | Andrew Steinborn <andrew@steinborn.me> | 2020-05-26 05:49:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-26 10:49:58 +0100 |
commit | d993703e9b52651d456e7eceb691f90228b2cd5e (patch) | |
tree | 3f3c3450cb69818c1ea7edec552e92a44884a4b3 /spark-common/src/main/java/me/lucko/spark/common/util | |
parent | 0f207b3c44c701d42ac1bb828f5c967e2de73568 (diff) | |
download | spark-d993703e9b52651d456e7eceb691f90228b2cd5e.tar.gz spark-d993703e9b52651d456e7eceb691f90228b2cd5e.tar.bz2 spark-d993703e9b52651d456e7eceb691f90228b2cd5e.zip |
Add 95th percentile MSPT and replace average MSPT with median MSPT (#55)
Diffstat (limited to 'spark-common/src/main/java/me/lucko/spark/common/util')
-rw-r--r-- | spark-common/src/main/java/me/lucko/spark/common/util/RollingAverage.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/util/RollingAverage.java b/spark-common/src/main/java/me/lucko/spark/common/util/RollingAverage.java index 5cf5bb5..1e5e8b2 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/util/RollingAverage.java +++ b/spark-common/src/main/java/me/lucko/spark/common/util/RollingAverage.java @@ -23,6 +23,8 @@ package me.lucko.spark.common.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.List; import java.util.Queue; public class RollingAverage { @@ -79,4 +81,26 @@ public class RollingAverage { } } + public double getMedian() { + return getPercentile(50); + } + + public double getPercentile(int percentile) { + if (percentile < 0 || percentile > 100) { + throw new IllegalArgumentException("Invalid percentage " + percentile); + } + + List<BigDecimal> sortedSamples; + synchronized (this) { + if (this.samples.isEmpty()) { + return 0; + } + sortedSamples = new ArrayList<>(this.samples); + } + sortedSamples.sort(null); + + int rank = (int) Math.ceil((percentile / 100d) * sortedSamples.size()); + return sortedSamples.get(rank).doubleValue(); + } + } |