From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MrHua269 Date: Fri, 2 Aug 2024 22:22:18 +0800 Subject: [PATCH] Try optimizing the task dispatching diff --git a/src/main/java/ca/spottedleaf/concurrentutil/scheduler/SchedulerThreadPool.java b/src/main/java/ca/spottedleaf/concurrentutil/scheduler/SchedulerThreadPool.java index 8197ccb1c4e5878dbd8007b5fb514640765ec8e4..81db3c6f330729cb353b198badc86fe29e76bafc 100644 --- a/src/main/java/ca/spottedleaf/concurrentutil/scheduler/SchedulerThreadPool.java +++ b/src/main/java/ca/spottedleaf/concurrentutil/scheduler/SchedulerThreadPool.java @@ -366,6 +366,12 @@ public class SchedulerThreadPool { "scheduled_state=" + this.scheduled.get() + "," + "}"; } + + // Luminol start + protected boolean flushExtraTask(){ + return false; + } + // Luminol end } private static final class TickThreadRunner implements Runnable { @@ -526,7 +532,7 @@ public class SchedulerThreadPool { if (diff <= 0L) { break; } - LockSupport.parkNanos(startState, diff); + if (!me.earthme.luminol.config.modules.experiment.ExtraOptimizationConfig.enabled || !startStateTask.flushExtraTask()) LockSupport.parkNanos(startState, 1_000); // Luminol - Optimize task dispatching if (this.scheduler.halted) { return; } diff --git a/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java b/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java index ce388e0ef231d7d73f75f5778c58eb40f6402f0f..7f8473a6db78dc652e0ccfdb7cc038126f1e61ea 100644 --- a/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java +++ b/src/main/java/io/papermc/paper/threadedregions/ThreadedRegionizer.java @@ -682,7 +682,7 @@ public final class ThreadedRegionizer> sectionByKey = new Long2ReferenceOpenHashMap<>(); private final ReferenceOpenHashSet> deadSections = new ReferenceOpenHashSet<>(); diff --git a/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java b/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java index a18da3f3f245031f0547efe9b52a1f2a219ef04a..5e390b2b88d3028f2b2eb07432a9b2a1b2851a3e 100644 --- a/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java +++ b/src/main/java/io/papermc/paper/threadedregions/TickRegionScheduler.java @@ -354,6 +354,47 @@ public final class TickRegionScheduler { return !this.markNotTicking() || this.cancelled.get() ? null : Boolean.valueOf(ret); } + @Override + public boolean flushExtraTask(){ + if (this.cancelled.get()) { + return false; + } + + if (!this.tryMarkTicking()) { + return false; + } + + if (this.cancelled.get()) { + this.markNotTicking(); + return false; + } + + if (this.region != null) { + TickRegionScheduler.setTickingRegion(this.region.region); + } + + try { + if (this.region == null){ + return false; + } + + if (this.region.region.getData().getTaskQueueData().executeChunkTask()){ + return true; + } + + if (this.region.region.getData().getTaskQueueData().executeTickTask()){ + return true; + } + }finally { + this.markNotTicking(); + if (this.region != null) { + TickRegionScheduler.setTickingRegion(null); + } + } + + return false; + } + @Override public final boolean runTick() { // Remember, we are supposed use setScheduledStart if we return true here, otherwise diff --git a/src/main/java/me/earthme/luminol/config/modules/experiment/ExtraOptimizationConfig.java b/src/main/java/me/earthme/luminol/config/modules/experiment/ExtraOptimizationConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..d908123da05c620586a1defcead423cc519113e9 --- /dev/null +++ b/src/main/java/me/earthme/luminol/config/modules/experiment/ExtraOptimizationConfig.java @@ -0,0 +1,20 @@ +package me.earthme.luminol.config.modules.experiment; + +import me.earthme.luminol.config.ConfigInfo; +import me.earthme.luminol.config.EnumConfigCategory; +import me.earthme.luminol.config.IConfigModule; + +public class ExtraOptimizationConfig implements IConfigModule { + @ConfigInfo(baseName = "enabled") + public static boolean enabled = false; + + @Override + public EnumConfigCategory getCategory() { + return EnumConfigCategory.EXPERIMENT; + } + + @Override + public String getBaseName() { + return "run_extra_tasks_during_waiting"; + } +}