Files
Purpur/patches/server/0106-Add-more-timings-timers.patch
William Blake Galbreath c0c212bf48 Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
b75eeca0 Boost light task priority to ensure it doesnt hold up chunk loads
3d2bc848 Ensure VillagerTrades doesn't load async - fixes #3495
e470f1ef Add more information to Timing Reports
f4a47db6 Improve Thread Pool usage to allow single threads for single cpu servers
a4fe910f Fix sounds when using worldedit regen command
70ad51a8 Updated Upstream (Bukkit/CraftBukkit)
d7cfa4fa Improve legacy format serialization more
2020-06-05 21:42:48 -05:00

225 lines
12 KiB
Diff

From 078370ffd5a5cb03267ec7b44e38fa68501b371a Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sat, 4 Apr 2020 02:36:45 -0500
Subject: [PATCH] Add more timings timers
---
.../co/aikar/timings/MinecraftTimings.java | 22 +++++++++++++++++++
.../minecraft/server/EntityInsentient.java | 14 ++++++++++++
.../net/minecraft/server/EntityLiving.java | 12 ++++++++++
.../server/PathfinderGoalSelector.java | 6 +++++
.../net/minecraft/server/WorldServer.java | 2 ++
5 files changed, 56 insertions(+)
diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java
index 84b1f068ad..fefc2433c6 100644
--- a/src/main/java/co/aikar/timings/MinecraftTimings.java
+++ b/src/main/java/co/aikar/timings/MinecraftTimings.java
@@ -43,6 +43,28 @@ public final class MinecraftTimings {
public static final Timing antiXrayUpdateTimer = Timings.ofSafe("anti-xray - update");
public static final Timing antiXrayObfuscateTimer = Timings.ofSafe("anti-xray - obfuscate");
+ // Purpur start
+ public static final Timing goalCleanup = Timings.ofSafe("PathfinderGoal - Cleanup");
+ public static final Timing goalUpdate = Timings.ofSafe("PathfinderGoal - Update");
+ public static final Timing goalTick = Timings.ofSafe("PathfinderGoal - Tick");
+
+ public static final Timing entityMovementTick = Timings.ofSafe("Entity Movement");
+ public static final Timing entityMovementTickAI = Timings.ofSafe("Entity Movement - AI");
+ public static final Timing entityMovementTickNewAI = Timings.ofSafe("Entity Movement - New AI");
+ public static final Timing entityMovementTickJump = Timings.ofSafe("Entity Movement - Jump");
+ public static final Timing entityMovementTickTravel = Timings.ofSafe("Entity Movement - Travel");
+ public static final Timing entityMovementTickPush = Timings.ofSafe("Entity Movement - Push");
+
+ public static final Timing entityInsentientSensing = Timings.ofSafe("Entity Insentient - Sensing");
+ public static final Timing entityInsentientTargetSelector = Timings.ofSafe("Entity Insentient - TargetSelector");
+ public static final Timing entityInsentientGoalSelector = Timings.ofSafe("Entity Insentient - GoalSelector");
+ public static final Timing entityInsentientNavigation = Timings.ofSafe("Entity Insentient - Navigation");
+ public static final Timing entityInsentientMobTick = Timings.ofSafe("Entity Insentient - MobTick");
+ public static final Timing entityInsentientControls = Timings.ofSafe("Entity Insentient - Controls");
+
+ public static final Timing passengerTick = Timings.ofSafe("Passenger Tick");
+ // Purpur end
+
private static final Map<Class<?>, String> taskNameCache = new MapMaker().weakKeys().makeMap();
private MinecraftTimings() {}
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index 3adc3434e1..eb0befb357 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -1,5 +1,7 @@
package net.minecraft.server;
+import co.aikar.timings.Timing;
+import co.aikar.timings.Timings;
import com.google.common.collect.Maps;
import java.util.Arrays;
import java.util.Iterator;
@@ -676,21 +678,32 @@ public abstract class EntityInsentient extends EntityLiving {
}
// Paper end
this.world.getMethodProfiler().enter("sensing");
+ co.aikar.timings.MinecraftTimings.entityInsentientSensing.startTiming(); // Purpur
this.bw.a();
+ co.aikar.timings.MinecraftTimings.entityInsentientSensing.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("targetSelector");
+ co.aikar.timings.MinecraftTimings.entityInsentientTargetSelector.startTiming(); // Purpur
this.targetSelector.doTick();
+ co.aikar.timings.MinecraftTimings.entityInsentientTargetSelector.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("goalSelector");
+ co.aikar.timings.MinecraftTimings.entityInsentientGoalSelector.startTiming(); // Purpur
this.goalSelector.doTick();
+ co.aikar.timings.MinecraftTimings.entityInsentientGoalSelector.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("navigation");
+ co.aikar.timings.MinecraftTimings.entityInsentientNavigation.startTiming(); // Purpur
this.navigation.c();
+ co.aikar.timings.MinecraftTimings.entityInsentientNavigation.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("mob tick");
+ co.aikar.timings.MinecraftTimings.entityInsentientMobTick.startTiming(); // Purpur
this.mobTick();
+ co.aikar.timings.MinecraftTimings.entityInsentientMobTick.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("controls");
+ co.aikar.timings.MinecraftTimings.entityInsentientControls.startTiming(); // Purpur
this.world.getMethodProfiler().enter("move");
this.moveController.a();
this.world.getMethodProfiler().exitEnter("look");
@@ -698,6 +711,7 @@ public abstract class EntityInsentient extends EntityLiving {
this.world.getMethodProfiler().exitEnter("jump");
this.bq.b();
this.world.getMethodProfiler().exit();
+ co.aikar.timings.MinecraftTimings.entityInsentientControls.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.K();
}
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index e9ef6d00c8..29b60e2879 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -2398,7 +2398,9 @@ public abstract class EntityLiving extends Entity {
}
}
+ MinecraftTimings.entityMovementTick.startTiming(); // Purpur
if (!dead) this.movementTick(); // Purpur
+ MinecraftTimings.entityMovementTick.stopTiming(); // Purpur
double d0 = this.locX() - this.lastX;
double d1 = this.locZ() - this.lastZ;
float f = (float) (d0 * d0 + d1 * d1);
@@ -2605,18 +2607,23 @@ public abstract class EntityLiving extends Entity {
this.setMot(d4, d5, d6);
this.world.getMethodProfiler().enter("ai");
+ co.aikar.timings.MinecraftTimings.entityMovementTickAI.startTiming(); // Purpur
if (this.isFrozen()) {
this.jumping = false;
this.aZ = 0.0F;
this.bb = 0.0F;
} else if (this.doAITick()) {
this.world.getMethodProfiler().enter("newAi");
+ co.aikar.timings.MinecraftTimings.entityMovementTickNewAI.startTiming(); // Purpur
this.doTick();
+ co.aikar.timings.MinecraftTimings.entityMovementTickNewAI.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
}
+ co.aikar.timings.MinecraftTimings.entityMovementTickAI.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("jump");
+ co.aikar.timings.MinecraftTimings.entityMovementTickJump.startTiming(); // Purpur
if (this.jumping) {
if (this.N > 0.0D && (!this.onGround || this.N > 0.4D)) {
this.c(TagsFluid.WATER);
@@ -2632,22 +2639,27 @@ public abstract class EntityLiving extends Entity {
this.jumpTicks = 0;
}
+ co.aikar.timings.MinecraftTimings.entityMovementTickJump.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("travel");
+ co.aikar.timings.MinecraftTimings.entityMovementTickTravel.startTiming(); // Purpur
this.aZ *= 0.98F;
this.bb *= 0.98F;
this.n();
AxisAlignedBB axisalignedbb = this.getBoundingBox();
this.e(new Vec3D((double) this.aZ, (double) this.ba, (double) this.bb));
+ co.aikar.timings.MinecraftTimings.entityMovementTickTravel.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
this.world.getMethodProfiler().enter("push");
+ co.aikar.timings.MinecraftTimings.entityMovementTickPush.startTiming(); // Purpur
if (this.bn > 0) {
--this.bn;
this.a(axisalignedbb, this.getBoundingBox());
}
this.collideNearby();
+ co.aikar.timings.MinecraftTimings.entityMovementTickPush.stopTiming(); // Purpur
this.world.getMethodProfiler().exit();
// Purpur start
if (EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0) {
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
index a68fc11ec6..4b277a6f6d 100644
--- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
+++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
@@ -78,6 +78,7 @@ public class PathfinderGoalSelector {
private static final PathfinderGoal.Type[] PATHFINDER_GOAL_TYPES = PathfinderGoal.Type.values(); // Paper - remove streams from pathfindergoalselector
public void doTick() {
+ co.aikar.timings.MinecraftTimings.goalCleanup.startTiming();
this.e.enter("goalCleanup");
// Paper start - remove streams from pathfindergoalselector
for (Iterator<PathfinderGoalWrapped> iterator = this.d.iterator(); iterator.hasNext();) {
@@ -97,8 +98,10 @@ public class PathfinderGoalSelector {
}
});
+ co.aikar.timings.MinecraftTimings.goalCleanup.stopTiming();
this.e.exit();
this.e.enter("goalUpdate");
+ co.aikar.timings.MinecraftTimings.goalUpdate.startTiming();
// Paper start - remove streams from pathfindergoalselector
goal_update_loop: for (Iterator<PathfinderGoalWrapped> iterator = this.d.iterator(); iterator.hasNext();) {
PathfinderGoalWrapped wrappedGoal = iterator.next();
@@ -141,8 +144,10 @@ public class PathfinderGoalSelector {
wrappedGoal.c();
}
// Paper end - remove streams from pathfindergoalselector
+ co.aikar.timings.MinecraftTimings.goalUpdate.stopTiming();
this.e.exit();
this.e.enter("goalTick");
+ co.aikar.timings.MinecraftTimings.goalTick.startTiming();
// Paper start - remove streams from pathfindergoalselector
for (Iterator<PathfinderGoalWrapped> iterator = this.d.iterator(); iterator.hasNext();) {
PathfinderGoalWrapped wrappedGoal = iterator.next();
@@ -151,6 +156,7 @@ public class PathfinderGoalSelector {
}
}
// Paper end - remove streams from pathfindergoalselector
+ co.aikar.timings.MinecraftTimings.goalTick.stopTiming();
this.e.exit();
}
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 3546424a1c..799dfdf696 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -845,7 +845,9 @@ public class WorldServer extends World {
return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString();
});
gameprofilerfiller.c("tickPassenger");
+ co.aikar.timings.MinecraftTimings.passengerTick.startTiming(); // Purpur
entity1.passengerTick();
+ co.aikar.timings.MinecraftTimings.passengerTick.stopTiming(); // Purpur
gameprofilerfiller.exit();
}
--
2.24.0