Boost light task priority to ensure it doesnt hold up chunk loads
Run urgent as 2 so urgent light can run as 1 (light run at chunk -1 for loading purposes)
This commit is contained in:
@@ -142,13 +142,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
ArraySetSorted<Ticket<?>> arraysetsorted = this.e(i);
|
ArraySetSorted<Ticket<?>> arraysetsorted = this.e(i);
|
||||||
int j = a(arraysetsorted);
|
int j = a(arraysetsorted);
|
||||||
Ticket<?> ticket1 = (Ticket) arraysetsorted.a(ticket); // CraftBukkit - decompile error
|
Ticket<?> ticket1 = (Ticket) arraysetsorted.a(ticket); // CraftBukkit - decompile error
|
||||||
|
|
||||||
ticket1.a(this.currentTick);
|
|
||||||
- if (ticket.b() < j) {
|
|
||||||
+ if (ticket.getTicketLevel() < j) {
|
|
||||||
this.e.b(i, ticket.b(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
@@ -0,0 +0,0 @@ public abstract class ChunkMapDistance {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,11 +156,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ public static final int PRIORITY_TICKET_LEVEL = 33;
|
+ public static final int PRIORITY_TICKET_LEVEL = 33;
|
||||||
|
+ public static final int URGENT_PRIORITY = 29;
|
||||||
+ public boolean markUrgent(ChunkCoordIntPair coords) {
|
+ public boolean markUrgent(ChunkCoordIntPair coords) {
|
||||||
+ return addPriorityTicket(coords, TicketType.URGENT, 30);
|
+ return addPriorityTicket(coords, TicketType.URGENT, URGENT_PRIORITY);
|
||||||
+ }
|
+ }
|
||||||
+ public boolean markHighPriority(ChunkCoordIntPair coords, int priority) {
|
+ public boolean markHighPriority(ChunkCoordIntPair coords, int priority) {
|
||||||
+ priority = Math.min(28, Math.max(1, priority));
|
+ priority = Math.min(URGENT_PRIORITY - 1, Math.max(1, priority));
|
||||||
+ return addPriorityTicket(coords, TicketType.PRIORITY, priority);
|
+ return addPriorityTicket(coords, TicketType.PRIORITY, priority);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@@ -221,7 +215,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ }
|
+ }
|
||||||
+ for (Ticket<?> ticket : tickets) {
|
+ for (Ticket<?> ticket : tickets) {
|
||||||
+ if (ticket.getTicketType() == TicketType.URGENT) {
|
+ if (ticket.getTicketType() == TicketType.URGENT) {
|
||||||
+ return 30;
|
+ return URGENT_PRIORITY;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ for (Ticket<?> ticket : tickets) {
|
+ for (Ticket<?> ticket : tickets) {
|
||||||
@@ -409,7 +403,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
- this.a(chunkcoordintpair.x, chunkcoordintpair.z, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> {
|
- this.a(chunkcoordintpair.x, chunkcoordintpair.z, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> {
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ IntSupplier defSupplier = this.d.c(chunkcoordintpair.pair());
|
+ IntSupplier defSupplier = this.d.c(chunkcoordintpair.pair());
|
||||||
+ IntSupplier priority = () -> Math.max(defSupplier.getAsInt() - (flag ? 2 : 0), 1);
|
+ IntSupplier priority = () -> Math.max(defSupplier.getAsInt() - 1, 1);
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
+ this.a(chunkcoordintpair.x, chunkcoordintpair.z, priority, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { // Paper - boost light priority
|
+ this.a(chunkcoordintpair.x, chunkcoordintpair.z, priority, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { // Paper - boost light priority
|
||||||
ChunkSection[] achunksection = ichunkaccess.getSections();
|
ChunkSection[] achunksection = ichunkaccess.getSections();
|
||||||
@@ -481,8 +475,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private int getMyPriority() {
|
+ private int getMyPriority() {
|
||||||
+ if (priorityBoost == 30) {
|
+ if (priorityBoost == ChunkMapDistance.URGENT_PRIORITY) {
|
||||||
+ return 1; // Urgent - ticket level isn't always 31 so 33-30 = 3
|
+ return 2; // Urgent - ticket level isn't always 31 so 33-30 = 3, but allow 1 more tasks to go below this for dependents
|
||||||
+ }
|
+ }
|
||||||
+ int basePriority = ticketLevel - priorityBoost;
|
+ int basePriority = ticketLevel - priorityBoost;
|
||||||
+ if (ticketLevel >= 33 && priorityBoost == 0 && (neighborPriority >= 34 || neighborPriorities.isEmpty())) {
|
+ if (ticketLevel >= 33 && priorityBoost == 0 && (neighborPriority >= 34 || neighborPriorities.isEmpty())) {
|
||||||
@@ -555,15 +549,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ if (getCurrentPriority() != getDemandedPriority()) this.chunkMap.queueHolderUpdate(this);
|
+ if (getCurrentPriority() != getDemandedPriority()) this.chunkMap.queueHolderUpdate(this);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ public final double getDistanceFromPointInFront(EntityPlayer player, int dist) {
|
|
||||||
+ int inFront = dist * 16;
|
|
||||||
+ final float yaw = MCUtil.normalizeYaw(player.yaw);
|
|
||||||
+ double rads = Math.toRadians(yaw);
|
|
||||||
+ final double x = player.locX() + inFront * Math.cos(rads);
|
|
||||||
+ final double z = player.locZ() + inFront * Math.sin(rads);
|
|
||||||
+ return getDistance(x, z);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public final double getDistance(EntityPlayer player) {
|
+ public final double getDistance(EntityPlayer player) {
|
||||||
+ return getDistance(player.locX(), player.locZ());
|
+ return getDistance(player.locX(), player.locZ());
|
||||||
+ }
|
+ }
|
||||||
@@ -751,7 +736,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
// Paper end - no-tick view distance
|
// Paper end - no-tick view distance
|
||||||
}
|
}
|
||||||
+ // Paper start - Chunk Prioritization
|
+ // Paper start - Chunk Prioritization
|
||||||
+ private static final int[][] neighborMatrix = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
|
||||||
+ public void queueHolderUpdate(PlayerChunk playerchunk) {
|
+ public void queueHolderUpdate(PlayerChunk playerchunk) {
|
||||||
+ Runnable runnable = () -> {
|
+ Runnable runnable = () -> {
|
||||||
+ if (isUnloading(playerchunk)) {
|
+ if (isUnloading(playerchunk)) {
|
||||||
@@ -831,7 +815,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+
|
+
|
||||||
+ // Prioritize immediate
|
+ // Prioritize immediate
|
||||||
+ if (dist <= dist3Sq) {
|
+ if (dist <= dist3Sq) {
|
||||||
+ chunkDistanceManager.markHighPriority(coord, (int) (28 - dist));
|
+ chunkDistanceManager.markHighPriority(coord, (int) (27 - dist));
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
|||||||
Reference in New Issue
Block a user