diff options
author | Hannes Greule <SirYwell@users.noreply.github.com> | 2024-07-14 16:35:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-14 15:35:16 +0100 |
commit | d909d19fc01a3011956b51556837764aecbf58f3 (patch) | |
tree | 889cea9544f57b43f9e7b907fa1bbb26a5ea10f5 | |
parent | 45ce159cda4a444fda437deae99452e8ed71493e (diff) | |
download | spark-d909d19fc01a3011956b51556837764aecbf58f3.tar.gz spark-d909d19fc01a3011956b51556837764aecbf58f3.tar.bz2 spark-d909d19fc01a3011956b51556837764aecbf58f3.zip |
Ignore trailing sleeping samples for duration estimation (#413)
-rw-r--r-- | spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java | 2 | ||||
-rw-r--r-- | spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java index c51ec05..b7b841e 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java +++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/JavaDataAggregator.java @@ -99,7 +99,7 @@ public abstract class JavaDataAggregator extends AbstractDataAggregator { return super.exportData(); } - private static boolean isSleeping(ThreadInfo thread) { + static boolean isSleeping(ThreadInfo thread) { if (thread.getThreadState() == Thread.State.WAITING || thread.getThreadState() == Thread.State.TIMED_WAITING) { return true; } diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java index 08cb719..f24af3f 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java +++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/java/TickedDataAggregator.java @@ -110,7 +110,7 @@ public class TickedDataAggregator extends JavaDataAggregator { } // approximate how long the tick lasted - int tickLengthMicros = currentData.getList().size() * this.interval; + int tickLengthMicros = currentData.sizeWithoutTrailingSleeping() * this.interval; // don't push data below the threshold if (tickLengthMicros < this.tickLengthThreshold) { @@ -151,6 +151,16 @@ public class TickedDataAggregator extends JavaDataAggregator { return this.list; } + public int sizeWithoutTrailingSleeping() { + // find the last index at which the thread wasn't sleeping + for (int i = this.list.size() - 1; i >= 0; i--) { + if (!isSleeping(this.list.get(i))) { + return i + 1; // add one to go from index to size + } + } + return 0; + } + public void addData(ThreadInfo data) { this.list.add(data); } |