aboutsummaryrefslogtreecommitdiff
path: root/spark-common/src/main/java/me/lucko/spark/common/sampler
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2024-07-29 18:33:08 +0100
committerLuck <git@lucko.me>2024-07-29 18:33:08 +0100
commit60d54cc4df05e3328f8b8d64ea3b44d5d22c9ed7 (patch)
tree2bf8fcf914ac57466549d35dcd89ef96d3a2d65f /spark-common/src/main/java/me/lucko/spark/common/sampler
parent4c0149b6a15fa887328bbd88c8055c2138cc4d72 (diff)
downloadspark-60d54cc4df05e3328f8b8d64ea3b44d5d22c9ed7.tar.gz
spark-60d54cc4df05e3328f8b8d64ea3b44d5d22c9ed7.tar.bz2
spark-60d54cc4df05e3328f8b8d64ea3b44d5d22c9ed7.zip
Add some unit tests
Diffstat (limited to 'spark-common/src/main/java/me/lucko/spark/common/sampler')
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/sampler/BackgroundSamplerManager.java5
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/sampler/SamplerBuilder.java7
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/sampler/ThreadGrouper.java32
3 files changed, 31 insertions, 13 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/BackgroundSamplerManager.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/BackgroundSamplerManager.java
index 4e9ca9e..1889304 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/sampler/BackgroundSamplerManager.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/BackgroundSamplerManager.java
@@ -22,8 +22,9 @@ package me.lucko.spark.common.sampler;
import me.lucko.spark.common.SparkPlatform;
import me.lucko.spark.common.platform.PlatformInfo;
-import me.lucko.spark.common.util.Configuration;
+import me.lucko.spark.common.util.config.Configuration;
+import java.util.function.Supplier;
import java.util.logging.Level;
public class BackgroundSamplerManager {
@@ -103,7 +104,7 @@ public class BackgroundSamplerManager {
private void startSampler() {
boolean forceJavaEngine = this.configuration.getString(OPTION_ENGINE, "async").equals("java");
- ThreadGrouper threadGrouper = ThreadGrouper.parseConfigSetting(this.configuration.getString(OPTION_THREAD_GROUPER, "by-pool"));
+ Supplier<ThreadGrouper> threadGrouper = ThreadGrouper.parseConfigSetting(this.configuration.getString(OPTION_THREAD_GROUPER, "by-pool"));
ThreadDumper threadDumper = ThreadDumper.parseConfigSetting(this.configuration.getString(OPTION_THREAD_DUMPER, "default"));
if (threadDumper == null) {
threadDumper = this.platform.getPlugin().getDefaultThreadDumper();
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/SamplerBuilder.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/SamplerBuilder.java
index b6895ce..3046d92 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/sampler/SamplerBuilder.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/SamplerBuilder.java
@@ -28,6 +28,7 @@ import me.lucko.spark.common.sampler.java.JavaSampler;
import me.lucko.spark.common.tick.TickHook;
import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
/**
* Builds {@link Sampler} instances.
@@ -44,7 +45,7 @@ public class SamplerBuilder {
private long autoEndTime = -1;
private boolean background = false;
private ThreadDumper threadDumper = ThreadDumper.ALL;
- private ThreadGrouper threadGrouper = ThreadGrouper.BY_NAME;
+ private Supplier<ThreadGrouper> threadGrouper = ThreadGrouper.BY_NAME;
private int ticksOver = -1;
private TickHook tickHook = null;
@@ -80,7 +81,7 @@ public class SamplerBuilder {
return this;
}
- public SamplerBuilder threadGrouper(ThreadGrouper threadGrouper) {
+ public SamplerBuilder threadGrouper(Supplier<ThreadGrouper> threadGrouper) {
this.threadGrouper = threadGrouper;
return this;
}
@@ -131,7 +132,7 @@ public class SamplerBuilder {
this.samplingInterval
);
- SamplerSettings settings = new SamplerSettings(interval, this.threadDumper, this.threadGrouper, this.autoEndTime, this.background);
+ SamplerSettings settings = new SamplerSettings(interval, this.threadDumper, this.threadGrouper.get(), this.autoEndTime, this.background);
Sampler sampler;
if (this.mode == SamplerMode.ALLOCATION) {
diff --git a/spark-common/src/main/java/me/lucko/spark/common/sampler/ThreadGrouper.java b/spark-common/src/main/java/me/lucko/spark/common/sampler/ThreadGrouper.java
index b6cfbea..c8d5b3c 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/sampler/ThreadGrouper.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/sampler/ThreadGrouper.java
@@ -26,6 +26,7 @@ import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -64,7 +65,7 @@ public interface ThreadGrouper {
* @param setting the config setting
* @return the thread grouper
*/
- static ThreadGrouper parseConfigSetting(String setting) {
+ static Supplier<ThreadGrouper> parseConfigSetting(String setting) {
switch (setting) {
case "as-one":
return AS_ONE;
@@ -76,9 +77,14 @@ public interface ThreadGrouper {
}
/**
+ * Supplier for {@link ByName} thread groupers.
+ */
+ Supplier<ThreadGrouper> BY_NAME = ByName::new;
+
+ /**
* Implementation of {@link ThreadGrouper} that just groups by thread name.
*/
- ThreadGrouper BY_NAME = new ThreadGrouper() {
+ class ByName implements ThreadGrouper {
@Override
public String getGroup(long threadId, String threadName) {
return threadName;
@@ -93,7 +99,12 @@ public interface ThreadGrouper {
public SamplerMetadata.DataAggregator.ThreadGrouper asProto() {
return SamplerMetadata.DataAggregator.ThreadGrouper.BY_NAME;
}
- };
+ }
+
+ /**
+ * Supplier for {@link ByPool} thread groupers.
+ */
+ Supplier<ThreadGrouper> BY_POOL = ByPool::new;
/**
* Implementation of {@link ThreadGrouper} that attempts to group by the name of the pool
@@ -102,8 +113,8 @@ public interface ThreadGrouper {
* <p>The regex pattern used to match pools expects a digit at the end of the thread name,
* separated from the pool name with any of one or more of ' ', '-', or '#'.</p>
*/
- ThreadGrouper BY_POOL = new ThreadGrouper() {
- private /* static */ final Pattern pattern = Pattern.compile("^(.*?)[-# ]+\\d+$");
+ class ByPool implements ThreadGrouper {
+ private static final Pattern PATTERN = Pattern.compile("^(.*?)[-# ]+\\d+$");
// thread id -> group
private final Map<Long, String> cache = new ConcurrentHashMap<>();
@@ -117,7 +128,7 @@ public interface ThreadGrouper {
return cached;
}
- Matcher matcher = this.pattern.matcher(threadName);
+ Matcher matcher = PATTERN.matcher(threadName);
if (!matcher.matches()) {
return threadName;
}
@@ -141,13 +152,18 @@ public interface ThreadGrouper {
public SamplerMetadata.DataAggregator.ThreadGrouper asProto() {
return SamplerMetadata.DataAggregator.ThreadGrouper.BY_POOL;
}
- };
+ }
+
+ /**
+ * Supplier for {@link AsOne} thread groupers.
+ */
+ Supplier<ThreadGrouper> AS_ONE = AsOne::new;
/**
* Implementation of {@link ThreadGrouper} which groups all threads as one, under
* the name "All".
*/
- ThreadGrouper AS_ONE = new ThreadGrouper() {
+ class AsOne implements ThreadGrouper {
private final Set<Long> seen = ConcurrentHashMap.newKeySet();
@Override