diff --git a/Spigot-Server-Patches/0079-Optimize-Chunk-Access.patch b/Spigot-Server-Patches/0079-Optimize-Chunk-Access.patch index 7519542b0..28555c241 100644 --- a/Spigot-Server-Patches/0079-Optimize-Chunk-Access.patch +++ b/Spigot-Server-Patches/0079-Optimize-Chunk-Access.patch @@ -1,4 +1,4 @@ -From 4849096581eda2911fc4f3dd36f58e4678e5dc29 Mon Sep 17 00:00:00 2001 +From e732d1184f1686864d9d9bd11bb409fa18c64709 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 27 Aug 2015 01:15:02 -0400 Subject: [PATCH] Optimize Chunk Access @@ -9,10 +9,18 @@ getChunkAt is called for the same chunk multiple times in a row, often from getT Optimize this look up by using a Last Access cache. diff --git a/src/main/java/net/minecraft/server/ChunkMap.java b/src/main/java/net/minecraft/server/ChunkMap.java -index 4e51bd301a..7100ec7747 100644 +index fbebd4591c..b941676829 100644 --- a/src/main/java/net/minecraft/server/ChunkMap.java +++ b/src/main/java/net/minecraft/server/ChunkMap.java -@@ -98,8 +98,22 @@ public class ChunkMap extends Long2ObjectOpenHashMap { +@@ -15,6 +15,7 @@ public class ChunkMap extends Long2ObjectOpenHashMap { + + public Chunk a(long i, Chunk chunk) { + chunk.world.timings.syncChunkLoadPostTimer.startTiming(); // Paper ++ lastChunkByPos = chunk; // Paper + Chunk chunk1 = (Chunk) super.put(i, chunk); + ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i); + +@@ -98,8 +99,22 @@ public class ChunkMap extends Long2ObjectOpenHashMap { } } @@ -22,19 +30,61 @@ index 4e51bd301a..7100ec7747 100644 + } return chunk; } -+ private Chunk lastChunkByPos = null; // Paper ++ private Chunk lastChunkByPos = null; + + @Override + public Chunk get(long l) { + if (lastChunkByPos != null && l == lastChunkByPos.chunkKey) { + return lastChunkByPos; + } -+ return super.get(l); ++ return lastChunkByPos = super.get(l); + } + // Paper end public Chunk a(Object object) { return this.a(((Long) object).longValue()); +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index 6b041f06e4..1a1daf36b7 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -78,15 +78,16 @@ public class ChunkProviderServer implements IChunkProvider { + Chunk chunk; + + synchronized (this.chunkLoader) { +- if (this.lastChunk != null && this.lastChunk.getPos().x == i && this.lastChunk.getPos().z == j) { ++ // Paper start - remove vanilla lastChunk, we do it more accurately ++ /* if (this.lastChunk != null && this.lastChunk.locX == i && this.lastChunk.locZ == j) { + return this.lastChunk; +- } ++ }*/ // Paper end + + long k = ChunkCoordIntPair.a(i, j); + + chunk = (Chunk) this.chunks.get(k); + if (chunk != null) { +- this.lastChunk = chunk; ++ //this.lastChunk = chunk; // Paper remove vanilla lastChunk + return chunk; + } + +@@ -198,7 +199,7 @@ public class ChunkProviderServer implements IChunkProvider { + } + + this.chunks.put(k, chunk); +- this.lastChunk = chunk; ++ //this.lastChunk = chunk; // Paper + } + + this.asyncTaskHandler.postToMainThread(chunk::addEntities); +@@ -342,7 +343,7 @@ public class ChunkProviderServer implements IChunkProvider { + this.saveChunk(chunk, true); // Spigot + } + this.chunks.remove(chunk.chunkKey); +- this.lastChunk = null; ++ //this.lastChunk = null; // Paper + return true; + } + // CraftBukkit end -- 2.18.0 diff --git a/Spigot-Server-Patches/0124-Delay-Chunk-Unloads-based-on-Player-Movement.patch b/Spigot-Server-Patches/0124-Delay-Chunk-Unloads-based-on-Player-Movement.patch index 52a483571..75b319ed3 100644 --- a/Spigot-Server-Patches/0124-Delay-Chunk-Unloads-based-on-Player-Movement.patch +++ b/Spigot-Server-Patches/0124-Delay-Chunk-Unloads-based-on-Player-Movement.patch @@ -1,4 +1,4 @@ -From 23074703de62e4ed8821b5a5d70478b97c160dd1 Mon Sep 17 00:00:00 2001 +From 633810714b9d75cdaabfc1a4d2e687046ecb2bc5 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 18 Jun 2016 23:22:12 -0400 Subject: [PATCH] Delay Chunk Unloads based on Player Movement @@ -52,10 +52,10 @@ index 0ef1a8c7d3..2efb870dd6 100644 public final int locZ; private boolean l; diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 6b041f06e4..53dc1322e8 100644 +index 1a1daf36b7..7417660e4d 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -305,6 +305,19 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -306,6 +306,19 @@ public class ChunkProviderServer implements IChunkProvider { } activityAccountant.endActivity(); // Spigot } diff --git a/Spigot-Server-Patches/0136-Auto-Save-Improvements.patch b/Spigot-Server-Patches/0136-Auto-Save-Improvements.patch index 9b637dc5d..5770338ac 100644 --- a/Spigot-Server-Patches/0136-Auto-Save-Improvements.patch +++ b/Spigot-Server-Patches/0136-Auto-Save-Improvements.patch @@ -1,4 +1,4 @@ -From 8120e628e716fa08733831f191244993f971e5b1 Mon Sep 17 00:00:00 2001 +From e036b4c10f2ddfe4dd643eff683210b672f63c9d Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 19 Sep 2016 23:16:39 -0400 Subject: [PATCH] Auto Save Improvements @@ -96,10 +96,10 @@ index 2efb870dd6..6c766f2bf7 100644 public boolean isEmpty() { diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 53dc1322e8..90840e4709 100644 +index 7417660e4d..7a972f4187 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -240,7 +240,7 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -241,7 +241,7 @@ public class ChunkProviderServer implements IChunkProvider { this.saveChunk(chunk, false); // Spigot chunk.a(false); ++i; diff --git a/Spigot-Server-Patches/0144-Prevent-Auto-Save-if-Save-Queue-is-full.patch b/Spigot-Server-Patches/0144-Prevent-Auto-Save-if-Save-Queue-is-full.patch index f23302648..8496e0550 100644 --- a/Spigot-Server-Patches/0144-Prevent-Auto-Save-if-Save-Queue-is-full.patch +++ b/Spigot-Server-Patches/0144-Prevent-Auto-Save-if-Save-Queue-is-full.patch @@ -1,4 +1,4 @@ -From bc41dd42020d4ee02972e95b3c721c52c6a0cf69 Mon Sep 17 00:00:00 2001 +From 5022fe8950e4040dd0ee1bb63706eeec718ccee1 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 3 Nov 2016 21:52:22 -0400 Subject: [PATCH] Prevent Auto Save if Save Queue is full @@ -23,10 +23,10 @@ index 79260172d9..381edf3e7d 100644 private void removeCorruptTEs() { removeCorruptTEs = getBoolean("remove-corrupt-tile-entities", false); diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 90840e4709..87960344f1 100644 +index 7a972f4187..87744dcbfc 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -233,6 +233,13 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -234,6 +234,13 @@ public class ChunkProviderServer implements IChunkProvider { synchronized (this.chunkLoader) { ObjectIterator objectiterator = this.chunks.values().iterator(); @@ -41,7 +41,7 @@ index 90840e4709..87960344f1 100644 Chunk chunk = (Chunk) objectiterator.next(); diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -index c85a8dac3e..0fc50ce60c 100644 +index fde80d1fd3..3283b5047d 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -141,6 +141,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { diff --git a/Spigot-Server-Patches/0145-Chunk-Save-Stats-Debug-Option.patch b/Spigot-Server-Patches/0145-Chunk-Save-Stats-Debug-Option.patch index 802c5ebd4..7995ad8fc 100644 --- a/Spigot-Server-Patches/0145-Chunk-Save-Stats-Debug-Option.patch +++ b/Spigot-Server-Patches/0145-Chunk-Save-Stats-Debug-Option.patch @@ -1,4 +1,4 @@ -From fc1808562cf1dd7ff5834b4e5692394bb9dd1524 Mon Sep 17 00:00:00 2001 +From 2ec23d4415fa7cdff14d42f5f46c1b11eea99c63 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 4 Nov 2016 02:12:10 -0400 Subject: [PATCH] Chunk Save Stats Debug Option @@ -8,7 +8,7 @@ Adds a command line flag to enable stats on how chunk saves are processing. Stats on current queue, how many was processed and how many were queued. diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 87960344f1..6b8d4c79e8 100644 +index 87744dcbfc..355186c111 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -30,6 +30,11 @@ public class ChunkProviderServer implements IChunkProvider { @@ -23,7 +23,7 @@ index 87960344f1..6b8d4c79e8 100644 public final Long2ObjectMap chunks = Long2ObjectMaps.synchronize(new ChunkMap(8192)); private Chunk lastChunk; private final ChunkTaskScheduler chunkScheduler; -@@ -236,6 +241,29 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -237,6 +242,29 @@ public class ChunkProviderServer implements IChunkProvider { // Paper start final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProviderServer().chunkLoader; final int queueSize = chunkLoader.getQueueSize(); diff --git a/Spigot-Server-Patches/0175-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch b/Spigot-Server-Patches/0175-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch index 4621c052c..9cb13681e 100644 --- a/Spigot-Server-Patches/0175-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch +++ b/Spigot-Server-Patches/0175-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch @@ -1,14 +1,14 @@ -From 4e1234fad311a8d7fc90e7c4a1c2359eaf15de60 Mon Sep 17 00:00:00 2001 +From bf0639fd7585002f204228976110c3a83d92c79c Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Tue, 7 Feb 2017 16:55:35 -0600 Subject: [PATCH] Make targetSize more aggressive in the chunk unload queue diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 6b8d4c79e8..5e8a20fdd6 100644 +index 355186c111..0ca071b879 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -310,7 +310,7 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -311,7 +311,7 @@ public class ChunkProviderServer implements IChunkProvider { // Spigot start org.spigotmc.SlackActivityAccountant activityAccountant = this.world.getMinecraftServer().slackActivityAccountant; activityAccountant.startActivity(0.5);