Move threading from LodUtil to ThreadUtil

This commit is contained in:
James Seibel
2023-03-04 14:37:31 -06:00
parent 1a047e14b6
commit cc4ffaf415
10 changed files with 75 additions and 43 deletions
@@ -34,8 +34,8 @@ import static com.seibel.lod.core.render.glObject.GLProxy.GL_LOGGER;
public class ColumnRenderBuffer extends AbstractRenderBuffer
{
//TODO: Make the pool change thread count after the config value is changed
public static final ExecutorService BUFFER_BUILDERS = LodUtil.makeThreadPool(Config.Client.Advanced.Threading.numberOfBufferBuilderThreads.get(), "BufferBuilder");
public static final ExecutorService BUFFER_UPLOADER = LodUtil.makeSingleThreadPool("ColumnBufferUploader");
public static final ExecutorService BUFFER_BUILDERS = ThreadUtil.makeThreadPool(Config.Client.Advanced.Threading.numberOfBufferBuilderThreads.get(), "BufferBuilder");
public static final ExecutorService BUFFER_UPLOADER = ThreadUtil.makeSingleThreadPool("ColumnBufferUploader");
public static final int MAX_CONCURRENT_CALL = 8;
public static final ConfigBasedLogger EVENT_LOGGER = new ConfigBasedLogger(LogManager.getLogger(),
@@ -35,7 +35,7 @@ public class ChunkToLodBuilder
}
private final ConcurrentHashMap<DhChunkPos, IChunkWrapper> latestChunkToBuild = new ConcurrentHashMap<>();
private final ConcurrentLinkedDeque<Task> taskToBuild = new ConcurrentLinkedDeque<>();
private final ExecutorService executor = LodUtil.makeThreadPool(THREAD_COUNT, ChunkToLodBuilder.class);
private final ExecutorService executor = ThreadUtil.makeThreadPool(THREAD_COUNT, ChunkToLodBuilder.class);
private final AtomicInteger runningCount = new AtomicInteger(0);
@@ -6,7 +6,7 @@ import com.seibel.lod.core.dataObjects.render.ColumnRenderSource;
import com.seibel.lod.core.dependencyInjection.SingletonInjector;
import com.seibel.lod.core.level.IDhClientLevel;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.util.ThreadUtil;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import org.apache.logging.log4j.Logger;
@@ -73,7 +73,7 @@ public class DataRenderTransformer
if (transformerThreads == null || transformerThreads.isTerminated())
{
LOGGER.info("Starting "+DataRenderTransformer.class.getSimpleName());
transformerThreads = LodUtil.makeThreadPool(4, "Data/Render Transformer");
transformerThreads = ThreadUtil.makeThreadPool(4, "Data/Render Transformer");
}
}
@@ -14,6 +14,7 @@ import com.seibel.lod.core.pos.DhLodPos;
import com.seibel.lod.core.pos.DhSectionPos;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.util.ThreadUtil;
import org.apache.logging.log4j.Logger;
import java.io.File;
@@ -31,7 +32,7 @@ public class FullDataFileHandler implements IFullDataSourceProvider
{
// Note: Single main thread only for now. May make it multi-thread later, depending on the usage.
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
final ExecutorService fileReaderThread = LodUtil.makeThreadPool(4, "FileReaderThread");
final ExecutorService fileReaderThread = ThreadUtil.makeThreadPool(4, "FileReaderThread");
final ConcurrentHashMap<DhSectionPos, FullDataMetaFile> files = new ConcurrentHashMap<>();
final IDhLevel level;
final File saveDir;
@@ -10,6 +10,7 @@ import com.seibel.lod.core.level.IDhClientLevel;
import com.seibel.lod.core.pos.DhLodPos;
import com.seibel.lod.core.pos.DhSectionPos;
import com.seibel.lod.core.util.FileUtil;
import com.seibel.lod.core.util.ThreadUtil;
import com.seibel.lod.core.util.objects.UncheckedInterruptedException;
import com.seibel.lod.core.config.Config;
import com.seibel.lod.core.logging.DhLoggerBuilder;
@@ -31,7 +32,7 @@ public class RenderSourceFileHandler implements ILodRenderSourceProvider
private static final Logger LOGGER = DhLoggerBuilder.getLogger();
private final ExecutorService renderCacheThread = LodUtil.makeSingleThreadPool("RenderCacheThread");
private final ExecutorService renderCacheThread = ThreadUtil.makeSingleThreadPool("RenderCacheThread");
private final ConcurrentHashMap<DhSectionPos, RenderMetaDataFile> filesBySectionPos = new ConcurrentHashMap<>();
private final IDhClientLevel level;
@@ -16,6 +16,7 @@ import com.seibel.lod.core.logging.ConfigBasedLogger;
import com.seibel.lod.core.pos.DhChunkPos;
import com.seibel.lod.core.pos.DhSectionPos;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.util.ThreadUtil;
import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
@@ -43,7 +44,7 @@ public class SubDimensionLevelMatcher implements AutoCloseable
public static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(),
() -> Config.Client.Advanced.Debugging.DebugSwitch.logFileSubDimEvent.get());
private final ExecutorService matcherThread = LodUtil.makeSingleThreadPool("Level-To-File-Matcher");
private final ExecutorService matcherThread = ThreadUtil.makeSingleThreadPool("Level-To-File-Matcher");
private SubDimensionPlayerData playerData = null;
private SubDimensionPlayerData firstSeenPlayerData = null;
@@ -20,22 +20,16 @@
package com.seibel.lod.core.util;
import java.util.Iterator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.google.common.net.PercentEscaper;
import com.seibel.lod.core.config.Config;
import com.seibel.lod.api.enums.config.EServerFolderNameMode;
import com.seibel.lod.api.enums.config.EVanillaOverdraw;
import com.seibel.lod.core.dependencyInjection.SingletonInjector;
import com.seibel.lod.core.logging.DhLoggerBuilder;
import com.seibel.lod.core.pos.DhChunkPos;
import com.seibel.lod.core.util.objects.ParsedIp;
import com.seibel.lod.core.pos.Pos2D;
import com.seibel.lod.core.render.vertexFormat.DefaultLodVertexFormats;
import com.seibel.lod.core.render.vertexFormat.LodVertexFormat;
import com.seibel.lod.core.util.gridList.EdgeDistanceBooleanGrid;
import com.seibel.lod.core.util.objects.LodThreadFactory;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper;
@@ -301,31 +295,6 @@ public class LodUtil
public static void assertToDo() {
throw new AssertFailureException("TODO!");
}
public static ExecutorService makeSingleThreadPool(String name, int relativePriority) {
return Executors.newFixedThreadPool(1, new LodThreadFactory(name, Thread.NORM_PRIORITY+relativePriority));
}
public static ExecutorService makeSingleThreadPool(Class<?> clazz, int relativePriority) {
return makeSingleThreadPool(clazz.getSimpleName(), relativePriority);
}
public static ExecutorService makeSingleThreadPool(String name) {
return makeSingleThreadPool(name, 0);
}
public static ExecutorService makeSingleThreadPool(Class<?> clazz) {
return makeSingleThreadPool(clazz.getSimpleName(), 0);
}
public static ExecutorService makeThreadPool(int poolSize, String name, int relativePriority) {
return Executors.newFixedThreadPool(poolSize, new LodThreadFactory(name, Thread.NORM_PRIORITY+relativePriority));
}
public static ExecutorService makeThreadPool(int poolSize, Class<?> clazz, int relativePriority) {
return makeThreadPool(poolSize, clazz.getSimpleName(), relativePriority);
}
public static ExecutorService makeThreadPool(int poolSize, String name) {
return makeThreadPool(poolSize, name, 0);
}
public static ExecutorService makeThreadPool(int poolSize, Class<?> clazz) {
return makeThreadPool(poolSize, clazz.getSimpleName(), 0);
}
}
@@ -0,0 +1,58 @@
package com.seibel.lod.core.util;
import com.seibel.lod.core.util.objects.LodThreadFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadUtil
{
public static int MINIMUM_RELATIVE_PRIORITY = -5;
public static int DEFAULT_RELATIVE_PRIORITY = 0;
// create thread pool //
public static ExecutorService makeThreadPool(int poolSize, String name, int relativePriority)
{
return Executors.newFixedThreadPool(poolSize, new LodThreadFactory(name, Thread.NORM_PRIORITY+relativePriority));
}
public static ExecutorService makeThreadPool(int poolSize, Class<?> clazz, int relativePriority)
{
return makeThreadPool(poolSize, clazz.getSimpleName(), relativePriority);
}
public static ExecutorService makeThreadPool(int poolSize, String name)
{
return makeThreadPool(poolSize, name, 0);
}
public static ExecutorService makeThreadPool(int poolSize, Class<?> clazz)
{
return makeThreadPool(poolSize, clazz.getSimpleName(), 0);
}
// create single thread pool //
public static ExecutorService makeSingleThreadPool(String name, int relativePriority)
{
return makeThreadPool(1, name, Thread.NORM_PRIORITY+relativePriority);
}
public static ExecutorService makeSingleThreadPool(Class<?> clazz, int relativePriority)
{
return makeThreadPool(1, clazz.getSimpleName(), relativePriority);
}
public static ExecutorService makeSingleThreadPool(String name)
{
return makeThreadPool(1, name, 0);
}
public static ExecutorService makeSingleThreadPool(Class<?> clazz)
{
return makeThreadPool(1, clazz.getSimpleName(), 0);
}
}
@@ -4,6 +4,7 @@ import com.seibel.lod.core.level.DhClientServerLevel;
import com.seibel.lod.core.level.IDhLevel;
import com.seibel.lod.core.file.structure.LocalSaveStructure;
import com.seibel.lod.core.logging.f3.F3Screen;
import com.seibel.lod.core.util.ThreadUtil;
import com.seibel.lod.core.util.objects.EventLoop;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
@@ -22,7 +23,7 @@ public class DhClientServerWorld extends AbstractDhWorld implements IDhClientWor
private final HashSet<DhClientServerLevel> dhLevels;
public final LocalSaveStructure saveStructure;
public ExecutorService dhTickerThread = LodUtil.makeSingleThreadPool("DHTickerThread", 2);
public ExecutorService dhTickerThread = ThreadUtil.makeSingleThreadPool("DHTickerThread", 2);
public EventLoop eventLoop = new EventLoop(this.dhTickerThread, this::_clientTick); //TODO: Rate-limit the loop
public F3Screen.DynamicMessage f3Message;
@@ -6,6 +6,7 @@ import com.seibel.lod.core.file.structure.ClientOnlySaveStructure;
import com.seibel.lod.core.config.Config;
import com.seibel.lod.core.level.states.ClientRenderState;
import com.seibel.lod.core.util.DetailDistanceUtil;
import com.seibel.lod.core.util.ThreadUtil;
import com.seibel.lod.core.util.objects.EventLoop;
import com.seibel.lod.core.util.LodUtil;
import com.seibel.lod.core.wrapperInterfaces.world.IClientLevelWrapper;
@@ -22,7 +23,7 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld
private final HashMap<IClientLevelWrapper, DhClientLevel> levels;
public final ClientOnlySaveStructure saveStructure;
public ExecutorService dhTickerThread = LodUtil.makeSingleThreadPool("DHTickerThread", 2);
public ExecutorService dhTickerThread = ThreadUtil.makeSingleThreadPool("DHTickerThread", 2);
public EventLoop eventLoop = new EventLoop(this.dhTickerThread, this::_clientTick);