Remove some reflection from QueueHandler

This commit is contained in:
MattBDev 2020-01-29 14:33:41 -05:00
parent cb6359f010
commit 7d4acbdcac

View File

@ -2,26 +2,19 @@ package com.boydti.fawe.bukkit.adapter;
import static org.slf4j.LoggerFactory.getLogger; import static org.slf4j.LoggerFactory.getLogger;
import co.aikar.timings.Timings;
import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.beta.implementation.queue.QueueHandler;
import com.boydti.fawe.bukkit.listener.ChunkListener; import com.boydti.fawe.bukkit.listener.ChunkListener;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import org.spigotmc.AsyncCatcher;
public class BukkitQueueHandler extends QueueHandler { public class BukkitQueueHandler extends QueueHandler {
private volatile boolean timingsEnabled; private volatile boolean timingsEnabled;
private static boolean alertTimingsChange = true; private static boolean alertTimingsChange = true;
private static Field fieldTimingsEnabled;
private static Field fieldAsyncCatcherEnabled;
private static Method methodCheck; private static Method methodCheck;
static { static {
try { try {
fieldAsyncCatcherEnabled = Class.forName("org.spigotmc.AsyncCatcher").getField("enabled");
fieldAsyncCatcherEnabled.setAccessible(true);
} catch (Throwable ignore) {}
try {
fieldTimingsEnabled = Class.forName("co.aikar.timings.Timings").getDeclaredField("timingsEnabled");
fieldTimingsEnabled.setAccessible(true);
methodCheck = Class.forName("co.aikar.timings.TimingsManager").getDeclaredMethod("recheckEnabled"); methodCheck = Class.forName("co.aikar.timings.TimingsManager").getDeclaredMethod("recheckEnabled");
methodCheck.setAccessible(true); methodCheck.setAccessible(true);
} catch (Throwable ignore){} } catch (Throwable ignore){}
@ -32,19 +25,15 @@ public class BukkitQueueHandler extends QueueHandler {
ChunkListener.physicsFreeze = true; ChunkListener.physicsFreeze = true;
if (parallel) { if (parallel) {
try { try {
if (fieldAsyncCatcherEnabled != null) { AsyncCatcher.enabled = false;
fieldAsyncCatcherEnabled.set(null, false); timingsEnabled = Timings.isTimingsEnabled();
} if (timingsEnabled) {
if (fieldTimingsEnabled != null) { if (alertTimingsChange) {
timingsEnabled = (boolean) fieldTimingsEnabled.get(null); alertTimingsChange = false;
if (timingsEnabled) { getLogger(BukkitQueueHandler.class).debug("Having `parallel-threads` > 1 interferes with the timings.");
if (alertTimingsChange) {
alertTimingsChange = false;
getLogger(BukkitQueueHandler.class).debug("Having `parallel-threads` > 1 interferes with the timings.");
}
fieldTimingsEnabled.set(null, false);
methodCheck.invoke(null);
} }
Timings.setTimingsEnabled(false);
methodCheck.invoke(null);
} }
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
@ -57,11 +46,9 @@ public class BukkitQueueHandler extends QueueHandler {
ChunkListener.physicsFreeze = false; ChunkListener.physicsFreeze = false;
if (parallel) { if (parallel) {
try { try {
if (fieldAsyncCatcherEnabled != null) { AsyncCatcher.enabled = true;
fieldAsyncCatcherEnabled.set(null, true); if (timingsEnabled) {
} Timings.setTimingsEnabled(true);
if (fieldTimingsEnabled != null && timingsEnabled) {
fieldTimingsEnabled.set(null, true);
methodCheck.invoke(null); methodCheck.invoke(null);
} }
} catch (Throwable e) { } catch (Throwable e) {