fb25dc17c6
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: da08d022 SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN 0cef14e4 Remove draft API from selectEntities CraftBukkit Changes:a46fdbc6
Remove outdated build delay.3697519b
SPIGOT-4708: Fix ExactChoice recipes neglecting material9ead7009
SPIGOT-4677: Add minecraft.admin.command_feedback permissionc3749a23
Remove the Damage tag from items when it is 0.f74c7b95
SPIGOT-4706: Can't interact with active item494eef45
Mention requirement of JIRA ticket for bug fixes51d62dec
SPIGOT-4702: Exception when middle clicking certain slotsbe557e69
SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN
94 Zeilen
4.7 KiB
Diff
94 Zeilen
4.7 KiB
Diff
From 8efbb3a0533a16d6c9e3ac27e41cd03bba1e35d8 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 4 Nov 2016 02:12:10 -0400
|
|
Subject: [PATCH] Chunk Save Stats Debug Option
|
|
|
|
Adds a command line flag to enable stats on how chunk saves are processing.
|
|
|
|
Stats on current queue, how many was processed and how many were queued.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index 9b5908a5b4..2997767282 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -28,6 +28,11 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
public final LongSet unloadQueue = new LongOpenHashSet();
|
|
public final ChunkGenerator<?> chunkGenerator;
|
|
public final IChunkLoader chunkLoader;
|
|
+ // Paper start - chunk save stats
|
|
+ private long lastQueuedSaves = 0L; // Paper
|
|
+ private long lastProcessedSaves = 0L; // Paper
|
|
+ private long lastSaveStatPrinted = System.currentTimeMillis();
|
|
+ // Paper end
|
|
public final Long2ObjectMap<Chunk> chunks = Long2ObjectMaps.synchronize(new ChunkMap(8192));
|
|
private Chunk lastChunk;
|
|
private final ChunkTaskScheduler chunkScheduler;
|
|
@@ -239,6 +244,29 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
// Paper start
|
|
final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProvider().chunkLoader;
|
|
final int queueSize = chunkLoader.getQueueSize();
|
|
+
|
|
+ final long now = System.currentTimeMillis();
|
|
+ final long timeSince = (now - lastSaveStatPrinted) / 1000;
|
|
+ final Integer printRateSecs = Integer.getInteger("printSaveStats");
|
|
+ if (printRateSecs != null && timeSince >= printRateSecs) {
|
|
+ final String timeStr = "/" + timeSince +"s";
|
|
+ final long queuedSaves = chunkLoader.getQueuedSaves();
|
|
+ long queuedDiff = queuedSaves - lastQueuedSaves;
|
|
+ lastQueuedSaves = queuedSaves;
|
|
+
|
|
+ final long processedSaves = chunkLoader.getProcessedSaves();
|
|
+ long processedDiff = processedSaves - lastProcessedSaves;
|
|
+ lastProcessedSaves = processedSaves;
|
|
+
|
|
+ lastSaveStatPrinted = now;
|
|
+ if (processedDiff > 0 || queueSize > 0 || queuedDiff > 0) {
|
|
+ System.out.println("[Chunk Save Stats] " + world.worldData.getName() +
|
|
+ " - Current: " + queueSize +
|
|
+ " - Queued: " + queuedDiff + timeStr +
|
|
+ " - Processed: " +processedDiff + timeStr
|
|
+ );
|
|
+ }
|
|
+ }
|
|
if (!flag && queueSize > world.paperConfig.queueSizeAutoSaveThreshold){
|
|
return false;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
index adfb5d056f..0fc4d9f520 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -156,7 +156,13 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
|
|
}
|
|
|
|
- public int getQueueSize() { return queue.size(); } // Paper
|
|
+ // Paper start
|
|
+ private long queuedSaves = 0;
|
|
+ private final java.util.concurrent.atomic.AtomicLong processedSaves = new java.util.concurrent.atomic.AtomicLong(0L);
|
|
+ public int getQueueSize() { return queue.size(); }
|
|
+ public long getQueuedSaves() { return queuedSaves; }
|
|
+ public long getProcessedSaves() { return processedSaves.longValue(); }
|
|
+ // Paper end
|
|
|
|
// CraftBukkit start - Add async variant, provide compatibility
|
|
@Nullable
|
|
@@ -348,6 +354,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
protected void a(ChunkCoordIntPair chunkcoordintpair, Supplier<NBTTagCompound> nbttagcompound) { // Spigot
|
|
this.saveMap.put(chunkcoordintpair.asLong(), nbttagcompound); // Paper
|
|
queue.add(new QueuedChunk(chunkcoordintpair, nbttagcompound)); // Paper - Chunk queue improvements
|
|
+ queuedSaves++; // Paper
|
|
FileIOThread.a().a(this);
|
|
}
|
|
|
|
@@ -375,6 +382,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
// Paper end
|
|
ChunkCoordIntPair chunkcoordintpair = chunk.coords; // Paper - Chunk queue improvements
|
|
Supplier<NBTTagCompound> nbttagcompound = chunk.compoundSupplier; // Spigot // Paper
|
|
+ processedSaves.incrementAndGet(); // Paper
|
|
|
|
if (nbttagcompound == null) {
|
|
return true;
|
|
--
|
|
2.21.0
|
|
|