2020-10-04 17:25:36 +02:00
|
|
|
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
|
2020-10-06 16:47:23 +02:00
|
|
|
index 5df6be7e8d9b1295ed0700b3be90c3778fc7d77c..cbc03b8bc34e244c08a85bfd681707a49d1046f9 100644
|
2020-10-04 17:25:36 +02:00
|
|
|
--- 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) {
|
2020-10-06 16:47:23 +02:00
|
|
|
@@ -99,14 +101,18 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
|
2020-10-04 17:25:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected boolean executeNext() {
|
|
|
|
- R r0 = this.d.peek(); // Paper - decompile fix
|
|
|
|
+ if(next == null && !d.isEmpty()) bl(); // 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
|
2020-10-06 16:47:23 +02:00
|
|
|
+ // Yatopia start - Improve task performance
|
|
|
|
+ R r = next;
|
|
|
|
+ next = null;
|
|
|
|
+ this.executeTask(r); // Paper - decompile fix
|
|
|
|
+ // Yatopia end
|
2020-10-04 17:25:36 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
2020-10-06 16:47:23 +02:00
|
|
|
@@ -127,8 +133,16 @@ public abstract class IAsyncTaskHandler<R extends Runnable> implements Mailbox<R
|
2020-10-04 17:25:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected void bl() {
|
|
|
|
+ // 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) {
|