Re-add thread configurations for async lighting w/ Removed craps
This commit is contained in:
@@ -185,6 +185,16 @@ public class AkarinGlobalConfig {
|
|||||||
keepAliveTimeout = getSeconds(getString("core.keep-alive-response-timeout", "30s")) * 1000;
|
keepAliveTimeout = getSeconds(getString("core.keep-alive-response-timeout", "30s")) * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int asyncLightingThreads;
|
||||||
|
private static void asyncLightingThreads() {
|
||||||
|
asyncLightingThreads = getInt("core.async-lighting.executor-threads", 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean asyncLightingWorkStealing;
|
||||||
|
private static void asyncLightingWorkStealing() {
|
||||||
|
asyncLightingWorkStealing = getBoolean("core.async-lighting.use-work-stealing", false);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean throwOnAsyncCaught;
|
public static boolean throwOnAsyncCaught;
|
||||||
private static void throwOnAsyncCaught() {
|
private static void throwOnAsyncCaught() {
|
||||||
throwOnAsyncCaught = getBoolean("core.thread-safe.async-catcher.throw-on-caught", true);
|
throwOnAsyncCaught = getBoolean("core.thread-safe.async-catcher.throw-on-caught", true);
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ public class AkarinSlackScheduler extends Thread {
|
|||||||
return Singleton.instance;
|
return Singleton.instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void boot() {
|
public void boot() {
|
||||||
Singleton.instance.setName("Akarin Slack Scheduler Thread");
|
setName("Akarin Slack Scheduler Thread");
|
||||||
Singleton.instance.setDaemon(true);
|
setDaemon(true);
|
||||||
Singleton.instance.start();
|
start();
|
||||||
Akari.logger.info("Slack scheduler service started");
|
Akari.logger.info("Slack scheduler service started");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||||||
|
|
||||||
import io.akarin.api.internal.Akari;
|
import io.akarin.api.internal.Akari;
|
||||||
import io.akarin.server.core.AkarinGlobalConfig;
|
import io.akarin.server.core.AkarinGlobalConfig;
|
||||||
import net.minecraft.server.PersistentCollection;
|
|
||||||
|
|
||||||
@Mixin(value = AsyncCatcher.class, remap = false)
|
@Mixin(value = AsyncCatcher.class, remap = false)
|
||||||
public abstract class MixinAsyncCatcher {
|
public abstract class MixinAsyncCatcher {
|
||||||
@@ -23,7 +22,6 @@ public abstract class MixinAsyncCatcher {
|
|||||||
} else {
|
} else {
|
||||||
Akari.logger.warn("Asynchronous " + reason + "!");
|
Akari.logger.warn("Asynchronous " + reason + "!");
|
||||||
Thread.dumpStack();
|
Thread.dumpStack();
|
||||||
PersistentCollection.class.getName();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public abstract class MixinMinecraftServer {
|
|||||||
WorldServer world = worlds.get(i);
|
WorldServer world = worlds.get(i);
|
||||||
TileEntityHopper.skipHopperEvents = world.paperConfig.disableHopperMoveEvents || InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0;
|
TileEntityHopper.skipHopperEvents = world.paperConfig.disableHopperMoveEvents || InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0;
|
||||||
}
|
}
|
||||||
AkarinSlackScheduler.boot();
|
AkarinSlackScheduler.get().boot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Overwrite
|
@Overwrite
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public abstract class MixinChunk implements IMixinChunk {
|
|||||||
private CopyOnWriteArrayList<Short> queuedBlockLightingUpdates = new CopyOnWriteArrayList<>();
|
private CopyOnWriteArrayList<Short> queuedBlockLightingUpdates = new CopyOnWriteArrayList<>();
|
||||||
private AtomicInteger pendingLightUpdates = new AtomicInteger();
|
private AtomicInteger pendingLightUpdates = new AtomicInteger();
|
||||||
private long lightUpdateTime;
|
private long lightUpdateTime;
|
||||||
private ExecutorService lightExecutorService;
|
private static ExecutorService lightExecutorService;
|
||||||
|
|
||||||
@Shadow(aliases = "m") private boolean isGapLightingUpdated;
|
@Shadow(aliases = "m") private boolean isGapLightingUpdated;
|
||||||
@Shadow(aliases = "r") private boolean ticked;
|
@Shadow(aliases = "r") private boolean ticked;
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ package io.akarin.server.mixin.lighting;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ThreadFactory;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -37,6 +35,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
|||||||
import io.akarin.api.internal.Akari;
|
import io.akarin.api.internal.Akari;
|
||||||
import io.akarin.api.internal.mixin.IMixinChunk;
|
import io.akarin.api.internal.mixin.IMixinChunk;
|
||||||
import io.akarin.api.internal.mixin.IMixinWorldServer;
|
import io.akarin.api.internal.mixin.IMixinWorldServer;
|
||||||
|
import io.akarin.server.core.AkarinGlobalConfig;
|
||||||
import net.minecraft.server.BlockPosition;
|
import net.minecraft.server.BlockPosition;
|
||||||
import net.minecraft.server.Chunk;
|
import net.minecraft.server.Chunk;
|
||||||
import net.minecraft.server.EnumDirection;
|
import net.minecraft.server.EnumDirection;
|
||||||
@@ -55,11 +54,12 @@ public abstract class MixinWorldServer extends MixinWorld implements IMixinWorld
|
|||||||
private static final short XZ_MASK = 0xF;
|
private static final short XZ_MASK = 0xF;
|
||||||
private static final short Y_SHORT_MASK = 0xFF;
|
private static final short Y_SHORT_MASK = 0xFF;
|
||||||
|
|
||||||
private final static ThreadFactory SERVICE_FACTORY = new ThreadFactoryBuilder().setNameFormat("Akarin Async Lighting Thread - %1$d").build();
|
|
||||||
private final ExecutorService lightExecutorService = getExecutorService();
|
private final ExecutorService lightExecutorService = getExecutorService();
|
||||||
|
private static ExecutorService getExecutorService() {
|
||||||
private ExecutorService getExecutorService() {
|
return AkarinGlobalConfig.asyncLightingWorkStealing ?
|
||||||
return Executors.newFixedThreadPool(1, SERVICE_FACTORY);
|
Executors.newFixedThreadPool(AkarinGlobalConfig.asyncLightingThreads, new ThreadFactoryBuilder().setNameFormat("Akarin Async Light Thread").build())
|
||||||
|
:
|
||||||
|
Executors.newWorkStealingPool(AkarinGlobalConfig.asyncLightingThreads);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user