diff --git a/sources/pom.xml b/sources/pom.xml
index 8b2346907..571467faf 100644
--- a/sources/pom.xml
+++ b/sources/pom.xml
@@ -134,11 +134,6 @@
mixin
0.7.8-SNAPSHOT
-
- net.openhft
- chronicle-queue
- 4.16.1
-
diff --git a/sources/src/main/java/io/akarin/api/LogWrapper.java b/sources/src/main/java/io/akarin/api/LogWrapper.java
index be8ab5b5e..6164a4115 100644
--- a/sources/src/main/java/io/akarin/api/LogWrapper.java
+++ b/sources/src/main/java/io/akarin/api/LogWrapper.java
@@ -1,8 +1,12 @@
package io.akarin.api;
+import java.util.concurrent.ThreadFactory;
+
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
public abstract class LogWrapper {
/**
* A common logger used by mixin classes
@@ -13,4 +17,9 @@ public abstract class LogWrapper {
* Temporarily disable desync timings error, moreover it's worthless to trace async operation
*/
public static volatile boolean silentTiming;
+
+ /**
+ * A common thread pool factory
+ */
+ public static final ThreadFactory STAGE_FACTORY = new ThreadFactoryBuilder().setNameFormat("Akarin Schedule Thread - %1$d").build();
}
diff --git a/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java b/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java
index e04f2f06b..b5c9271a3 100644
--- a/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java
+++ b/sources/src/main/java/io/akarin/server/core/AkarinGlobalConfig.java
@@ -157,9 +157,4 @@ public class AkarinGlobalConfig {
private static void registryTerminationSeconds() {
registryTerminationSeconds = getSeconds(getString("bootstrap.parallel-registry-termination", "9s"));
}
-
- public static boolean primaryWorldServer;
- private static void primaryWorldServer() {
- primaryWorldServer = getBoolean("bonus.primary-world-server", false);
- }
}
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java
index 9d8458548..0974fd93c 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinMinecraftServer.java
@@ -6,6 +6,7 @@ import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.chunkio.ChunkIOExecutor;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
@@ -55,7 +56,7 @@ public class MixinMinecraftServer {
@Shadow public ServerConnection an() { return null; }
@Shadow public CustomFunctionData aL() { return null; }
- private final ExecutorCompletionService STAGE_WORLD_TICK = new ExecutorCompletionService(Executors.newWorkStealingPool(3));
+ private final ExecutorCompletionService STAGE_WORLD_TICK = new ExecutorCompletionService(Executors.newFixedThreadPool(2, LogWrapper.STAGE_FACTORY));
@Overwrite
public void D() throws InterruptedException {
@@ -63,19 +64,14 @@ public class MixinMinecraftServer {
this.server.getScheduler().mainThreadHeartbeat(this.ticks); // CraftBukkit
MinecraftTimings.bukkitSchedulerTimer.stopTiming(); // Paper
MinecraftTimings.minecraftSchedulerTimer.startTiming(); // Paper
- Queue queue = this.j;
- // Spigot start
FutureTask> entry;
int count = this.j.size();
while (count-- > 0 && (entry = this.j.poll()) != null) {
SystemUtils.a(entry, MinecraftServer.LOGGER);
}
- // Spigot end
MinecraftTimings.minecraftSchedulerTimer.stopTiming(); // Paper
- // CraftBukkit start
- // Run tasks that are waiting on processing
MinecraftTimings.processQueueTimer.startTiming(); // Spigot
while (!processQueue.isEmpty()) {
processQueue.remove().run();
@@ -83,7 +79,7 @@ public class MixinMinecraftServer {
MinecraftTimings.processQueueTimer.stopTiming(); // Spigot
MinecraftTimings.chunkIOTickTimer.startTiming(); // Spigot
- org.bukkit.craftbukkit.chunkio.ChunkIOExecutor.tick();
+ ChunkIOExecutor.tick();
MinecraftTimings.chunkIOTickTimer.stopTiming(); // Spigot
MinecraftTimings.timeUpdateTimer.startTiming(); // Spigot
@@ -96,13 +92,12 @@ public class MixinMinecraftServer {
}
MinecraftTimings.timeUpdateTimer.stopTiming(); // Spigot
- int i;
-
- for (i = 0; i < this.worlds.size(); ++i) { // CraftBukkit
+ for (int i = 0; i < this.worlds.size(); ++i) { // CraftBukkit
WorldServer worldserver = this.worlds.get(i);
// TODO Fix this feature
// TileEntityHopper.skipHopperEvents = worldserver.paperConfig.disableHopperMoveEvents || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0;
+ LogWrapper.silentTiming = true;
STAGE_WORLD_TICK.submit(() -> {
try {
worldserver.doTick();
@@ -122,7 +117,7 @@ public class MixinMinecraftServer {
try {
worldserver.tickEntities();
} catch (Throwable throwable1) {
- CrashReport crashreport = null;
+ CrashReport crashreport;
try {
crashreport = CrashReport.a(throwable1, "Exception ticking world entities");
} catch (Throwable t){
@@ -133,37 +128,36 @@ public class MixinMinecraftServer {
}
}, null);
- LogWrapper.silentTiming = true;
worldserver.timings.doTick.startTiming();
STAGE_WORLD_TICK.take(); // Block
worldserver.timings.doTick.stopTiming();
worldserver.timings.tickEntities.startTiming();
STAGE_WORLD_TICK.take(); // Entity
- worldserver.timings.tickEntities.stopTiming();
LogWrapper.silentTiming = false;
+ worldserver.timings.tickEntities.stopTiming();
worldserver.getTracker().updatePlayers();
worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
}
- MinecraftTimings.connectionTimer.startTiming(); // Spigot
+ MinecraftTimings.connectionTimer.startTiming();
this.an().c();
- MinecraftTimings.connectionTimer.stopTiming(); // Spigot
+ MinecraftTimings.connectionTimer.stopTiming();
- MinecraftTimings.playerListTimer.startTiming(); // Spigot
+ MinecraftTimings.playerListTimer.startTiming();
this.v.tick();
- MinecraftTimings.playerListTimer.stopTiming(); // Spigot
+ MinecraftTimings.playerListTimer.stopTiming();
- MinecraftTimings.commandFunctionsTimer.startTiming(); // Spigot
+ MinecraftTimings.commandFunctionsTimer.startTiming();
this.aL().e();
- MinecraftTimings.commandFunctionsTimer.stopTiming(); // Spigot
+ MinecraftTimings.commandFunctionsTimer.stopTiming();
- MinecraftTimings.tickablesTimer.startTiming(); // Spigot
- for (i = 0; i < this.o.size(); ++i) {
+ MinecraftTimings.tickablesTimer.startTiming();
+ for (int i = 0; i < this.o.size(); ++i) {
this.o.get(i).e();
}
- MinecraftTimings.tickablesTimer.stopTiming(); // Spigot
+ MinecraftTimings.tickablesTimer.stopTiming();
}
}
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/ParallelRegistry.java b/sources/src/main/java/io/akarin/server/mixin/core/ParallelRegistry.java
index 870fa52fc..957c43946 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/ParallelRegistry.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/ParallelRegistry.java
@@ -2,7 +2,6 @@ package io.akarin.server.mixin.core;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import org.spongepowered.asm.mixin.Mixin;
@@ -11,8 +10,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-
+import io.akarin.api.LogWrapper;
import io.akarin.server.core.AkarinGlobalConfig;
import net.minecraft.server.BiomeBase;
import net.minecraft.server.Block;
@@ -28,21 +26,19 @@ import net.minecraft.server.SoundEffect;
@Mixin(value = DispenserRegistry.class, remap = false)
public class ParallelRegistry {
- private static final ThreadFactory STAGE_FACTORY = new ThreadFactoryBuilder().setNameFormat("Akarin Parallel Registry Thread - %1$d").build();
-
/**
* Registry order: SoundEffect -> Block
*/
- private static final ExecutorService STAGE_BLOCK = Executors.newSingleThreadExecutor(STAGE_FACTORY);
+ private static final ExecutorService STAGE_BLOCK = Executors.newSingleThreadExecutor(LogWrapper.STAGE_FACTORY);
/**
* Registry order: Item -> PotionBrewer & orderless: BlockFire, BiomeBase (After STAGE_BLOCK)
*/
- private static final ExecutorService STAGE_BLOCK_BASE = Executors.newWorkStealingPool(3);
+ private static final ExecutorService STAGE_BLOCK_BASE = Executors.newFixedThreadPool(3, LogWrapper.STAGE_FACTORY);
/**
* Registry order: MobEffectList -> PotionRegistry & orderless: Enchantment, EntityTypes
*/
- private static final ExecutorService STAGE_STANDALONE = Executors.newWorkStealingPool(3);
+ private static final ExecutorService STAGE_STANDALONE = Executors.newFixedThreadPool(3, LogWrapper.STAGE_FACTORY);
private static final int TERMINATION_IN_SEC = AkarinGlobalConfig.registryTerminationSeconds;