From 9f112f2fbc07a7c948d1d84931fa2cacd6f28055 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 29 Jan 2023 20:32:57 -0500 Subject: [PATCH] Fix splash screen freezing when workers are busy --- .../perf/sync_executor_sleep/SyncExecutorMixin.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/sync_executor_sleep/SyncExecutorMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/sync_executor_sleep/SyncExecutorMixin.java index 3879a442..5a980e59 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/sync_executor_sleep/SyncExecutorMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/sync_executor_sleep/SyncExecutorMixin.java @@ -19,12 +19,19 @@ public class SyncExecutorMixin { /** * Currently FML spins in driveOne while waiting for the modloading workers. We can improve this * by sleeping for 50ms at a time. + * + * Also, render FML splash screen unless there was a new task, rather than only when there was a new task * @author embeddedt * @reason improve CPU efficiency */ - @Inject(method = "driveOne", at = @At("HEAD"), remap = false) - private void sleepWhileNoTasks(CallbackInfoReturnable cir) { - if(tasks.isEmpty()) + @Overwrite(remap = false) + public boolean driveOne() { + final Runnable task = tasks.pollFirst(); + if (task != null) { + task.run(); + } else { LockSupport.parkNanos(PARK_TIME); + } + return task == null; } }