mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-19 09:05:43 +01:00
3496f2d7e4
Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: b850a822 SPIGOT-4526: Add conversion time API for Zombie & subclasses CraftBukkit Changes:38cf676e
SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GENb446cb5d
SPIGOT-4527: Fix sponges with waterlogged blocks6ec8ea5c
SPIGOT-4526: Add conversion time API for Zombie & subclassesc64fe508
Mappings Updatea3c2ec03
Fix missing ServerListPingEvent call for legacy pings Spigot Changes: 1dc156ce Rebuild patches 140f654d Mappings Update
1823 lines
83 KiB
Diff
1823 lines
83 KiB
Diff
From 87fd657aa5de36c8b09b9d2463708b818665f008 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 3 Mar 2016 04:00:11 -0600
|
|
Subject: [PATCH] Timings v2
|
|
|
|
|
|
diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java
|
|
new file mode 100644
|
|
index 000000000..66d02e048
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/MinecraftTimings.java
|
|
@@ -0,0 +1,132 @@
|
|
+package co.aikar.timings;
|
|
+
|
|
+import com.google.common.collect.MapMaker;
|
|
+import net.minecraft.server.*;
|
|
+import org.bukkit.plugin.Plugin;
|
|
+import org.bukkit.scheduler.BukkitTask;
|
|
+
|
|
+import org.bukkit.craftbukkit.scheduler.CraftTask;
|
|
+
|
|
+import java.util.Map;
|
|
+
|
|
+public final class MinecraftTimings {
|
|
+
|
|
+ public static final Timing playerListTimer = Timings.ofSafe("Player List");
|
|
+ public static final Timing commandFunctionsTimer = Timings.ofSafe("Command Functions");
|
|
+ public static final Timing connectionTimer = Timings.ofSafe("Connection Handler");
|
|
+ public static final Timing tickablesTimer = Timings.ofSafe("Tickables");
|
|
+ public static final Timing minecraftSchedulerTimer = Timings.ofSafe("Minecraft Scheduler");
|
|
+ public static final Timing bukkitSchedulerTimer = Timings.ofSafe("Bukkit Scheduler");
|
|
+ public static final Timing bukkitSchedulerPendingTimer = Timings.ofSafe("Bukkit Scheduler - Pending");
|
|
+ public static final Timing bukkitSchedulerFinishTimer = Timings.ofSafe("Bukkit Scheduler - Finishing");
|
|
+ public static final Timing chunkIOTickTimer = Timings.ofSafe("ChunkIOTick");
|
|
+ public static final Timing timeUpdateTimer = Timings.ofSafe("Time Update");
|
|
+ public static final Timing serverCommandTimer = Timings.ofSafe("Server Command");
|
|
+ public static final Timing savePlayers = Timings.ofSafe("Save Players");
|
|
+
|
|
+ public static final Timing tickEntityTimer = Timings.ofSafe("## tickEntity");
|
|
+ public static final Timing tickTileEntityTimer = Timings.ofSafe("## tickTileEntity");
|
|
+ public static final Timing packetProcessTimer = Timings.ofSafe("## Packet Processing");
|
|
+ public static final Timing scheduledBlocksTimer = Timings.ofSafe("## Scheduled Blocks");
|
|
+ public static final Timing structureGenerationTimer = Timings.ofSafe("Structure Generation");
|
|
+
|
|
+ public static final Timing processQueueTimer = Timings.ofSafe("processQueue");
|
|
+
|
|
+ public static final Timing playerCommandTimer = Timings.ofSafe("playerCommand");
|
|
+
|
|
+ public static final Timing entityActivationCheckTimer = Timings.ofSafe("entityActivationCheck");
|
|
+
|
|
+ public static final Timing antiXrayUpdateTimer = Timings.ofSafe("anti-xray - update");
|
|
+ public static final Timing antiXrayObfuscateTimer = Timings.ofSafe("anti-xray - obfuscate");
|
|
+
|
|
+ private static final Map<Class<?>, String> taskNameCache = new MapMaker().weakKeys().makeMap();
|
|
+
|
|
+ private MinecraftTimings() {}
|
|
+
|
|
+ /**
|
|
+ * Gets a timer associated with a plugins tasks.
|
|
+ * @param bukkitTask
|
|
+ * @param period
|
|
+ * @return
|
|
+ */
|
|
+ public static Timing getPluginTaskTimings(BukkitTask bukkitTask, long period) {
|
|
+ if (!bukkitTask.isSync()) {
|
|
+ return null;
|
|
+ }
|
|
+ Plugin plugin;
|
|
+
|
|
+ CraftTask craftTask = (CraftTask) bukkitTask;
|
|
+
|
|
+ final Class<?> taskClass = craftTask.getTaskClass();
|
|
+ if (bukkitTask.getOwner() != null) {
|
|
+ plugin = bukkitTask.getOwner();
|
|
+ } else {
|
|
+ plugin = TimingsManager.getPluginByClassloader(taskClass);
|
|
+ }
|
|
+
|
|
+ final String taskname = taskNameCache.computeIfAbsent(taskClass, clazz ->
|
|
+ clazz.isAnonymousClass() || clazz.isLocalClass()
|
|
+ ? clazz.getName()
|
|
+ : clazz.getCanonicalName());
|
|
+
|
|
+ StringBuilder name = new StringBuilder(64);
|
|
+ name.append("Task: ").append(taskname);
|
|
+ if (period > 0) {
|
|
+ name.append(" (interval:").append(period).append(")");
|
|
+ } else {
|
|
+ name.append(" (Single)");
|
|
+ }
|
|
+
|
|
+ if (plugin == null) {
|
|
+ return Timings.ofSafe(null, name.toString());
|
|
+ }
|
|
+
|
|
+ return Timings.ofSafe(plugin, name.toString());
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get a named timer for the specified entity type to track type specific timings.
|
|
+ * @param entity
|
|
+ * @return
|
|
+ */
|
|
+ public static Timing getEntityTimings(Entity entity) {
|
|
+ String entityType = entity.getClass().getName();
|
|
+ return Timings.ofSafe("Minecraft", "## tickEntity - " + entityType, tickEntityTimer);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Get a named timer for the specified tile entity type to track type specific timings.
|
|
+ * @param entity
|
|
+ * @return
|
|
+ */
|
|
+ public static Timing getTileEntityTimings(TileEntity entity) {
|
|
+ String entityType = entity.getClass().getName();
|
|
+ return Timings.ofSafe("Minecraft", "## tickTileEntity - " + entityType, tickTileEntityTimer);
|
|
+ }
|
|
+ public static Timing getCancelTasksTimer() {
|
|
+ return Timings.ofSafe("Cancel Tasks");
|
|
+ }
|
|
+ public static Timing getCancelTasksTimer(Plugin plugin) {
|
|
+ return Timings.ofSafe(plugin, "Cancel Tasks");
|
|
+ }
|
|
+
|
|
+ public static void stopServer() {
|
|
+ TimingsManager.stopServer();
|
|
+ }
|
|
+
|
|
+ public static Timing getBlockTiming(Block block) {
|
|
+ return Timings.ofSafe("## Scheduled Block: " + block.toString(), scheduledBlocksTimer);
|
|
+ }
|
|
+/*
|
|
+ public static Timing getStructureTiming(StructureGenerator structureGenerator) {
|
|
+ return Timings.ofSafe("Structure Generator - " + structureGenerator.getName(), structureGenerationTimer);
|
|
+ }*/
|
|
+
|
|
+ public static Timing getPacketTiming(Packet packet) {
|
|
+ return Timings.ofSafe("## Packet - " + packet.getClass().getSimpleName(), packetProcessTimer);
|
|
+ }
|
|
+
|
|
+ public static Timing getCommandFunctionTiming(CustomFunction function) {
|
|
+ return Timings.ofSafe("Command Function - " + function.getMinecraftKey().toString());
|
|
+ }
|
|
+}
|
|
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 000000000..145cb274b
|
|
--- /dev/null
|
|
+++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java
|
|
@@ -0,0 +1,104 @@
|
|
+package co.aikar.timings;
|
|
+
|
|
+import net.minecraft.server.World;
|
|
+import net.minecraft.server.WorldServer;
|
|
+
|
|
+/**
|
|
+ * Set of timers per world, to track world specific timings.
|
|
+ */
|
|
+public class WorldTimingsHandler {
|
|
+ public final Timing mobSpawn;
|
|
+ public final Timing doChunkUnload;
|
|
+ public final Timing doPortalForcer;
|
|
+ public final Timing scheduledBlocks;
|
|
+ public final Timing scheduledBlocksCleanup;
|
|
+ public final Timing scheduledBlocksTicking;
|
|
+ public final Timing chunkTicks;
|
|
+ public final Timing lightChunk;
|
|
+ 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;
|
|
+ public final Timing entityTick;
|
|
+ public final Timing tileEntityTick;
|
|
+ public final Timing tileEntityPending;
|
|
+ public final Timing tracker1;
|
|
+ public final Timing tracker2;
|
|
+ public final Timing doTick;
|
|
+ public final Timing tickEntities;
|
|
+
|
|
+ public final Timing syncChunkLoadTimer;
|
|
+ public final Timing syncChunkLoadDataTimer;
|
|
+ public final Timing syncChunkLoadStructuresTimer;
|
|
+ public final Timing syncChunkLoadPostTimer;
|
|
+ public final Timing syncChunkLoadPopulateTimer;
|
|
+ public final Timing chunkLoadLevelTimer;
|
|
+ public final Timing chunkGeneration;
|
|
+ public final Timing chunkIOStage1;
|
|
+ public final Timing chunkIOStage2;
|
|
+ public final Timing worldSave;
|
|
+ public final Timing worldSaveChunks;
|
|
+ public final Timing worldSaveLevel;
|
|
+ public final Timing chunkSaveData;
|
|
+
|
|
+ public WorldTimingsHandler(World server) {
|
|
+ String name = server.worldData.getName() +" - ";
|
|
+
|
|
+ mobSpawn = Timings.ofSafe(name + "mobSpawn");
|
|
+ doChunkUnload = Timings.ofSafe(name + "doChunkUnload");
|
|
+ scheduledBlocks = Timings.ofSafe(name + "Scheduled Blocks");
|
|
+ scheduledBlocksCleanup = Timings.ofSafe(name + "Scheduled Blocks - Cleanup");
|
|
+ scheduledBlocksTicking = Timings.ofSafe(name + "Scheduled Blocks - Ticking");
|
|
+ chunkTicks = Timings.ofSafe(name + "Chunk Ticks");
|
|
+ lightChunk = Timings.ofSafe(name + "Light Chunk");
|
|
+ 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");
|
|
+ entityTick = Timings.ofSafe(name + "entityTick");
|
|
+ entityRemoval = Timings.ofSafe(name + "entityRemoval");
|
|
+ tileEntityTick = Timings.ofSafe(name + "tileEntityTick");
|
|
+ tileEntityPending = Timings.ofSafe(name + "tileEntityPending");
|
|
+
|
|
+ syncChunkLoadTimer = Timings.ofSafe(name + "syncChunkLoad");
|
|
+ syncChunkLoadDataTimer = Timings.ofSafe(name + "syncChunkLoad - Data");
|
|
+ syncChunkLoadStructuresTimer = Timings.ofSafe(name + "chunkLoad - recreateStructures");
|
|
+ syncChunkLoadPostTimer = Timings.ofSafe(name + "chunkLoad - Post");
|
|
+ syncChunkLoadPopulateTimer = Timings.ofSafe(name + "chunkLoad - Populate");
|
|
+ chunkLoadLevelTimer = Timings.ofSafe(name + "chunkLoad - Load Level");
|
|
+ chunkGeneration = Timings.ofSafe(name + "chunkGeneration");
|
|
+ chunkIOStage1 = Timings.ofSafe(name + "ChunkIO Stage 1 - DiskIO");
|
|
+ chunkIOStage2 = Timings.ofSafe(name + "ChunkIO Stage 2 - Post Load");
|
|
+ worldSave = Timings.ofSafe(name + "World Save");
|
|
+ worldSaveLevel = Timings.ofSafe(name + "World Save - Level");
|
|
+ worldSaveChunks = Timings.ofSafe(name + "World Save - Chunks");
|
|
+ chunkSaveData = Timings.ofSafe(name + "Chunk Save - Data");
|
|
+
|
|
+ tracker1 = Timings.ofSafe(name + "tracker stage 1");
|
|
+ tracker2 = Timings.ofSafe(name + "tracker stage 2");
|
|
+ doTick = Timings.ofSafe(name + "doTick");
|
|
+ tickEntities = Timings.ofSafe(name + "tickEntities");
|
|
+ }
|
|
+
|
|
+ public static Timing getTickList(WorldServer worldserver, String timingsType) {
|
|
+ return Timings.ofSafe(worldserver.getWorldData().getName() + " - Scheduled " + timingsType);
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
index 255b8bed0..fe148495b 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
@@ -14,11 +14,14 @@ import java.util.concurrent.TimeUnit;
|
|
import java.util.logging.Level;
|
|
import java.util.regex.Pattern;
|
|
|
|
+import com.google.common.collect.Lists;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.configuration.InvalidConfigurationException;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
+import co.aikar.timings.Timings;
|
|
+import co.aikar.timings.TimingsManager;
|
|
|
|
public class PaperConfig {
|
|
|
|
@@ -187,4 +190,24 @@ public class PaperConfig {
|
|
config.addDefault(path, def);
|
|
return config.getString(path, config.getString(path));
|
|
}
|
|
+
|
|
+ private static void timings() {
|
|
+ boolean timings = getBoolean("timings.enabled", true);
|
|
+ boolean verboseTimings = getBoolean("timings.verbose", true);
|
|
+ TimingsManager.privacy = getBoolean("timings.server-name-privacy", false);
|
|
+ TimingsManager.hiddenConfigs = getList("timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses"));
|
|
+ int timingHistoryInterval = getInt("timings.history-interval", 300);
|
|
+ int timingHistoryLength = getInt("timings.history-length", 3600);
|
|
+
|
|
+
|
|
+ Timings.setVerboseTimingsEnabled(verboseTimings);
|
|
+ Timings.setTimingsEnabled(timings);
|
|
+ Timings.setHistoryInterval(timingHistoryInterval * 20);
|
|
+ Timings.setHistoryLength(timingHistoryLength * 20);
|
|
+
|
|
+ log("Timings: " + timings +
|
|
+ " - Verbose: " + verboseTimings +
|
|
+ " - Interval: " + timeSummary(Timings.getHistoryInterval() / 20) +
|
|
+ " - Length: " + timeSummary(Timings.getHistoryLength() / 20));
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
|
index a30b21ad2..83b1ef0fc 100644
|
|
--- a/src/main/java/net/minecraft/server/Block.java
|
|
+++ b/src/main/java/net/minecraft/server/Block.java
|
|
@@ -23,6 +23,15 @@ public class Block implements IMaterial {
|
|
protected final boolean i;
|
|
protected final SoundEffectType stepSound;
|
|
protected final Material material;
|
|
+ // Paper start
|
|
+ public co.aikar.timings.Timing timing;
|
|
+ public co.aikar.timings.Timing getTiming() {
|
|
+ if (timing == null) {
|
|
+ timing = co.aikar.timings.MinecraftTimings.getBlockTiming(this);
|
|
+ }
|
|
+ return timing;
|
|
+ }
|
|
+ // Paper end
|
|
protected final MaterialMapColor l;
|
|
private final float frictionFactor;
|
|
protected final BlockStateList<Block, IBlockData> blockStateList;
|
|
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 4d04fdda7..9970a58ed 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -855,6 +855,7 @@ public class Chunk implements IChunkAccess {
|
|
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkLoadEvent(this.bukkitChunk, this.needsDecoration));
|
|
|
|
if (this.needsDecoration) {
|
|
+ this.world.timings.syncChunkLoadPopulateTimer.startTiming(); // Paper
|
|
BlockSand.instaFall = true;
|
|
java.util.Random random = new java.util.Random();
|
|
random.setSeed(world.getSeed());
|
|
@@ -875,6 +876,7 @@ public class Chunk implements IChunkAccess {
|
|
}
|
|
BlockSand.instaFall = false;
|
|
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk));
|
|
+ this.world.timings.syncChunkLoadPopulateTimer.stopTiming(); // Paper
|
|
}
|
|
}
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkMap.java b/src/main/java/net/minecraft/server/ChunkMap.java
|
|
index df2711a5f..732c8793e 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkMap.java
|
|
@@ -14,6 +14,7 @@ public class ChunkMap extends Long2ObjectOpenHashMap<Chunk> {
|
|
}
|
|
|
|
public Chunk put(long i, Chunk chunk) {
|
|
+ chunk.world.timings.syncChunkLoadPostTimer.startTiming(); // Paper
|
|
Chunk chunk1 = (Chunk) super.put(i, chunk);
|
|
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i);
|
|
|
|
@@ -46,6 +47,7 @@ public class ChunkMap extends Long2ObjectOpenHashMap<Chunk> {
|
|
}
|
|
}
|
|
}
|
|
+ chunk.world.timings.syncChunkLoadPostTimer.stopTiming(); // Paper
|
|
// CraftBukkit end
|
|
|
|
return chunk1;
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index b859a5b9e..60abc5f28 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -90,7 +90,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
}
|
|
|
|
if (flag) {
|
|
- try {
|
|
+ try (co.aikar.timings.Timing timing = world.timings.syncChunkLoadTimer.startTiming()) { // Paper
|
|
// CraftBukkit - decompile error
|
|
chunk = this.chunkLoader.a(this.world, i, j, (chunk1) -> {
|
|
chunk1.setLastSaved(this.world.getTime());
|
|
@@ -106,8 +106,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
this.asyncTaskHandler.postToMainThread(chunk::addEntities);
|
|
return chunk;
|
|
} else if (flag1) {
|
|
- try {
|
|
- world.timings.syncChunkLoadTimer.startTiming(); // Spigot
|
|
+ try (co.aikar.timings.Timing timing = world.timings.chunkGeneration.startTiming()) { // Paper
|
|
this.batchScheduler.b();
|
|
this.batchScheduler.a(new ChunkCoordIntPair(i, j));
|
|
CompletableFuture<ProtoChunk> completablefuture = this.batchScheduler.c(); // CraftBukkit - decompile error
|
|
@@ -116,7 +115,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
} catch (RuntimeException runtimeexception) {
|
|
throw this.a(i, j, (Throwable) runtimeexception);
|
|
}
|
|
- finally { world.timings.syncChunkLoadTimer.stopTiming(); } // Spigot
|
|
+ // finally { world.timings.syncChunkLoadTimer.stopTiming(); } // Spigot // Paper
|
|
} else {
|
|
return null;
|
|
}
|
|
@@ -206,7 +205,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
}
|
|
|
|
public void saveChunk(IChunkAccess ichunkaccess, boolean unloaded) { // Spigot
|
|
- try {
|
|
+ try (co.aikar.timings.Timing timed = world.timings.chunkSaveData.startTiming()) { // Paper - Timings
|
|
ichunkaccess.setLastSaved(this.world.getTime());
|
|
this.chunkLoader.saveChunk(this.world, ichunkaccess, unloaded); // Spigot
|
|
} catch (IOException ioexception) {
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
index 1b8c28096..62a63dfa8 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.Timings;
|
|
import com.google.common.collect.Maps;
|
|
import com.mojang.datafixers.DataFixTypes;
|
|
import com.mojang.datafixers.DataFixer;
|
|
@@ -682,7 +683,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
public void loadEntities(NBTTagCompound nbttagcompound, Chunk chunk) {
|
|
NBTTagList nbttaglist = nbttagcompound.getList("Entities", 10);
|
|
World world = chunk.getWorld();
|
|
- world.timings.syncChunkLoadEntitiesTimer.startTiming(); // Spigot
|
|
+ world.timings.chunkLoadLevelTimer.startTiming(); // Spigot
|
|
|
|
for (int i = 0; i < nbttaglist.size(); ++i) {
|
|
NBTTagCompound nbttagcompound1 = nbttaglist.getCompound(i);
|
|
@@ -691,8 +692,6 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
chunk.f(true);
|
|
}
|
|
|
|
- world.timings.syncChunkLoadEntitiesTimer.stopTiming(); // Spigot
|
|
- world.timings.syncChunkLoadTileEntitiesTimer.startTiming(); // Spigot
|
|
NBTTagList nbttaglist1 = nbttagcompound.getList("TileEntities", 10);
|
|
|
|
for (int j = 0; j < nbttaglist1.size(); ++j) {
|
|
@@ -709,8 +708,6 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
}
|
|
}
|
|
}
|
|
- world.timings.syncChunkLoadTileEntitiesTimer.stopTiming(); // Spigot
|
|
- world.timings.syncChunkLoadTileTicksTimer.startTiming(); // Spigot
|
|
|
|
if (nbttagcompound.hasKeyOfType("TileTicks", 9) && world.getBlockTickList() instanceof TickListServer) {
|
|
((TickListServer) world.getBlockTickList()).a(nbttagcompound.getList("TileTicks", 10));
|
|
@@ -719,7 +716,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
if (nbttagcompound.hasKeyOfType("LiquidTicks", 9) && world.getFluidTickList() instanceof TickListServer) {
|
|
((TickListServer) world.getFluidTickList()).a(nbttagcompound.getList("LiquidTicks", 10));
|
|
}
|
|
- world.timings.syncChunkLoadTileTicksTimer.stopTiming(); // Spigot
|
|
+ world.timings.chunkLoadLevelTimer.stopTiming(); // Spigot
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/CustomFunction.java b/src/main/java/net/minecraft/server/CustomFunction.java
|
|
index cc9e8465c..1bd3a0f77 100644
|
|
--- a/src/main/java/net/minecraft/server/CustomFunction.java
|
|
+++ b/src/main/java/net/minecraft/server/CustomFunction.java
|
|
@@ -13,12 +13,22 @@ public class CustomFunction {
|
|
|
|
private final CustomFunction.c[] a;
|
|
private final MinecraftKey b;
|
|
+ // Paper start
|
|
+ public co.aikar.timings.Timing timing;
|
|
+ public co.aikar.timings.Timing getTiming() {
|
|
+ if (timing == null) {
|
|
+ timing = co.aikar.timings.MinecraftTimings.getCommandFunctionTiming(this);
|
|
+ }
|
|
+ return timing;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
public CustomFunction(MinecraftKey minecraftkey, CustomFunction.c[] acustomfunction_c) {
|
|
this.b = minecraftkey;
|
|
this.a = acustomfunction_c;
|
|
}
|
|
|
|
+ public MinecraftKey getMinecraftKey() { return this.a(); } // Paper - OBFHELPER
|
|
public MinecraftKey a() {
|
|
return this.b;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/CustomFunctionData.java b/src/main/java/net/minecraft/server/CustomFunctionData.java
|
|
index b8a626dd4..323b2e6dc 100644
|
|
--- a/src/main/java/net/minecraft/server/CustomFunctionData.java
|
|
+++ b/src/main/java/net/minecraft/server/CustomFunctionData.java
|
|
@@ -109,7 +109,7 @@ public class CustomFunctionData implements ITickable, IResourcePackListener {
|
|
|
|
return 0;
|
|
} else {
|
|
- try {
|
|
+ try (co.aikar.timings.Timing timing = customfunction.getTiming().startTiming()) { // Paper
|
|
this.i = true;
|
|
int j = 0;
|
|
CustomFunction.c[] acustomfunction_c = customfunction.b();
|
|
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
index b5e5c385d..7f4c76669 100644
|
|
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
|
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.Level;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.craftbukkit.LoggerOutputStream;
|
|
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
import org.bukkit.event.server.ServerCommandEvent;
|
|
import org.bukkit.craftbukkit.util.Waitable;
|
|
import org.bukkit.event.server.RemoteServerCommandEvent;
|
|
@@ -454,7 +454,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
}
|
|
|
|
public void handleCommandQueue() {
|
|
- SpigotTimings.serverCommandTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.serverCommandTimer.startTiming(); // Spigot
|
|
while (!this.serverCommandQueue.isEmpty()) {
|
|
ServerCommand servercommand = (ServerCommand) this.serverCommandQueue.remove(0);
|
|
|
|
@@ -469,7 +469,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
// CraftBukkit end
|
|
}
|
|
|
|
- SpigotTimings.serverCommandTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.serverCommandTimer.stopTiming(); // Spigot
|
|
}
|
|
|
|
public boolean Q() {
|
|
@@ -719,7 +719,20 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
|
return remoteControlCommandListener.getMessages();
|
|
}
|
|
};
|
|
- processQueue.add(waitable);
|
|
+ // Paper start
|
|
+ if (s.toLowerCase().startsWith("timings") && s.toLowerCase().matches("timings (report|paste|get|merged|seperate)")) {
|
|
+ org.bukkit.command.BufferedCommandSender sender = new org.bukkit.command.BufferedCommandSender();
|
|
+ waitable = new Waitable<String>() {
|
|
+ @Override
|
|
+ protected String evaluate() {
|
|
+ return sender.getBuffer();
|
|
+ }
|
|
+ };
|
|
+ co.aikar.timings.Timings.generateReport(new co.aikar.timings.TimingsReportListener(sender, waitable));
|
|
+ } else {
|
|
+ processQueue.add(waitable);
|
|
+ }
|
|
+ // Paper end
|
|
try {
|
|
return waitable.get();
|
|
} catch (java.util.concurrent.ExecutionException e) {
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 50176b97b..f960db23d 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -29,7 +29,8 @@ import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Hanging;
|
|
import org.bukkit.entity.LivingEntity;
|
|
import org.bukkit.entity.Vehicle;
|
|
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
+import co.aikar.timings.Timing; // Paper
|
|
import org.bukkit.event.entity.EntityCombustByEntityEvent;
|
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
|
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
|
|
@@ -160,7 +161,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
public boolean valid;
|
|
public org.bukkit.projectiles.ProjectileSource projectileSource; // For projectiles only
|
|
public boolean forceExplosionKnockback; // SPIGOT-949
|
|
- public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot
|
|
+ public Timing tickTimer = MinecraftTimings.getEntityTimings(this); // Paper
|
|
// Spigot start
|
|
public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this);
|
|
public final boolean defaultActivationState;
|
|
@@ -537,7 +538,6 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
}
|
|
|
|
public void move(EnumMoveType enummovetype, double d0, double d1, double d2) {
|
|
- org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.startTiming(); // Spigot
|
|
if (this.noclip) {
|
|
this.a(this.getBoundingBox().d(d0, d1, d2));
|
|
this.recalcPosition();
|
|
@@ -887,7 +887,6 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
|
|
|
this.world.methodProfiler.exit();
|
|
}
|
|
- org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.stopTiming(); // Spigot
|
|
}
|
|
|
|
protected float ab() {
|
|
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
index 14c481220..92a55bdf6 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -32,7 +32,7 @@ import org.bukkit.event.entity.EntityTeleportEvent;
|
|
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
|
// CraftBukkit end
|
|
|
|
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
|
|
public abstract class EntityLiving extends Entity {
|
|
|
|
@@ -2023,7 +2023,6 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
|
|
public void tick() {
|
|
- SpigotTimings.timerEntityBaseTick.startTiming(); // Spigot
|
|
super.tick();
|
|
this.cV();
|
|
this.o();
|
|
@@ -2094,9 +2093,7 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
}
|
|
|
|
- SpigotTimings.timerEntityBaseTick.stopTiming(); // Spigot
|
|
this.movementTick();
|
|
- SpigotTimings.timerEntityTickRest.startTiming(); // Spigot
|
|
double d0 = this.locX - this.lastX;
|
|
double d1 = this.locZ - this.lastZ;
|
|
float f = (float) (d0 * d0 + d1 * d1);
|
|
@@ -2172,8 +2169,6 @@ public abstract class EntityLiving extends Entity {
|
|
} else {
|
|
this.bv = 0;
|
|
}
|
|
-
|
|
- SpigotTimings.timerEntityTickRest.stopTiming(); // Spigot
|
|
}
|
|
|
|
protected float e(float f, float f1) {
|
|
@@ -2243,7 +2238,6 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
|
|
this.world.methodProfiler.enter("ai");
|
|
- SpigotTimings.timerEntityAI.startTiming(); // Spigot
|
|
if (this.isFrozen()) {
|
|
this.bg = false;
|
|
this.bh = 0.0F;
|
|
@@ -2254,7 +2248,6 @@ public abstract class EntityLiving extends Entity {
|
|
this.doTick();
|
|
this.world.methodProfiler.exit();
|
|
}
|
|
- SpigotTimings.timerEntityAI.stopTiming(); // Spigot
|
|
|
|
this.world.methodProfiler.exit();
|
|
this.world.methodProfiler.enter("jump");
|
|
@@ -2279,9 +2272,7 @@ public abstract class EntityLiving extends Entity {
|
|
this.n();
|
|
AxisAlignedBB axisalignedbb = this.getBoundingBox();
|
|
|
|
- SpigotTimings.timerEntityAIMove.startTiming(); // Spigot
|
|
this.a(this.bh, this.bi, this.bj);
|
|
- SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot
|
|
this.world.methodProfiler.exit();
|
|
this.world.methodProfiler.enter("push");
|
|
if (this.bw > 0) {
|
|
@@ -2289,9 +2280,7 @@ public abstract class EntityLiving extends Entity {
|
|
this.a(axisalignedbb, this.getBoundingBox());
|
|
}
|
|
|
|
- SpigotTimings.timerEntityAICollision.startTiming(); // Spigot
|
|
this.cN();
|
|
- SpigotTimings.timerEntityAICollision.stopTiming(); // Spigot
|
|
this.world.methodProfiler.exit();
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java
|
|
index 22db1fad1..d7f33bd53 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityTracker.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityTracker.java
|
|
@@ -168,7 +168,7 @@ public class EntityTracker {
|
|
public void updatePlayers() {
|
|
ArrayList arraylist = Lists.newArrayList();
|
|
Iterator iterator = this.c.iterator();
|
|
-
|
|
+ world.timings.tracker1.startTiming(); // Spigot
|
|
while (iterator.hasNext()) {
|
|
EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next();
|
|
|
|
@@ -181,7 +181,9 @@ public class EntityTracker {
|
|
}
|
|
}
|
|
}
|
|
+ world.timings.tracker1.stopTiming(); // Spigot
|
|
|
|
+ world.timings.tracker2.startTiming(); // Spigot
|
|
for (int i = 0; i < arraylist.size(); ++i) {
|
|
EntityPlayer entityplayer = (EntityPlayer) arraylist.get(i);
|
|
Iterator iterator1 = this.c.iterator();
|
|
@@ -194,6 +196,7 @@ public class EntityTracker {
|
|
}
|
|
}
|
|
}
|
|
+ world.timings.tracker2.stopTiming(); // Spigot
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 37211c33a..97690499f 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.Timings;
|
|
import com.google.common.base.Stopwatch;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Maps;
|
|
@@ -67,8 +68,8 @@ import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.craftbukkit.Main;
|
|
import org.bukkit.event.server.ServerLoadEvent;
|
|
// CraftBukkit end
|
|
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
|
import org.spigotmc.SlackActivityAccountant; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
|
|
public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStatistics, ICommandListener, Runnable {
|
|
|
|
@@ -620,6 +621,7 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
}
|
|
// CraftBukkit end
|
|
MinecraftServer.LOGGER.info("Stopping server");
|
|
+ MinecraftTimings.stopServer(); // Paper
|
|
// CraftBukkit start
|
|
if (this.server != null) {
|
|
this.server.disablePlugins();
|
|
@@ -821,7 +823,7 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
public void t() {}
|
|
|
|
protected void a(BooleanSupplier booleansupplier) {
|
|
- SpigotTimings.serverTickTimer.startTiming(); // Spigot
|
|
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.startTiming(); // Paper
|
|
this.slackActivityAccountant.tickStarted(); // Spigot
|
|
long i = SystemUtils.getMonotonicNanos();
|
|
|
|
@@ -848,7 +850,6 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
}
|
|
|
|
if (autosavePeriod > 0 && this.ticks % autosavePeriod == 0) { // CraftBukkit
|
|
- SpigotTimings.worldSaveTimer.startTiming(); // Spigot
|
|
this.methodProfiler.enter("save");
|
|
this.playerList.savePlayers();
|
|
// Spigot Start
|
|
@@ -863,7 +864,6 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
// this.saveChunks(true);
|
|
// Spigot End
|
|
this.methodProfiler.exit();
|
|
- SpigotTimings.worldSaveTimer.stopTiming(); // Spigot
|
|
}
|
|
|
|
this.methodProfiler.enter("snooper");
|
|
@@ -884,14 +884,14 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
this.methodProfiler.exit();
|
|
org.spigotmc.WatchdogThread.tick(); // Spigot
|
|
this.slackActivityAccountant.tickEnded(l); // Spigot
|
|
- SpigotTimings.serverTickTimer.stopTiming(); // Spigot
|
|
- org.spigotmc.CustomTimingsHandler.tick(); // Spigot
|
|
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
|
|
}
|
|
|
|
public void b(BooleanSupplier booleansupplier) {
|
|
- SpigotTimings.schedulerTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.bukkitSchedulerTimer.startTiming(); // Paper
|
|
this.server.getScheduler().mainThreadHeartbeat(this.ticks); // CraftBukkit
|
|
- SpigotTimings.schedulerTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.bukkitSchedulerTimer.stopTiming(); // Paper
|
|
+ MinecraftTimings.minecraftSchedulerTimer.startTiming(); // Paper
|
|
this.methodProfiler.enter("jobs");
|
|
|
|
FutureTask futuretask;
|
|
@@ -899,26 +899,27 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
while ((futuretask = (FutureTask) this.f.poll()) != null) {
|
|
SystemUtils.a(futuretask, MinecraftServer.LOGGER);
|
|
}
|
|
+ MinecraftTimings.minecraftSchedulerTimer.stopTiming(); // Paper
|
|
|
|
this.methodProfiler.exitEnter("commandFunctions");
|
|
- SpigotTimings.commandFunctionsTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.commandFunctionsTimer.startTiming(); // Spigot
|
|
this.getFunctionData().tick();
|
|
- SpigotTimings.commandFunctionsTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.commandFunctionsTimer.stopTiming(); // Spigot
|
|
this.methodProfiler.exitEnter("levels");
|
|
|
|
// CraftBukkit start
|
|
// Run tasks that are waiting on processing
|
|
- SpigotTimings.processQueueTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.processQueueTimer.startTiming(); // Spigot
|
|
while (!processQueue.isEmpty()) {
|
|
processQueue.remove().run();
|
|
}
|
|
- SpigotTimings.processQueueTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.processQueueTimer.stopTiming(); // Spigot
|
|
|
|
- SpigotTimings.chunkIOTickTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.chunkIOTickTimer.startTiming(); // Spigot
|
|
org.bukkit.craftbukkit.chunkio.ChunkIOExecutor.tick();
|
|
- SpigotTimings.chunkIOTickTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.chunkIOTickTimer.stopTiming(); // Spigot
|
|
|
|
- SpigotTimings.timeUpdateTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.timeUpdateTimer.startTiming(); // Spigot
|
|
// Send time updates to everyone, it will get the right time from the world the player is in.
|
|
if (this.ticks % 20 == 0) {
|
|
for (int i = 0; i < this.getPlayerList().players.size(); ++i) {
|
|
@@ -926,7 +927,7 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(entityplayer.world.getTime(), entityplayer.getPlayerTime(), entityplayer.world.getGameRules().getBoolean("doDaylightCycle"))); // Add support for per player time
|
|
}
|
|
}
|
|
- SpigotTimings.timeUpdateTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.timeUpdateTimer.stopTiming(); // Spigot
|
|
|
|
// WorldServer worldserver; // CraftBukkit - dropped down
|
|
long i;
|
|
@@ -985,29 +986,27 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
|
|
this.methodProfiler.exit();
|
|
this.methodProfiler.enter("tracker");
|
|
- worldserver.timings.tracker.startTiming(); // Spigot
|
|
worldserver.getTracker().updatePlayers();
|
|
- worldserver.timings.tracker.stopTiming(); // Spigot
|
|
this.methodProfiler.exit();
|
|
this.methodProfiler.exit();
|
|
}
|
|
}
|
|
|
|
this.methodProfiler.exitEnter("connection");
|
|
- SpigotTimings.connectionTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.connectionTimer.startTiming(); // Spigot
|
|
this.getServerConnection().c();
|
|
- SpigotTimings.connectionTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.connectionTimer.stopTiming(); // Spigot
|
|
this.methodProfiler.exitEnter("players");
|
|
- SpigotTimings.playerListTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.playerListTimer.startTiming(); // Spigot
|
|
this.playerList.tick();
|
|
- SpigotTimings.playerListTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.playerListTimer.stopTiming(); // Spigot
|
|
this.methodProfiler.exitEnter("tickables");
|
|
|
|
- SpigotTimings.tickablesTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.tickablesTimer.startTiming(); // Spigot
|
|
for (int j = 0; j < this.k.size(); ++j) {
|
|
((ITickable) this.k.get(j)).tick();
|
|
}
|
|
- SpigotTimings.tickablesTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.tickablesTimer.stopTiming(); // Spigot
|
|
|
|
this.methodProfiler.exit();
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
index ceac52fe5..29e24940f 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.collect.AbstractIterator;
|
|
import com.google.common.collect.ComparisonChain;
|
|
import com.google.common.collect.Lists;
|
|
@@ -86,6 +87,7 @@ public class PlayerChunkMap {
|
|
int j;
|
|
|
|
if (i - this.k > 8000L) {
|
|
+ try (Timing ignored = world.timings.doChunkMapUpdate.startTiming()) { // Paper
|
|
this.k = i;
|
|
|
|
for (j = 0; j < this.i.size(); ++j) {
|
|
@@ -93,9 +95,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()) {
|
|
@@ -104,25 +108,31 @@ 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
|
|
// CraftBukkit start
|
|
Collections.sort(this.h, (playerchunkx, playerchunk1x) -> {
|
|
return ComparisonChain.start().compare(playerchunkx.g(), playerchunk1x.g()).result();
|
|
});
|
|
+ } // Paper timing
|
|
}
|
|
|
|
if (this.m && i % 4L == 2L) {
|
|
this.m = false;
|
|
+ try (Timing ignored = world.timings.doChunkMapSortSendToPlayers.startTiming()) { // Paper
|
|
Collections.sort(this.g, (playerchunkx, playerchunk1x) -> {
|
|
return ComparisonChain.start().compare(playerchunkx.g(), playerchunk1x.g()).result();
|
|
});
|
|
+ } // Paper timing
|
|
// CraftBukkit end
|
|
}
|
|
|
|
if (!this.h.isEmpty()) {
|
|
+ try (Timing ignored = world.timings.doChunkMapPlayersNeedingChunks.startTiming()) { // Paper
|
|
// Spigot start
|
|
org.spigotmc.SlackActivityAccountant activityAccountant = this.world.getMinecraftServer().slackActivityAccountant;
|
|
activityAccountant.startActivity(0.5);
|
|
@@ -154,10 +164,12 @@ public class PlayerChunkMap {
|
|
}
|
|
|
|
activityAccountant.endActivity(); // Spigot
|
|
+ } // Paper timing
|
|
}
|
|
|
|
if (!this.g.isEmpty()) {
|
|
j = 81;
|
|
+ try (Timing ignored = world.timings.doChunkMapPendingSendToPlayers.startTiming()) { // Paper
|
|
Iterator iterator2 = this.g.iterator();
|
|
|
|
while (iterator2.hasNext()) {
|
|
@@ -171,14 +183,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.canRespawn()) {
|
|
this.world.getChunkProvider().b();
|
|
}
|
|
+ } // Paper timing
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index 2b6c797ce..0a887789a 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -59,6 +59,7 @@ import org.bukkit.inventory.CraftingInventory;
|
|
import org.bukkit.inventory.EquipmentSlot;
|
|
import org.bukkit.inventory.InventoryView;
|
|
import org.bukkit.util.NumberConversions;
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
// CraftBukkit end
|
|
|
|
public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
@@ -136,7 +137,6 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
// CraftBukkit end
|
|
|
|
public void tick() {
|
|
- org.bukkit.craftbukkit.SpigotTimings.playerConnectionTimer.startTiming(); // Spigot
|
|
this.syncPosition();
|
|
this.player.playerTick();
|
|
this.player.setLocation(this.l, this.m, this.n, this.player.yaw, this.player.pitch);
|
|
@@ -209,7 +209,6 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
this.player.resetIdleTimer(); // CraftBukkit - SPIGOT-854
|
|
this.disconnect(new ChatMessage("multiplayer.disconnect.idling", new Object[0]));
|
|
}
|
|
- org.bukkit.craftbukkit.SpigotTimings.playerConnectionTimer.stopTiming(); // Spigot
|
|
|
|
}
|
|
|
|
@@ -1622,7 +1621,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
// CraftBukkit end
|
|
|
|
private void handleCommand(String s) {
|
|
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.startTiming(); // Spigot
|
|
+ MinecraftTimings.playerCommandTimer.startTiming(); // Paper
|
|
// CraftBukkit start - whole method
|
|
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
|
|
this.LOGGER.info(this.player.getName() + " issued server command: " + s);
|
|
@@ -1633,7 +1632,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
this.server.getPluginManager().callEvent(event);
|
|
|
|
if (event.isCancelled()) {
|
|
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.playerCommandTimer.stopTiming(); // Paper
|
|
return;
|
|
}
|
|
|
|
@@ -1646,7 +1645,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
|
java.util.logging.Logger.getLogger(PlayerConnection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
|
return;
|
|
} finally {
|
|
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
|
+ MinecraftTimings.playerCommandTimer.stopTiming(); // Paper
|
|
}
|
|
// this.minecraftServer.getCommandDispatcher().a(this.player.getCommandListener(), s);
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
index 616797dc6..3a5daf670 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java
|
|
@@ -1,10 +1,16 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
+import co.aikar.timings.Timing; // Paper
|
|
+
|
|
public class PlayerConnectionUtils {
|
|
public static <T extends PacketListener> void ensureMainThread(Packet<T> packet, T packetlistener, IAsyncTaskHandler iasynctaskhandler) throws CancelledPacketHandleException {
|
|
if (!iasynctaskhandler.isMainThread()) {
|
|
+ Timing timing = MinecraftTimings.getPacketTiming(packet); // Paper
|
|
iasynctaskhandler.postToMainThread(() -> {
|
|
+ try (Timing ignored = timing.startTiming()) { // Paper
|
|
packet.a(packetlistener);
|
|
+ }
|
|
});
|
|
throw CancelledPacketHandleException.INSTANCE;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
|
index 9db7d7e30..aef650774 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.MinecraftTimings;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.collect.Sets;
|
|
@@ -1174,10 +1175,11 @@ public abstract class PlayerList {
|
|
}
|
|
|
|
public void savePlayers() {
|
|
+ MinecraftTimings.savePlayers.startTiming(); // Paper
|
|
for (int i = 0; i < this.players.size(); ++i) {
|
|
this.savePlayerFile((EntityPlayer) this.players.get(i));
|
|
}
|
|
-
|
|
+ MinecraftTimings.savePlayers.stopTiming(); // Paper
|
|
}
|
|
|
|
public WhiteList getWhitelist() {
|
|
diff --git a/src/main/java/net/minecraft/server/TickListServer.java b/src/main/java/net/minecraft/server/TickListServer.java
|
|
index 0d0b4d873..774134103 100644
|
|
--- a/src/main/java/net/minecraft/server/TickListServer.java
|
|
+++ b/src/main/java/net/minecraft/server/TickListServer.java
|
|
@@ -24,13 +24,19 @@ public class TickListServer<T> implements TickList<T> {
|
|
private final List<NextTickListEntry<T>> g = Lists.newArrayList();
|
|
private final Consumer<NextTickListEntry<T>> h;
|
|
|
|
- public TickListServer(WorldServer worldserver, Predicate<T> predicate, Function<T, MinecraftKey> function, Function<MinecraftKey, T> function1, Consumer<NextTickListEntry<T>> consumer) {
|
|
+ public TickListServer(WorldServer worldserver, Predicate<T> predicate, Function<T, MinecraftKey> function, Function<MinecraftKey, T> function1, Consumer<NextTickListEntry<T>> consumer, String timingsType) { // Paper
|
|
this.a = predicate;
|
|
this.b = function;
|
|
this.c = function1;
|
|
this.f = worldserver;
|
|
this.h = consumer;
|
|
+ // Paper start
|
|
+ timingCleanup = co.aikar.timings.WorldTimingsHandler.getTickList(worldserver, timingsType + " - Cleanup");
|
|
+ timingTicking = co.aikar.timings.WorldTimingsHandler.getTickList(worldserver, timingsType + " - Ticking");
|
|
}
|
|
+ private final co.aikar.timings.Timing timingCleanup; // Paper
|
|
+ private final co.aikar.timings.Timing timingTicking; // Paper
|
|
+ // Paper end
|
|
|
|
public void a() {
|
|
int i = this.nextTickList.size();
|
|
@@ -49,7 +55,7 @@ public class TickListServer<T> implements TickList<T> {
|
|
}
|
|
|
|
this.f.methodProfiler.enter("cleaning");
|
|
-
|
|
+ timingCleanup.startTiming(); // Paper
|
|
NextTickListEntry<T> nextticklistentry; // CraftBukkit - decompile error
|
|
|
|
for (int j = 0; j < i; ++j) {
|
|
@@ -62,9 +68,11 @@ public class TickListServer<T> implements TickList<T> {
|
|
// this.nextTickListHash.remove(nextticklistentry); // CraftBukkit - use nextTickList
|
|
this.g.add(nextticklistentry);
|
|
}
|
|
+ timingCleanup.stopTiming(); // Paper
|
|
|
|
this.f.methodProfiler.exit();
|
|
this.f.methodProfiler.enter("ticking");
|
|
+ timingTicking.startTiming(); // Paper
|
|
Iterator iterator = this.g.iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
@@ -89,6 +97,7 @@ public class TickListServer<T> implements TickList<T> {
|
|
|
|
this.f.methodProfiler.exit();
|
|
this.g.clear();
|
|
+ timingTicking.stopTiming(); // Paper
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
|
|
index c69209497..68ac014aa 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
|
@@ -4,12 +4,13 @@ import javax.annotation.Nullable;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
|
|
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
+import co.aikar.timings.Timing; // Paper
|
|
import org.bukkit.inventory.InventoryHolder; // CraftBukkit
|
|
|
|
public abstract class TileEntity implements KeyedObject { // Paper
|
|
|
|
- public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getTileEntityTimings(this); // Spigot
|
|
+ public Timing tickTimer = MinecraftTimings.getTileEntityTimings(this); // Paper
|
|
private static final Logger a = LogManager.getLogger();
|
|
private final TileEntityTypes<?> e; public TileEntityTypes getTileEntityType() { return e; } // Paper - OBFHELPER
|
|
protected World world;
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 0920ef2d1..230517907 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.Timings;
|
|
import com.google.common.base.MoreObjects;
|
|
import com.google.common.collect.Lists;
|
|
import it.unimi.dsi.fastutil.longs.LongSet;
|
|
@@ -26,13 +27,13 @@ import com.google.common.collect.Maps;
|
|
import java.util.Map;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.block.BlockState;
|
|
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.craftbukkit.CraftWorld;
|
|
import org.bukkit.craftbukkit.block.CraftBlockState;
|
|
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
|
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
|
+import org.bukkit.craftbukkit.util.LongHashSet; // Paper
|
|
import org.bukkit.event.block.BlockCanBuildEvent;
|
|
import org.bukkit.event.block.BlockPhysicsEvent;
|
|
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|
@@ -136,7 +137,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
|
|
public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper
|
|
|
|
- public final SpigotTimings.WorldTimingsHandler timings; // Spigot
|
|
+ public final co.aikar.timings.WorldTimingsHandler timings; // Paper
|
|
private boolean guardEntityList; // Spigot
|
|
public static boolean haveWeSilencedAPhysicsCrash;
|
|
public static String blockLocation;
|
|
@@ -205,7 +206,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
});
|
|
this.getServer().addWorld(this.world);
|
|
// CraftBukkit end
|
|
- timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
|
+ timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings
|
|
this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
|
|
this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime);
|
|
}
|
|
@@ -1080,6 +1081,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
|
|
this.methodProfiler.exitEnter("remove");
|
|
+ timings.entityRemoval.startTiming(); // Paper
|
|
this.entityList.removeAll(this.g);
|
|
|
|
int j;
|
|
@@ -1100,6 +1102,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
|
|
this.g.clear();
|
|
this.p_();
|
|
+ timings.entityRemoval.stopTiming(); // Paper
|
|
this.methodProfiler.exitEnter("regular");
|
|
|
|
CrashReport crashreport1;
|
|
@@ -1109,6 +1112,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
timings.entityTick.startTiming(); // Spigot
|
|
guardEntityList = true; // Spigot
|
|
// CraftBukkit start - Use field for loop variable
|
|
+ co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper
|
|
int entitiesThisCycle = 0;
|
|
if (tickPosition < 0) tickPosition = 0;
|
|
for (entityLimiter.initTick();
|
|
@@ -1130,10 +1134,11 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
this.methodProfiler.enter("tick");
|
|
if (!entity.dead && !(entity instanceof EntityPlayer)) {
|
|
try {
|
|
- SpigotTimings.tickEntityTimer.startTiming(); // Spigot
|
|
+ entity.tickTimer.startTiming(); // Paper
|
|
this.g(entity);
|
|
- SpigotTimings.tickEntityTimer.stopTiming(); // Spigot
|
|
+ entity.tickTimer.stopTiming(); // Paper
|
|
} catch (Throwable throwable1) {
|
|
+ entity.tickTimer.stopTiming();
|
|
crashreport1 = CrashReport.a(throwable1, "Ticking entity");
|
|
crashreportsystemdetails1 = crashreport1.a("Entity being ticked");
|
|
entity.appendEntityCrashDetails(crashreportsystemdetails1);
|
|
@@ -1258,6 +1263,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
|
|
timings.tileEntityPending.stopTiming(); // Spigot
|
|
+ co.aikar.timings.TimingHistory.tileEntityTicks += this.tileEntityListTick.size(); // Paper
|
|
this.methodProfiler.exit();
|
|
this.methodProfiler.exit();
|
|
}
|
|
@@ -1316,7 +1322,6 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
// CraftBukkit end
|
|
|
|
- entity.tickTimer.startTiming(); // Spigot
|
|
entity.N = entity.locX;
|
|
entity.O = entity.locY;
|
|
entity.P = entity.locZ;
|
|
@@ -1324,6 +1329,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
entity.lastPitch = entity.pitch;
|
|
if (flag && entity.inChunk) {
|
|
++entity.ticksLived;
|
|
+ ++co.aikar.timings.TimingHistory.activatedEntityTicks; // Paper
|
|
if (entity.isPassenger()) {
|
|
entity.aH();
|
|
} else {
|
|
@@ -1387,8 +1393,6 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
}
|
|
}
|
|
- entity.tickTimer.stopTiming(); // Spigot
|
|
-
|
|
}
|
|
|
|
public boolean a(@Nullable Entity entity, VoxelShape voxelshape) {
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index 23c80f80a..2450421d4 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import co.aikar.timings.Timings;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.util.concurrent.ListenableFuture;
|
|
@@ -71,7 +72,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
IRegistry<Block> iregistry1 = IRegistry.BLOCK; // CraftBukkit - decompile error
|
|
|
|
IRegistry.BLOCK.getClass();
|
|
- this.nextTickListBlock = new TickListServer<>(this, predicate, function, iregistry1::getOrDefault, this::b); // CraftBukkit - decompile error
|
|
+ this.nextTickListBlock = new TickListServer<>(this, predicate, function, iregistry1::getOrDefault, this::b, "Blocks"); // CraftBukkit - decompile error // Paper - Timings v2
|
|
Predicate<FluidType> predicate2 = (fluidtype) -> { // CraftBukkit - decompile error
|
|
return fluidtype == null || fluidtype == FluidTypes.a;
|
|
};
|
|
@@ -80,7 +81,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
function = iregistry::getKey;
|
|
IRegistry<FluidType> iregistry2 = IRegistry.FLUID; // CraftBukkit - decompile error
|
|
IRegistry.FLUID.getClass();
|
|
- this.nextTickListFluid = new TickListServer<>(this, predicate2, function, iregistry2::getOrDefault, this::a); // CraftBukkit - decompile error
|
|
+ this.nextTickListFluid = new TickListServer<>(this, predicate2, function, iregistry2::getOrDefault, this::a, "Fluids"); // CraftBukkit - decompile error // Paper - Timings v2
|
|
this.siegeManager = new VillageSiege(this);
|
|
this.d = new ObjectLinkedOpenHashSet();
|
|
this.server = minecraftserver;
|
|
@@ -297,13 +298,13 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
|
|
timings.doChunkUnload.stopTiming(); // Spigot
|
|
this.methodProfiler.exitEnter("tickPending");
|
|
- timings.doTickPending.startTiming(); // Spigot
|
|
+ timings.scheduledBlocks.startTiming(); // Paper
|
|
this.q();
|
|
- timings.doTickPending.stopTiming(); // Spigot
|
|
+ timings.scheduledBlocks.stopTiming(); // Paper
|
|
this.methodProfiler.exitEnter("tickBlocks");
|
|
- timings.doTickTiles.startTiming(); // Spigot
|
|
+ timings.chunkTicks.startTiming(); // Paper
|
|
this.n_();
|
|
- timings.doTickTiles.stopTiming(); // Spigot
|
|
+ timings.chunkTicks.stopTiming(); // Paper
|
|
this.methodProfiler.exitEnter("chunkMap");
|
|
timings.doChunkMap.startTiming(); // Spigot
|
|
this.manager.flush();
|
|
@@ -533,6 +534,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
}
|
|
|
|
this.methodProfiler.exitEnter("tickBlocks");
|
|
+ timings.chunkTicksBlocks.startTiming(); // Paper
|
|
if (i > 0) {
|
|
ChunkSection[] achunksection = chunk.getSections();
|
|
int i1 = achunksection.length;
|
|
@@ -564,6 +566,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
}
|
|
}
|
|
}
|
|
+ timings.chunkTicksBlocks.stopTiming(); // Paper
|
|
}
|
|
|
|
this.methodProfiler.exit();
|
|
@@ -869,6 +872,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
|
|
if (chunkproviderserver.d()) {
|
|
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit
|
|
+ timings.worldSave.startTiming(); // Paper
|
|
if (iprogressupdate != null) {
|
|
iprogressupdate.a(new ChatMessage("menu.savingLevel", new Object[0]));
|
|
}
|
|
@@ -878,7 +882,9 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
iprogressupdate.c(new ChatMessage("menu.savingChunks", new Object[0]));
|
|
}
|
|
|
|
+ timings.worldSaveChunks.startTiming(); // Paper
|
|
chunkproviderserver.a(flag);
|
|
+ timings.worldSaveChunks.stopTiming(); // Paper
|
|
// CraftBukkit - ArrayList -> Collection
|
|
java.util.Collection arraylist = chunkproviderserver.a();
|
|
Iterator iterator = arraylist.iterator();
|
|
@@ -890,7 +896,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
chunkproviderserver.unload(chunk);
|
|
}
|
|
}
|
|
-
|
|
+ timings.worldSave.stopTiming(); // Paper
|
|
}
|
|
}
|
|
|
|
@@ -903,6 +909,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
}
|
|
|
|
protected void a() throws ExceptionWorldConflict {
|
|
+ timings.worldSaveLevel.startTiming(); // Paper
|
|
this.checkSession();
|
|
Iterator iterator = this.server.getWorlds().iterator();
|
|
|
|
@@ -932,6 +939,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
this.worldData.c(this.server.getBossBattleCustomData().c());
|
|
this.dataManager.saveWorldData(this.worldData, this.server.getPlayerList().t());
|
|
this.h().a();
|
|
+ timings.worldSaveLevel.stopTiming(); // Paper
|
|
}
|
|
|
|
// CraftBukkit start
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index a3c07fbac..da57751f7 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -1945,12 +1945,31 @@ public final class CraftServer implements Server {
|
|
private final Spigot spigot = new Spigot()
|
|
{
|
|
|
|
+ @Deprecated
|
|
@Override
|
|
public YamlConfiguration getConfig()
|
|
{
|
|
return org.spigotmc.SpigotConfig.config;
|
|
}
|
|
|
|
+ @Override
|
|
+ public YamlConfiguration getBukkitConfig()
|
|
+ {
|
|
+ return configuration;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public YamlConfiguration getSpigotConfig()
|
|
+ {
|
|
+ return org.spigotmc.SpigotConfig.config;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public YamlConfiguration getPaperConfig()
|
|
+ {
|
|
+ return com.destroystokyo.paper.PaperConfig.config;
|
|
+ }
|
|
+
|
|
@Override
|
|
public void restart() {
|
|
org.spigotmc.RestartCommand.restart();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/SpigotTimings.java b/src/main/java/org/bukkit/craftbukkit/SpigotTimings.java
|
|
deleted file mode 100644
|
|
index 2ab4b11a8..000000000
|
|
--- a/src/main/java/org/bukkit/craftbukkit/SpigotTimings.java
|
|
+++ /dev/null
|
|
@@ -1,173 +0,0 @@
|
|
-package org.bukkit.craftbukkit;
|
|
-
|
|
-import com.google.common.collect.Maps;
|
|
-import net.minecraft.server.*;
|
|
-import org.bukkit.plugin.java.JavaPluginLoader;
|
|
-import org.spigotmc.CustomTimingsHandler;
|
|
-import org.bukkit.scheduler.BukkitTask;
|
|
-
|
|
-import java.util.HashMap;
|
|
-import java.util.Map;
|
|
-
|
|
-import org.bukkit.craftbukkit.scheduler.CraftTask;
|
|
-
|
|
-public class SpigotTimings {
|
|
-
|
|
- public static final CustomTimingsHandler serverTickTimer = new CustomTimingsHandler("** Full Server Tick");
|
|
- public static final CustomTimingsHandler playerListTimer = new CustomTimingsHandler("Player List");
|
|
- public static final CustomTimingsHandler commandFunctionsTimer = new CustomTimingsHandler("Command Functions");
|
|
- public static final CustomTimingsHandler connectionTimer = new CustomTimingsHandler("Connection Handler");
|
|
- public static final CustomTimingsHandler playerConnectionTimer = new CustomTimingsHandler("** PlayerConnection");
|
|
- public static final CustomTimingsHandler tickablesTimer = new CustomTimingsHandler("Tickables");
|
|
- public static final CustomTimingsHandler schedulerTimer = new CustomTimingsHandler("Scheduler");
|
|
- public static final CustomTimingsHandler chunkIOTickTimer = new CustomTimingsHandler("ChunkIOTick");
|
|
- public static final CustomTimingsHandler timeUpdateTimer = new CustomTimingsHandler("Time Update");
|
|
- public static final CustomTimingsHandler serverCommandTimer = new CustomTimingsHandler("Server Command");
|
|
- public static final CustomTimingsHandler worldSaveTimer = new CustomTimingsHandler("World Save");
|
|
-
|
|
- public static final CustomTimingsHandler entityMoveTimer = new CustomTimingsHandler("** entityMove");
|
|
- public static final CustomTimingsHandler tickEntityTimer = new CustomTimingsHandler("** tickEntity");
|
|
- public static final CustomTimingsHandler activatedEntityTimer = new CustomTimingsHandler("** activatedTickEntity");
|
|
- public static final CustomTimingsHandler tickTileEntityTimer = new CustomTimingsHandler("** tickTileEntity");
|
|
-
|
|
- public static final CustomTimingsHandler timerEntityBaseTick = new CustomTimingsHandler("** livingEntityBaseTick");
|
|
- public static final CustomTimingsHandler timerEntityAI = new CustomTimingsHandler("** livingEntityAI");
|
|
- public static final CustomTimingsHandler timerEntityAICollision = new CustomTimingsHandler("** livingEntityAICollision");
|
|
- public static final CustomTimingsHandler timerEntityAIMove = new CustomTimingsHandler("** livingEntityAIMove");
|
|
- public static final CustomTimingsHandler timerEntityTickRest = new CustomTimingsHandler("** livingEntityTickRest");
|
|
-
|
|
- public static final CustomTimingsHandler processQueueTimer = new CustomTimingsHandler("processQueue");
|
|
- public static final CustomTimingsHandler schedulerSyncTimer = new CustomTimingsHandler("** Scheduler - Sync Tasks", JavaPluginLoader.pluginParentTimer);
|
|
-
|
|
- public static final CustomTimingsHandler playerCommandTimer = new CustomTimingsHandler("** playerCommand");
|
|
-
|
|
- public static final CustomTimingsHandler entityActivationCheckTimer = new CustomTimingsHandler("entityActivationCheck");
|
|
- public static final CustomTimingsHandler checkIfActiveTimer = new CustomTimingsHandler("** checkIfActive");
|
|
-
|
|
- public static final HashMap<String, CustomTimingsHandler> entityTypeTimingMap = new HashMap<String, CustomTimingsHandler>();
|
|
- public static final HashMap<String, CustomTimingsHandler> tileEntityTypeTimingMap = new HashMap<String, CustomTimingsHandler>();
|
|
- public static final HashMap<String, CustomTimingsHandler> pluginTaskTimingMap = new HashMap<String, CustomTimingsHandler>();
|
|
-
|
|
- /**
|
|
- * Gets a timer associated with a plugins tasks.
|
|
- * @param task
|
|
- * @param period
|
|
- * @return
|
|
- */
|
|
- public static CustomTimingsHandler getPluginTaskTimings(BukkitTask task, long period) {
|
|
- if (!task.isSync()) {
|
|
- return null;
|
|
- }
|
|
- String plugin;
|
|
- final CraftTask ctask = (CraftTask) task;
|
|
-
|
|
- if (task.getOwner() != null) {
|
|
- plugin = task.getOwner().getDescription().getFullName();
|
|
- } else {
|
|
- plugin = "Unknown";
|
|
- }
|
|
- String taskname = ctask.getTaskName();
|
|
-
|
|
- String name = "Task: " + plugin + " Runnable: " + taskname;
|
|
- if (period > 0) {
|
|
- name += "(interval:" + period +")";
|
|
- } else {
|
|
- name += "(Single)";
|
|
- }
|
|
- CustomTimingsHandler result = pluginTaskTimingMap.get(name);
|
|
- if (result == null) {
|
|
- result = new CustomTimingsHandler(name, SpigotTimings.schedulerSyncTimer);
|
|
- pluginTaskTimingMap.put(name, result);
|
|
- }
|
|
- return result;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get a named timer for the specified entity type to track type specific timings.
|
|
- * @param entity
|
|
- * @return
|
|
- */
|
|
- public static CustomTimingsHandler getEntityTimings(Entity entity) {
|
|
- String entityType = entity.getClass().getName();
|
|
- CustomTimingsHandler result = entityTypeTimingMap.get(entityType);
|
|
- if (result == null) {
|
|
- result = new CustomTimingsHandler("** tickEntity - " + entity.getClass().getSimpleName(), activatedEntityTimer);
|
|
- entityTypeTimingMap.put(entityType, result);
|
|
- }
|
|
- return result;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get a named timer for the specified tile entity type to track type specific timings.
|
|
- * @param entity
|
|
- * @return
|
|
- */
|
|
- public static CustomTimingsHandler getTileEntityTimings(TileEntity entity) {
|
|
- String entityType = entity.getClass().getName();
|
|
- CustomTimingsHandler result = tileEntityTypeTimingMap.get(entityType);
|
|
- if (result == null) {
|
|
- result = new CustomTimingsHandler("** tickTileEntity - " + entity.getClass().getSimpleName(), tickTileEntityTimer);
|
|
- tileEntityTypeTimingMap.put(entityType, result);
|
|
- }
|
|
- return result;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Set of timers per world, to track world specific timings.
|
|
- */
|
|
- public static class WorldTimingsHandler {
|
|
- public final CustomTimingsHandler mobSpawn;
|
|
- public final CustomTimingsHandler doChunkUnload;
|
|
- public final CustomTimingsHandler doPortalForcer;
|
|
- public final CustomTimingsHandler doTickPending;
|
|
- public final CustomTimingsHandler doTickTiles;
|
|
- public final CustomTimingsHandler doVillages;
|
|
- public final CustomTimingsHandler doChunkMap;
|
|
- public final CustomTimingsHandler doChunkGC;
|
|
- public final CustomTimingsHandler doSounds;
|
|
- public final CustomTimingsHandler entityTick;
|
|
- public final CustomTimingsHandler tileEntityTick;
|
|
- public final CustomTimingsHandler tileEntityPending;
|
|
- public final CustomTimingsHandler tracker;
|
|
- public final CustomTimingsHandler doTick;
|
|
- public final CustomTimingsHandler tickEntities;
|
|
-
|
|
- public final CustomTimingsHandler syncChunkLoadTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadDataTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadStructuresTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadEntitiesTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadTileEntitiesTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadTileTicksTimer;
|
|
- public final CustomTimingsHandler syncChunkLoadPostTimer;
|
|
-
|
|
- public WorldTimingsHandler(World server) {
|
|
- String name = server.worldData.getName() +" - ";
|
|
-
|
|
- mobSpawn = new CustomTimingsHandler("** " + name + "mobSpawn");
|
|
- doChunkUnload = new CustomTimingsHandler("** " + name + "doChunkUnload");
|
|
- doTickPending = new CustomTimingsHandler("** " + name + "doTickPending");
|
|
- doTickTiles = new CustomTimingsHandler("** " + name + "doTickTiles");
|
|
- doVillages = new CustomTimingsHandler("** " + name + "doVillages");
|
|
- doChunkMap = new CustomTimingsHandler("** " + name + "doChunkMap");
|
|
- doSounds = new CustomTimingsHandler("** " + name + "doSounds");
|
|
- doChunkGC = new CustomTimingsHandler("** " + name + "doChunkGC");
|
|
- doPortalForcer = new CustomTimingsHandler("** " + name + "doPortalForcer");
|
|
- entityTick = new CustomTimingsHandler("** " + name + "entityTick");
|
|
- tileEntityTick = new CustomTimingsHandler("** " + name + "tileEntityTick");
|
|
- tileEntityPending = new CustomTimingsHandler("** " + name + "tileEntityPending");
|
|
-
|
|
- syncChunkLoadTimer = new CustomTimingsHandler("** " + name + "syncChunkLoad");
|
|
- syncChunkLoadDataTimer = new CustomTimingsHandler("** " + name + "syncChunkLoad - Data");
|
|
- syncChunkLoadStructuresTimer = new CustomTimingsHandler("** " + name + "chunkLoad - Structures");
|
|
- syncChunkLoadEntitiesTimer = new CustomTimingsHandler("** " + name + "chunkLoad - Entities");
|
|
- syncChunkLoadTileEntitiesTimer = new CustomTimingsHandler("** " + name + "chunkLoad - TileEntities");
|
|
- syncChunkLoadTileTicksTimer = new CustomTimingsHandler("** " + name + "chunkLoad - TileTicks");
|
|
- syncChunkLoadPostTimer = new CustomTimingsHandler("** " + name + "chunkLoad - Post");
|
|
-
|
|
-
|
|
- tracker = new CustomTimingsHandler(name + "tracker");
|
|
- doTick = new CustomTimingsHandler(name + "doTick");
|
|
- tickEntities = new CustomTimingsHandler(name + "tickEntities");
|
|
- }
|
|
- }
|
|
-}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
|
|
index 413dd35f0..52a8c48fa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
|
|
@@ -1,6 +1,8 @@
|
|
package org.bukkit.craftbukkit.chunkio;
|
|
|
|
import java.io.IOException;
|
|
+
|
|
+import co.aikar.timings.Timing;
|
|
import net.minecraft.server.Chunk;
|
|
import net.minecraft.server.ChunkCoordIntPair;
|
|
import net.minecraft.server.ChunkRegionLoader;
|
|
@@ -16,7 +18,7 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChu
|
|
|
|
// async stuff
|
|
public Chunk callStage1(QueuedChunk queuedChunk) throws RuntimeException {
|
|
- try {
|
|
+ try (Timing ignored = queuedChunk.provider.world.timings.chunkIOStage1.startTimingIfSync()) { // Paper
|
|
ChunkRegionLoader loader = queuedChunk.loader;
|
|
Object[] data = loader.loadChunk(queuedChunk.world, queuedChunk.x, queuedChunk.z, (chunk) -> {});
|
|
|
|
@@ -38,11 +40,13 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChu
|
|
// queuedChunk.provider.originalGetChunkAt(queuedChunk.x, queuedChunk.z);
|
|
return;
|
|
}
|
|
+ try (Timing ignored = queuedChunk.provider.world.timings.chunkIOStage2.startTimingIfSync()) { // Paper
|
|
|
|
queuedChunk.loader.loadEntities(queuedChunk.compound.getCompound("Level"), chunk);
|
|
chunk.setLastSaved(queuedChunk.provider.world.getTime());
|
|
queuedChunk.provider.chunks.put(ChunkCoordIntPair.a(queuedChunk.x, queuedChunk.z), chunk);
|
|
chunk.addEntities();
|
|
+ } // Paper
|
|
}
|
|
|
|
public void callStage3(QueuedChunk queuedChunk, Chunk chunk, Runnable runnable) throws RuntimeException {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index b1a5937b1..b5afd5d1c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1720,6 +1720,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
packet.components = components;
|
|
getHandle().playerConnection.sendPacket(packet);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getPing()
|
|
+ {
|
|
+ return getHandle().ping;
|
|
+ }
|
|
+ // Paper end
|
|
};
|
|
|
|
public Player.Spigot spigot()
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
index 2f5d7a2a6..311c4f5ca 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
@@ -15,6 +15,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.function.Consumer;
|
|
import java.util.logging.Level;
|
|
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
import org.apache.commons.lang.Validate;
|
|
import org.bukkit.plugin.IllegalPluginAccessException;
|
|
import org.bukkit.plugin.Plugin;
|
|
@@ -246,7 +247,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
}
|
|
}
|
|
return false;
|
|
- }});
|
|
+ }}){{this.timings=co.aikar.timings.MinecraftTimings.getCancelTasksTimer();}}; // Paper
|
|
handle(task, 0L);
|
|
for (CraftTask taskPending = head.getNext(); taskPending != null; taskPending = taskPending.getNext()) {
|
|
if (taskPending == task) {
|
|
@@ -280,7 +281,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
}
|
|
}
|
|
}
|
|
- });
|
|
+ }){{this.timings=co.aikar.timings.MinecraftTimings.getCancelTasksTimer(plugin);}}; // Paper
|
|
handle(task, 0L);
|
|
for (CraftTask taskPending = head.getNext(); taskPending != null; taskPending = taskPending.getNext()) {
|
|
if (taskPending == task) {
|
|
@@ -387,9 +388,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
if (task.isSync()) {
|
|
currentTask = task;
|
|
try {
|
|
- task.timings.startTiming(); // Spigot
|
|
task.run();
|
|
- task.timings.stopTiming(); // Spigot
|
|
} catch (final Throwable throwable) {
|
|
task.getOwner().getLogger().log(
|
|
Level.WARNING,
|
|
@@ -416,8 +415,10 @@ public class CraftScheduler implements BukkitScheduler {
|
|
runners.remove(task.getTaskId());
|
|
}
|
|
}
|
|
+ MinecraftTimings.bukkitSchedulerFinishTimer.startTiming();
|
|
pending.addAll(temp);
|
|
temp.clear();
|
|
+ MinecraftTimings.bukkitSchedulerFinishTimer.stopTiming();
|
|
debugHead = debugHead.getNextHead(currentTick);
|
|
}
|
|
|
|
@@ -450,6 +451,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
}
|
|
|
|
private void parsePending() {
|
|
+ MinecraftTimings.bukkitSchedulerPendingTimer.startTiming();
|
|
CraftTask head = this.head;
|
|
CraftTask task = head.getNext();
|
|
CraftTask lastTask = head;
|
|
@@ -468,6 +470,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
task.setNext(null);
|
|
}
|
|
this.head = lastTask;
|
|
+ MinecraftTimings.bukkitSchedulerPendingTimer.stopTiming();
|
|
}
|
|
|
|
private boolean isReady(final int currentTick) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
|
|
index 3f55381c1..f32e66010 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
|
|
@@ -2,8 +2,8 @@ package org.bukkit.craftbukkit.scheduler;
|
|
|
|
import java.util.function.Consumer;
|
|
import org.bukkit.Bukkit;
|
|
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
|
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
|
+import co.aikar.timings.MinecraftTimings; // Paper
|
|
+import co.aikar.timings.Timing; // Paper
|
|
import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
|
@@ -26,12 +26,12 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
*/
|
|
private volatile long period;
|
|
private long nextRun;
|
|
- private final Runnable rTask;
|
|
- private final Consumer<BukkitTask> cTask;
|
|
+ public final Runnable rTask; // Paper
|
|
+ public final Consumer<BukkitTask> cTask; // Paper
|
|
+ public Timing timings; // Paper
|
|
private final Plugin plugin;
|
|
private final int id;
|
|
|
|
- final CustomTimingsHandler timings; // Spigot
|
|
CraftTask() {
|
|
this(null, null, CraftTask.NO_REPEATING, CraftTask.NO_REPEATING);
|
|
}
|
|
@@ -40,7 +40,7 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
this(null, task, CraftTask.NO_REPEATING, CraftTask.NO_REPEATING);
|
|
}
|
|
|
|
- CraftTask(final Plugin plugin, final Object task, final int id, final long period) {
|
|
+ CraftTask(final Plugin plugin, final Object task, final int id, final long period) { // Paper
|
|
this.plugin = plugin;
|
|
if (task instanceof Runnable) {
|
|
this.rTask = (Runnable) task;
|
|
@@ -57,7 +57,7 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
}
|
|
this.id = id;
|
|
this.period = period;
|
|
- this.timings = this.isSync() ? SpigotTimings.getPluginTaskTimings(this, period) : null; // Spigot
|
|
+ timings = task != null ? MinecraftTimings.getPluginTaskTimings(this, period) : null; // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -77,11 +77,13 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
|
|
@Override
|
|
public void run() {
|
|
+ if (timings != null && isSync()) timings.startTiming(); // Paper
|
|
if (rTask != null) {
|
|
rTask.run();
|
|
} else {
|
|
cTask.accept(this);
|
|
}
|
|
+ if (timings != null && isSync()) timings.stopTiming(); // Paper
|
|
}
|
|
|
|
long getPeriod() {
|
|
@@ -108,7 +110,7 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
this.next = next;
|
|
}
|
|
|
|
- Class<?> getTaskClass() {
|
|
+ public Class<?> getTaskClass() {
|
|
return (rTask != null) ? rTask.getClass() : ((cTask != null) ? cTask.getClass() : null);
|
|
}
|
|
|
|
@@ -132,9 +134,4 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
|
return true;
|
|
}
|
|
|
|
- // Spigot start
|
|
- public String getTaskName() {
|
|
- return (getTaskClass() == null) ? "Unknown" : getTaskClass().getName();
|
|
- }
|
|
- // Spigot end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java b/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java
|
|
index e52ef47b7..3d90b3426 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java
|
|
@@ -5,6 +5,7 @@ import org.bukkit.util.CachedServerIcon;
|
|
public class CraftIconCache implements CachedServerIcon {
|
|
public final String value;
|
|
|
|
+ public String getData() { return value; } // Paper
|
|
public CraftIconCache(final String value) {
|
|
this.value = value;
|
|
}
|
|
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
|
index c1071c92e..a99c0cea0 100644
|
|
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
|
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
|
@@ -30,7 +30,7 @@ import net.minecraft.server.EntityWither;
|
|
import net.minecraft.server.MathHelper;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.server.World;
|
|
-import org.bukkit.craftbukkit.SpigotTimings;
|
|
+import co.aikar.timings.MinecraftTimings;
|
|
|
|
public class ActivationRange
|
|
{
|
|
@@ -64,8 +64,8 @@ public class ActivationRange
|
|
/**
|
|
* These entities are excluded from Activation range checks.
|
|
*
|
|
- * @param entity
|
|
- * @param world
|
|
+ * @param entity Entity to initialize
|
|
+ * @param config Spigot config to determine ranges
|
|
* @return boolean If it should always tick.
|
|
*/
|
|
public static boolean initializeEntityActivationState(Entity entity, SpigotWorldConfig config)
|
|
@@ -99,7 +99,7 @@ public class ActivationRange
|
|
*/
|
|
public static void activateEntities(World world)
|
|
{
|
|
- SpigotTimings.entityActivationCheckTimer.startTiming();
|
|
+ MinecraftTimings.entityActivationCheckTimer.startTiming();
|
|
final int miscActivationRange = world.spigotConfig.miscActivationRange;
|
|
final int animalActivationRange = world.spigotConfig.animalActivationRange;
|
|
final int monsterActivationRange = world.spigotConfig.monsterActivationRange;
|
|
@@ -133,7 +133,7 @@ public class ActivationRange
|
|
}
|
|
}
|
|
}
|
|
- SpigotTimings.entityActivationCheckTimer.stopTiming();
|
|
+ MinecraftTimings.entityActivationCheckTimer.stopTiming();
|
|
}
|
|
|
|
/**
|
|
@@ -247,10 +247,8 @@ public class ActivationRange
|
|
*/
|
|
public static boolean checkIfActive(Entity entity)
|
|
{
|
|
- SpigotTimings.checkIfActiveTimer.startTiming();
|
|
// Never safe to skip fireworks or entities not yet added to chunk
|
|
if ( !entity.inChunk || entity instanceof EntityFireworks ) {
|
|
- SpigotTimings.checkIfActiveTimer.stopTiming();
|
|
return true;
|
|
}
|
|
|
|
@@ -282,7 +280,6 @@ public class ActivationRange
|
|
{
|
|
isActive = false;
|
|
}
|
|
- SpigotTimings.checkIfActiveTimer.stopTiming();
|
|
return isActive;
|
|
}
|
|
}
|
|
--
|
|
2.20.0
|
|
|