From b394ec047236138350857b347cee8a07203c72a6 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 5 Jun 2016 00:10:50 -0400 Subject: [PATCH] Add sub timings to chunk map --- Spigot-Server-Patches/0005-Timings-v2.patch | 126 +++++++++++++++++- .../0031-Lighting-Queue.patch | 12 +- .../0040-Add-player-view-distance-API.patch | 16 +-- ...atch-Async-PlayerChunkMap-operations.patch | 8 +- 4 files changed, 138 insertions(+), 24 deletions(-) diff --git a/Spigot-Server-Patches/0005-Timings-v2.patch b/Spigot-Server-Patches/0005-Timings-v2.patch index ec1aabd351..e9221f27b5 100644 --- a/Spigot-Server-Patches/0005-Timings-v2.patch +++ b/Spigot-Server-Patches/0005-Timings-v2.patch @@ -1,11 +1,11 @@ -From 1e9a4f7eedf6ac49348969aa5e1337b0077065de Mon Sep 17 00:00:00 2001 +From fb2ea5754f6414174122a0d0186e402a0cbee9ca Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 3 Mar 2016 04:00:11 -0600 Subject: [PATCH] Timings v2 diff --git a/pom.xml b/pom.xml -index 90fde44..c31ee8f 100644 +index 00edfb5..79d2171 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,12 @@ @@ -139,10 +139,10 @@ index 0000000..0f8315c +} diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java new file mode 100644 -index 0000000..11dd692 +index 0000000..741da72 --- /dev/null +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java -@@ -0,0 +1,71 @@ +@@ -0,0 +1,85 @@ +package co.aikar.timings; + +import net.minecraft.server.World; @@ -161,6 +161,13 @@ index 0000000..11dd692 + public final Timing chunkTicksBlocks; + public final Timing doVillages; + public final Timing doChunkMap; ++ public final Timing doChunkMapUpdate; ++ public final Timing doChunkMapToUpdate; ++ public final Timing doChunkMapSortMissing; ++ public final Timing doChunkMapSortSendToPlayers; ++ public final Timing doChunkMapPlayersNeedingChunks; ++ public final Timing doChunkMapPendingSendToPlayers; ++ public final Timing doChunkMapUnloadChunks; + public final Timing doChunkGC; + public final Timing doSounds; + public final Timing entityRemoval; @@ -192,6 +199,13 @@ index 0000000..11dd692 + chunkTicksBlocks = Timings.ofSafe(name + "Chunk Ticks - Blocks"); + doVillages = Timings.ofSafe(name + "doVillages"); + doChunkMap = Timings.ofSafe(name + "doChunkMap"); ++ doChunkMapUpdate = Timings.ofSafe(name + "doChunkMap - Update"); ++ doChunkMapToUpdate = Timings.ofSafe(name + "doChunkMap - To Update"); ++ doChunkMapSortMissing = Timings.ofSafe(name + "doChunkMap - Sort Missing"); ++ doChunkMapSortSendToPlayers = Timings.ofSafe(name + "doChunkMap - Sort Send To Players"); ++ doChunkMapPlayersNeedingChunks = Timings.ofSafe(name + "doChunkMap - Players Needing Chunks"); ++ doChunkMapPendingSendToPlayers = Timings.ofSafe(name + "doChunkMap - Pending Send To Players"); ++ doChunkMapUnloadChunks = Timings.ofSafe(name + "doChunkMap - Unload Chunks"); + doSounds = Timings.ofSafe(name + "doSounds"); + doChunkGC = Timings.ofSafe(name + "doChunkGC"); + doPortalForcer = Timings.ofSafe(name + "doPortalForcer"); @@ -595,6 +609,106 @@ index e17d5d3..8845ad2 100644 this.methodProfiler.b(); } +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index b0249ff..797a84f 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -1,5 +1,6 @@ + package net.minecraft.server; + ++import co.aikar.timings.Timing; + import com.google.common.base.Predicate; + import com.google.common.collect.AbstractIterator; + import com.google.common.collect.ComparisonChain; +@@ -106,6 +107,7 @@ public class PlayerChunkMap { + PlayerChunk playerchunk; + + if (i - this.k > 8000L) { ++ try (Timing ignored = world.timings.doChunkMapUpdate.startTiming()) { // Paper + this.k = i; + + for (j = 0; j < this.i.size(); ++j) { +@@ -113,9 +115,11 @@ public class PlayerChunkMap { + playerchunk.d(); + playerchunk.c(); + } ++ } // Paper timing + } + + if (!this.f.isEmpty()) { ++ try (Timing ignored = world.timings.doChunkMapToUpdate.startTiming()) { // Paper + Iterator iterator = this.f.iterator(); + + while (iterator.hasNext()) { +@@ -124,10 +128,12 @@ public class PlayerChunkMap { + } + + this.f.clear(); ++ } // Paper timing + } + + if (this.l && i % 4L == 0L) { + this.l = false; ++ try (Timing ignored = world.timings.doChunkMapSortMissing.startTiming()) { // Paper + Collections.sort(this.h, new Comparator() { + public int a(PlayerChunk playerchunk, PlayerChunk playerchunk1) { + return ComparisonChain.start().compare(playerchunk.g(), playerchunk1.g()).result(); +@@ -137,10 +143,12 @@ public class PlayerChunkMap { + return this.a((PlayerChunk) object, (PlayerChunk) object1); + } + }); ++ } // Paper timing + } + + if (this.m && i % 4L == 2L) { + this.m = false; ++ try (Timing ignored = world.timings.doChunkMapSortSendToPlayers.startTiming()) { // Paper + Collections.sort(this.g, new Comparator() { + public int a(PlayerChunk playerchunk, PlayerChunk playerchunk1) { + return ComparisonChain.start().compare(playerchunk.g(), playerchunk1.g()).result(); +@@ -150,9 +158,11 @@ public class PlayerChunkMap { + return this.a((PlayerChunk) object, (PlayerChunk) object1); + } + }); ++ } // Paper timing + } + + if (!this.h.isEmpty()) { ++ try (Timing ignored = world.timings.doChunkMapPlayersNeedingChunks.startTiming()) { // Paper + long k = System.nanoTime() + 50000000L; + int l = 49; + Iterator iterator1 = this.h.iterator(); +@@ -176,10 +186,12 @@ public class PlayerChunkMap { + } + } + } ++ } // Paper timing + } + + if (!this.g.isEmpty()) { + j = 81; ++ try (Timing ignored = world.timings.doChunkMapPendingSendToPlayers.startTiming()) { // Paper + Iterator iterator2 = this.g.iterator(); + + while (iterator2.hasNext()) { +@@ -193,14 +205,17 @@ public class PlayerChunkMap { + } + } + } ++ } // Paper timing + } + + if (this.managedPlayers.isEmpty()) { ++ try (Timing ignored = world.timings.doChunkMapUnloadChunks.startTiming()) { // Paper + WorldProvider worldprovider = this.world.worldProvider; + + if (!worldprovider.e()) { + this.world.getChunkProviderServer().b(); + } ++ } // Paper timing + } + + } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 0a14dd2..7c52e15 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java @@ -664,7 +778,7 @@ index 0cb2e63..6d4f4e7 100644 private static Map> f = Maps.newHashMap(); private static Map, String> g = Maps.newHashMap(); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 4dd6777..0c3ed2d 100644 +index 78045c5..7d1272b 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -18,11 +18,11 @@ import com.google.common.collect.Maps; @@ -1298,5 +1412,5 @@ index a752376..8870607 100644 } } -- -2.8.2 +2.8.3 diff --git a/Spigot-Server-Patches/0031-Lighting-Queue.patch b/Spigot-Server-Patches/0031-Lighting-Queue.patch index c39c50822f..690f10e2f3 100644 --- a/Spigot-Server-Patches/0031-Lighting-Queue.patch +++ b/Spigot-Server-Patches/0031-Lighting-Queue.patch @@ -1,4 +1,4 @@ -From 3d850d42da698e6b342438418e47b4e1b663c722 Mon Sep 17 00:00:00 2001 +From bd8d55cdb864658c3e893c2272185b2597a2645c Mon Sep 17 00:00:00 2001 From: Byteflux Date: Wed, 2 Mar 2016 00:52:31 -0600 Subject: [PATCH] Lighting Queue @@ -6,10 +6,10 @@ Subject: [PATCH] Lighting Queue This provides option to queue lighting updates to ensure they do not cause the server lag diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java -index 11dd692..da3787d 100644 +index 741da72..8b3aa17 100644 --- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java -@@ -35,6 +35,8 @@ public class WorldTimingsHandler { +@@ -42,6 +42,8 @@ public class WorldTimingsHandler { public final Timing syncChunkLoadTileTicksTimer; public final Timing syncChunkLoadPostTimer; @@ -18,7 +18,7 @@ index 11dd692..da3787d 100644 public WorldTimingsHandler(World server) { String name = server.worldData.getName() +" - "; -@@ -67,5 +69,7 @@ public class WorldTimingsHandler { +@@ -81,5 +83,7 @@ public class WorldTimingsHandler { tracker2 = Timings.ofSafe(name + "tracker stage 2"); doTick = Timings.ofSafe(name + "doTick"); tickEntities = Timings.ofSafe(name + "tickEntities"); @@ -222,7 +222,7 @@ index 0000000..2350fe3 + } +} diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 362df8f..dc51a79 100644 +index 8735dd4..ccef663 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -384,7 +384,7 @@ public abstract class World implements IBlockAccess { @@ -235,5 +235,5 @@ index 362df8f..dc51a79 100644 } -- -2.8.2.windows.1 +2.8.3 diff --git a/Spigot-Server-Patches/0040-Add-player-view-distance-API.patch b/Spigot-Server-Patches/0040-Add-player-view-distance-API.patch index edfcedd5fb..25078d28c9 100644 --- a/Spigot-Server-Patches/0040-Add-player-view-distance-API.patch +++ b/Spigot-Server-Patches/0040-Add-player-view-distance-API.patch @@ -1,4 +1,4 @@ -From 6f5ba9138ecbe420a790519709c60850d4e89caa Mon Sep 17 00:00:00 2001 +From 1c8fae3651381aeb25d7f4af371147a76b6da5f0 Mon Sep 17 00:00:00 2001 From: Byteflux Date: Wed, 2 Mar 2016 14:35:27 -0600 Subject: [PATCH] Add player view distance API @@ -25,10 +25,10 @@ index 7ef3f62..6e19244 100644 // CraftBukkit start public String displayName; diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index b0249ff..77e9187 100644 +index 797a84f..d554d7d 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -46,7 +46,7 @@ public class PlayerChunkMap { +@@ -47,7 +47,7 @@ public class PlayerChunkMap { private final List g = Lists.newLinkedList(); private final List h = Lists.newLinkedList(); private final List i = Lists.newArrayList(); @@ -37,7 +37,7 @@ index b0249ff..77e9187 100644 private long k; private boolean l = true; private boolean m = true; -@@ -288,8 +288,11 @@ public class PlayerChunkMap { +@@ -303,8 +303,11 @@ public class PlayerChunkMap { int i = (int) entityplayer.d >> 4; int j = (int) entityplayer.e >> 4; @@ -51,7 +51,7 @@ index b0249ff..77e9187 100644 PlayerChunk playerchunk = this.getChunk(k, l); if (playerchunk != null) { -@@ -319,7 +322,9 @@ public class PlayerChunkMap { +@@ -334,7 +337,9 @@ public class PlayerChunkMap { if (d2 >= 64.0D) { int k = (int) entityplayer.d >> 4; int l = (int) entityplayer.e >> 4; @@ -62,7 +62,7 @@ index b0249ff..77e9187 100644 int j1 = i - k; int k1 = j - l; -@@ -328,7 +333,7 @@ public class PlayerChunkMap { +@@ -343,7 +348,7 @@ public class PlayerChunkMap { if (j1 != 0 || k1 != 0) { for (int l1 = i - i1; l1 <= i + i1; ++l1) { for (int i2 = j - i1; i2 <= j + i1; ++i2) { @@ -71,7 +71,7 @@ index b0249ff..77e9187 100644 // this.c(l1, i2).a(entityplayer); chunksToLoad.add(new ChunkCoordIntPair(l1, i2)); // CraftBukkit } -@@ -480,4 +485,20 @@ public class PlayerChunkMap { +@@ -495,4 +500,20 @@ public class PlayerChunkMap { } } // CraftBukkit end @@ -114,5 +114,5 @@ index 5515958..9770c99 100644 private final Player.Spigot spigot = new Player.Spigot() { -- -2.8.2.windows.1 +2.8.3 diff --git a/Spigot-Server-Patches/0092-Catch-Async-PlayerChunkMap-operations.patch b/Spigot-Server-Patches/0092-Catch-Async-PlayerChunkMap-operations.patch index 3c98b6b5c4..a983b72c46 100644 --- a/Spigot-Server-Patches/0092-Catch-Async-PlayerChunkMap-operations.patch +++ b/Spigot-Server-Patches/0092-Catch-Async-PlayerChunkMap-operations.patch @@ -1,14 +1,14 @@ -From 72728a688b1a601363b2d8d47a5c6d9ea29edaf5 Mon Sep 17 00:00:00 2001 +From e81998f1d7e8b746800b99873ded73f31db9f51c Mon Sep 17 00:00:00 2001 From: Daniel Ennis Date: Sun, 20 Mar 2016 15:22:42 -0400 Subject: [PATCH] Catch Async PlayerChunkMap operations diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 77e9187..6c95e50 100644 +index d554d7d..20a8a80 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -422,10 +422,12 @@ public class PlayerChunkMap { +@@ -437,10 +437,12 @@ public class PlayerChunkMap { } public void a(PlayerChunk playerchunk) { @@ -22,5 +22,5 @@ index 77e9187..6c95e50 100644 long i = d(chunkcoordintpair.x, chunkcoordintpair.z); -- -2.8.2 +2.8.3