|
| 1 | +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| 2 | +From: Spottedleaf <Spottedleaf@users.noreply.github.com> |
| 3 | +Date: Sat, 4 Oct 2025 11:13:55 -0700 |
| 4 | +Subject: [PATCH] fixup! Moonrise optimisation patches |
| 5 | + |
| 6 | + |
| 7 | +diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java |
| 8 | +index 80f13315e8c7c0e3c82ab98f92387f56bb3b6481..e03faa94df6c77ab4f3f5d9ffe107220387a0dde 100644 |
| 9 | +--- a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java |
| 10 | ++++ b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java |
| 11 | +@@ -1472,6 +1472,11 @@ public final class ChunkHolderManager { |
| 12 | + |
| 13 | + boolean ret = false; |
| 14 | + |
| 15 | ++ if (pendingFullLoadUpdate.isEmpty()) { |
| 16 | ++ // avoid allocating changedFullStatus |
| 17 | ++ return ret; |
| 18 | ++ } |
| 19 | ++ |
| 20 | + final List<NewChunkHolder> changedFullStatus = new ArrayList<>(); |
| 21 | + |
| 22 | + NewChunkHolder holder; |
| 23 | +diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java |
| 24 | +index 57f11ed1c8dfe7a10fddc53bcd2abc8cac29b2f4..c47e77ceb15948cbd4a2a370738843c02542f6c1 100644 |
| 25 | +--- a/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java |
| 26 | ++++ b/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java |
| 27 | +@@ -338,6 +338,17 @@ public final class ChunkTaskScheduler { |
| 28 | + return this.mainThreadExecutor.executeTask(); |
| 29 | + } |
| 30 | + |
| 31 | ++ // run only tasks queued before this function was invoked |
| 32 | ++ public void executeAllRecentlyQueuedMainThreadTasks() { |
| 33 | ++ // note: order of retrieval is important to avoid race conditions |
| 34 | ++ final long executed = this.mainThreadExecutor.getTotalTasksExecuted(); |
| 35 | ++ final long scheduled = this.mainThreadExecutor.getTotalTasksScheduled(); |
| 36 | ++ |
| 37 | ++ final long left = scheduled - executed; |
| 38 | ++ // may execute more tasks than expected due to recursion |
| 39 | ++ for (long i = 0; i < left && this.mainThreadExecutor.executeTask(); ++i); |
| 40 | ++ } |
| 41 | ++ |
| 42 | + public void raisePriority(final int x, final int z, final Priority priority) { |
| 43 | + this.chunkHolderManager.raisePriority(x, z, priority); |
| 44 | + } |
| 45 | +diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java |
| 46 | +index 201e80364daeb02b5aed8327eef5140053b00aa0..20efafc39eb219158c5dc126f527cc009fe15b15 100644 |
| 47 | +--- a/net/minecraft/server/MinecraftServer.java |
| 48 | ++++ b/net/minecraft/server/MinecraftServer.java |
| 49 | +@@ -1126,16 +1126,31 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa |
| 50 | + // execute small amounts of other tasks just in case the number of tasks we are |
| 51 | + // draining is large - chunk system and packet processing may be latency sensitive |
| 52 | + |
| 53 | +- // TODO - Chunk System mid-tick |
| 54 | ++ ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this).moonrise$executeMidTickTasks(); // Paper - rewrite chunk system |
| 55 | + this.packetProcessor.executeSinglePacket(); |
| 56 | + } |
| 57 | + profiler.popPush("moonrise:run_all_packets"); |
| 58 | + while (this.packetProcessor.executeSinglePacket()) { |
| 59 | + // execute possibly latency sensitive chunk system tasks (see above) |
| 60 | +- // TODO - Chunk System mid-tick |
| 61 | ++ ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this).moonrise$executeMidTickTasks(); // Paper - rewrite chunk system |
| 62 | + } |
| 63 | + profiler.popPush("moonrise:run_all_chunk"); |
| 64 | +- // TODO - Chunk System tasks |
| 65 | ++ // Paper start - rewrite chunk system |
| 66 | ++ for (final ServerLevel world : this.getAllLevels()) { |
| 67 | ++ profiler.push(world.toString() + " " + world.dimension().location()); // keep same formatting from regular tick, see tickChildren |
| 68 | ++ |
| 69 | ++ // note: legacy tasks may expect a distance manager update |
| 70 | ++ profiler.push("moonrise:distance_manager_update"); |
| 71 | ++ ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getChunkTaskScheduler().chunkHolderManager.processTicketUpdates(); |
| 72 | ++ profiler.popPush("moonrise:legacy_chunk_tasks"); |
| 73 | ++ world.getChunkSource().mainThreadProcessor.executeAllRecentInternalTasks(); |
| 74 | ++ profiler.popPush("moonrise:chunk_system_tasks"); |
| 75 | ++ ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getChunkTaskScheduler().executeAllRecentlyQueuedMainThreadTasks(); |
| 76 | ++ profiler.pop(); |
| 77 | ++ |
| 78 | ++ profiler.pop(); // world name |
| 79 | ++ } |
| 80 | ++ // Paper end - rewrite chunk system |
| 81 | + profiler.pop(); // moonrise:run_all_chunk |
| 82 | + profiler.pop(); // moonrise:run_all_tasks |
| 83 | + |
0 commit comments