From fbcd3ce763f1dbf1fd8c21865cd53a84ce2609eb 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/Timings-v2.patch | 114 +++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/Spigot-Server-Patches/Timings-v2.patch b/Spigot-Server-Patches/Timings-v2.patch index bea901e9c..2823e2f95 100644 --- a/Spigot-Server-Patches/Timings-v2.patch +++ b/Spigot-Server-Patches/Timings-v2.patch @@ -161,6 +161,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + 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 0000000000000000000000000000000000000000..00000000000000000000000000000000 + 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 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.methodProfiler.b(); } +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -0,0 +0,0 @@ + 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; +@@ -0,0 +0,0 @@ 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) { +@@ -0,0 +0,0 @@ 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()) { +@@ -0,0 +0,0 @@ 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(); +@@ -0,0 +0,0 @@ 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(); +@@ -0,0 +0,0 @@ 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(); +@@ -0,0 +0,0 @@ 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()) { +@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java