mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2026-01-04 15:41:40 +00:00
Clean up some multithreaded tracker code
This commit is contained in:
@@ -78,7 +78,7 @@ index 66721a27cc9a373a12dffb72c4a403473377eff6..2fbab1b4d20c3ead0ed1a117b29679fa
|
||||
public FullChunkStatus status;
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
index 2b9968a8a3d0d66d9db5a83dcf2a44767a9fe412..e72c6d658f986339dec9dd0a0669e16fd9b5619b 100644
|
||||
index 2b9968a8a3d0d66d9db5a83dcf2a44767a9fe412..9050b1c2c77acd335da0ec404ce1322621ba3025 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -1128,8 +1128,35 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -107,7 +107,7 @@ index 2b9968a8a3d0d66d9db5a83dcf2a44767a9fe412..e72c6d658f986339dec9dd0a0669e16f
|
||||
+
|
||||
+ this.tracking = true;
|
||||
+ try {
|
||||
+ this.multithreadedTracker.tick();
|
||||
+ this.multithreadedTracker.processTrackQueue();
|
||||
+ } finally {
|
||||
+ this.tracking = false;
|
||||
+ }
|
||||
@@ -310,10 +310,10 @@ index abcf4fee07b6ea85de116252b823d30e57006654..af11b77112752a8bb64f6a5cac265a2d
|
||||
public static boolean jadeProtocol = false;
|
||||
diff --git a/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java b/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..9056ea6fc6745f1d83550a544c94c4bd68dc1d2d
|
||||
index 0000000000000000000000000000000000000000..a19a664eb91e28486baf5699e9dc1321be13ec5c
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java
|
||||
@@ -0,0 +1,157 @@
|
||||
@@ -0,0 +1,156 @@
|
||||
+package org.dreeam.leaf.async.tracker;
|
||||
+
|
||||
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
@@ -338,7 +338,6 @@ index 0000000000000000000000000000000000000000..9056ea6fc6745f1d83550a544c94c4bd
|
||||
+ SEND_CHANGES
|
||||
+ }
|
||||
+
|
||||
+ private static final int parallelism = Math.max(4, Runtime.getRuntime().availableProcessors());
|
||||
+ private static final Executor trackerExecutor = new ThreadPoolExecutor(
|
||||
+ 1,
|
||||
+ org.dreeam.leaf.LeafConfig.asyncPathfindingMaxThreads,
|
||||
@@ -360,7 +359,7 @@ index 0000000000000000000000000000000000000000..9056ea6fc6745f1d83550a544c94c4bd
|
||||
+ this.mainThreadTasks = mainThreadTasks;
|
||||
+ }
|
||||
+
|
||||
+ public void tick() {
|
||||
+ public void processTrackQueue() {
|
||||
+ int iterator = this.entityTickingChunks.createRawIterator();
|
||||
+
|
||||
+ if (iterator == -1) {
|
||||
@@ -372,7 +371,7 @@ index 0000000000000000000000000000000000000000..9056ea6fc6745f1d83550a544c94c4bd
|
||||
+ this.taskIndex.set(iterator);
|
||||
+ this.finishedTasks.set(0);
|
||||
+
|
||||
+ for (int i = 0; i < parallelism; i++) {
|
||||
+ for (int i = 0; i < org.dreeam.leaf.LeafConfig.asyncPathfindingMaxThreads; i++) {
|
||||
+ trackerExecutor.execute(this::runUpdatePlayers);
|
||||
+ }
|
||||
+
|
||||
@@ -381,7 +380,7 @@ index 0000000000000000000000000000000000000000..9056ea6fc6745f1d83550a544c94c4bd
|
||||
+ this.handleChunkUpdates(5); // assist
|
||||
+ }
|
||||
+
|
||||
+ while (this.finishedTasks.get() != parallelism) {
|
||||
+ while (this.finishedTasks.get() != org.dreeam.leaf.LeafConfig.asyncPathfindingMaxThreads) {
|
||||
+ this.runMainThreadTasks();
|
||||
+ }
|
||||
+
|
||||
|
||||
Reference in New Issue
Block a user