aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0720-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch
blob: 07e018b6ef6b89aa77c81f30ec94aef3b80443ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Sun, 20 Sep 2020 16:10:49 -0700
Subject: [PATCH] Make sure inlined getChunkAt has inlined logic for loaded
 chunks

Tux did some profiling some time ago and showed that the
previous getChunkAt method which had inlined logic for loaded
chunks did get inlined, but the standard CPS.getChunkAt
method was not inlined.

Paper recently reverted this optimisation, so it's been reintroduced
here.

diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 4a3cfc66fdbff749f098a384c16a2c7cfc72e294..b94af31814c251a9b4b575c206de9807df696c62 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -367,6 +367,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
 
     @Override
     public final LevelChunk getChunk(int chunkX, int chunkZ) { // Paper - final to help inline
+        // Paper start - make sure loaded chunks get the inlined variant of this function
+        net.minecraft.server.level.ServerChunkCache cps = ((ServerLevel)this).getChunkSource();
+        if (cps.mainThread == Thread.currentThread()) {
+            LevelChunk ifLoaded = cps.getChunkAtIfLoadedMainThread(chunkX, chunkZ);
+            if (ifLoaded != null) {
+                return ifLoaded;
+            }
+        }
+        // Paper end - make sure loaded chunks get the inlined variant of this function
         return (LevelChunk) this.getChunk(chunkX, chunkZ, ChunkStatus.FULL, true); // Paper - avoid a method jump
     }