Yatopia/patches/server/0049-Improve-task-performance.patch
Ivan Pekov 2b78178637
Updated Upstream and Sidestream(s) (Tuinity/Purpur)
Upstream/An Sidestream has released updates that appears to apply and compile correctly
This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing.

Tuinity Changes:
69e6a4c Updated Upstream (Paper)

Purpur Changes:
391f9ad Updated Upstream (Paper)
2020-12-17 09:48:17 +02:00

78 lines
3.1 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: ishland <ishlandmc@yeah.net>
Date: Sun, 20 Sep 2020 00:05:44 +0800
Subject: [PATCH] Improve task performance
Replace ConcurrentLinkedQueue + LockSupport hack to reduce time
consumption of addTask(R)V
Co-authored-by: Mykyta Komarn <nkomarn@hotmail.com>
diff --git a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java
index 27db247aa40e0516302c74b9bf00c631a8607af5..6f14c97fcc36c0717f72443d620c2383e102ba0f 100644
--- a/src/main/java/net/minecraft/server/IAsyncTaskHandler.java
+++ b/src/main/java/net/minecraft/server/IAsyncTaskHandler.java
@@ -13,9 +13,11 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
private final String b;
private static final Logger LOGGER = LogManager.getLogger();
- private final Queue<R> d = Queues.newConcurrentLinkedQueue();
+ private final java.util.concurrent.BlockingDeque<R> d = new java.util.concurrent.LinkedBlockingDeque<>(); // Yatopia - improve task performance
private int e;
+ private R next = null; // Yatopia - improve task performance - temp storage for next object
+
protected IAsyncTaskHandler(String s) {
this.b = s;
}
@@ -79,7 +81,7 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
public final void addTask(R r0) { a(r0); }; // Paper - OBFHELPER
public void a(R r0) {
this.d.add(r0);
- LockSupport.unpark(this.getThread());
+ // LockSupport.unpark(this.getThread()); // Yatopia - improve task performance - replaced by LinkedBlockingQueue
}
public void execute(Runnable runnable) {
@@ -99,14 +101,18 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
}
protected boolean executeNext() {
- R r0 = this.d.peek(); // Paper - decompile fix
+ if(next == null && !d.isEmpty()) bm(); // Yatopia - Improve task performance
- if (r0 == null) {
+ if (next == null) { // Yatopia - Improve task performance
return false;
- } else if (this.e == 0 && !this.canExecute(r0)) {
+ } else if (this.e == 0 && !this.canExecute(next)) { // Yatopia - Improve task performance
return false;
} else {
- this.executeTask(this.d.remove()); // Paper - decompile fix
+ // Yatopia start - Improve task performance
+ R r = next;
+ next = null;
+ this.executeTask(r); // Paper - decompile fix
+ // Yatopia end
return true;
}
}
@@ -127,8 +133,17 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
}
protected void bm() {
+ // Yatopia start - replaced logic
+ /*
Thread.yield();
LockSupport.parkNanos("waiting for tasks", 100000L);
+ */
+ next = null;
+ try {
+ next = d.poll(100, java.util.concurrent.TimeUnit.MICROSECONDS);
+ } catch (InterruptedException ignored) {
+ }
+ // Yatopia end
}
protected void executeTask(R r0) {