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;
}
}