Skip to content

Commit 16895f3

Browse files
committed
Add config value for render-thread-priority
1 parent da92e51 commit 16895f3

6 files changed

Lines changed: 23 additions & 12 deletions

File tree

common/src/main/java/de/bluecolored/bluemap/common/api/RenderManagerImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,16 @@ public boolean isRunning() {
8484

8585
@Override
8686
public void start() {
87-
if (!isRunning()){
88-
renderManager.start(plugin.getBlueMap().getConfig().getCoreConfig().resolveRenderThreadCount());
89-
}
90-
plugin.getPluginState().setRenderThreadsEnabled(true);
87+
start(plugin.getBlueMap().getConfig().getCoreConfig().resolveRenderThreadCount());
9188
}
9289

9390
@Override
9491
public void start(int threadCount) {
9592
if (!isRunning()){
96-
renderManager.start(threadCount);
93+
renderManager.start(
94+
threadCount,
95+
plugin.getBlueMap().getConfig().getCoreConfig().getRenderThreadPriority()
96+
);
9797
}
9898
plugin.getPluginState().setRenderThreadsEnabled(true);
9999
}

common/src/main/java/de/bluecolored/bluemap/common/config/CoreConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class CoreConfig {
3838

3939
private int renderThreadCount = 1;
4040

41+
private int renderThreadPriority = Thread.NORM_PRIORITY;
42+
4143
private boolean metrics = true;
4244

4345
private Path data = Path.of("bluemap");

common/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import java.net.UnknownHostException;
6868
import java.nio.file.Files;
6969
import java.nio.file.Path;
70-
import java.time.Duration;
7170
import java.time.Instant;
7271
import java.time.ZoneId;
7372
import java.time.ZonedDateTime;
@@ -422,7 +421,7 @@ public void unload(boolean keepWebserver) {
422421
if (renderManager != null){
423422
if (renderManager.getCurrentRenderTask() != null) {
424423
renderManager.removeAllRenderTasks();
425-
if (!renderManager.isRunning()) renderManager.start(1);
424+
if (!renderManager.isRunning()) renderManager.start(1, Thread.NORM_PRIORITY);
426425
try {
427426
renderManager.awaitIdle(true);
428427
} catch (InterruptedException ex) {
@@ -633,7 +632,7 @@ public boolean checkPausedByPlayerCount() {
633632
return true;
634633
} else {
635634
if (!renderManager.isRunning() && getPluginState().isRenderThreadsEnabled())
636-
renderManager.start(coreConfig.resolveRenderThreadCount());
635+
renderManager.start(coreConfig.resolveRenderThreadCount(), coreConfig.getRenderThreadPriority());
637636
return false;
638637
}
639638
}

common/src/main/java/de/bluecolored/bluemap/common/rendermanager/RenderManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ protected boolean removeEldestEntry(Map.Entry<RenderTask, Long> eldest) {
7171
};
7272
}
7373

74-
public void start(int threadCount) throws IllegalStateException {
74+
public void start(int threadCount, int threadPriority) throws IllegalStateException {
7575
if (threadCount <= 0) throw new IllegalArgumentException("threadCount has to be 1 or more!");
7676

7777
synchronized (this.workerThreads) {
@@ -86,7 +86,7 @@ public void start(int threadCount) throws IllegalStateException {
8686
this.running = true;
8787

8888
for (int i = 0; i < threadCount; i++) {
89-
WorkerThread worker = new WorkerThread();
89+
WorkerThread worker = new WorkerThread(threadPriority);
9090
this.workerThreads.add(worker);
9191
worker.start();
9292
}
@@ -352,9 +352,10 @@ public class WorkerThread extends Thread {
352352

353353
private final int id;
354354

355-
private WorkerThread() {
355+
private WorkerThread(int threadPriority) {
356356
this.id = RenderManager.this.nextWorkerThreadIndex.getAndIncrement();
357357
this.setName("BlueMap-RenderThread-" + RenderManager.this.id + "-" + this.id);
358+
this.setPriority(Math.clamp(threadPriority, Thread.MIN_PRIORITY, Thread.MAX_PRIORITY));
358359
}
359360

360361
@Override

common/src/main/resources/de/bluecolored/bluemap/config/core.conf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ data: "${data}"
2424
# Default is 1
2525
render-thread-count: ${render-thread-count}
2626

27+
# This changes the priority that BlueMap's render-threads will get.
28+
# How the thread-priority affects actual performance depends on your JVM.
29+
# The priority must be a value between 1 and 10.
30+
# Default is Javas default priority (5)
31+
#render-thread-priority: 1
32+
2733
# Controls whether BlueMap should try to find and load mod resources and datapacks from the server/world directories.
2834
# Default is true
2935
scan-for-mod-resources: true

implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ public void renderMaps(BlueMapService blueMap, boolean watch, TileUpdateStrategy
132132
Logger.global.logInfo("Start updating " + maps.size() + " maps ...");
133133

134134
// start rendering
135-
renderManager.start(blueMap.getConfig().getCoreConfig().resolveRenderThreadCount());
135+
renderManager.start(
136+
blueMap.getConfig().getCoreConfig().resolveRenderThreadCount(),
137+
blueMap.getConfig().getCoreConfig().getRenderThreadPriority()
138+
);
136139

137140
Timer timer = new Timer("BlueMap-CLI-Timer", true);
138141
TimerTask updateInfoTask = new TimerTask() {

0 commit comments

Comments
 (0)