attempt to execute task on #get to minimize blocking

This commit is contained in:
Jason Penilla
2024-10-22 13:09:21 -07:00
parent e69eeba47c
commit b5b6e38cb7

View File

@@ -1,9 +1,11 @@
package ca.spottedleaf.moonrise.mixin.render; package ca.spottedleaf.moonrise.mixin.render;
import ca.spottedleaf.concurrentutil.executor.PrioritisedExecutor;
import ca.spottedleaf.concurrentutil.executor.thread.PrioritisedThreadPool; import ca.spottedleaf.concurrentutil.executor.thread.PrioritisedThreadPool;
import ca.spottedleaf.concurrentutil.util.Priority; import ca.spottedleaf.concurrentutil.util.Priority;
import ca.spottedleaf.moonrise.common.util.MoonriseCommon; import ca.spottedleaf.moonrise.common.util.MoonriseCommon;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import net.minecraft.client.renderer.SectionOcclusionGraph; import net.minecraft.client.renderer.SectionOcclusionGraph;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -33,11 +35,22 @@ abstract class SectionOcclusionGraphMixin {
) )
) )
private CompletableFuture<Void> changeExecutor(final Runnable runnable, final Executor executor) { private CompletableFuture<Void> changeExecutor(final Runnable runnable, final Executor executor) {
return CompletableFuture.runAsync( final PrioritisedExecutor.PrioritisedTask[] prioritisedTask = new PrioritisedExecutor.PrioritisedTask[1];
runnable, final CompletableFuture<Void> future = new CompletableFuture<>() {
(final Runnable task) -> { @Override
SECTION_OCCLUSION_EXECUTOR.queueTask(task, Priority.NORMAL); public Void get() throws InterruptedException, ExecutionException {
prioritisedTask[0].execute();
return super.get();
} }
); };
prioritisedTask[0] = SECTION_OCCLUSION_EXECUTOR.queueTask(() -> {
try {
runnable.run();
future.complete(null);
} catch (final Throwable throwable) {
future.completeExceptionally(throwable);
}
}, Priority.NORMAL);
return future;
} }
} }