diff options
-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); } |