From cae0a89ea2452a59e990fcb4b37d1cdb0a3a96a7 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 4 Feb 2024 20:36:22 +0700 Subject: [PATCH] Slightly more efficient spinning --- .../ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt index 7c9f7e45..43dd1b84 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt @@ -56,7 +56,11 @@ class ExecutionSpinner(private val executor: MailboxExecutorService, private val while (diff > 0L) { executor.executeQueuedTasks() diff = timeUntilNextFrame() - if (diff > SYSTEM_SCHEDULER_RESOLUTION) LockSupport.parkNanos(500_000L) + + if (diff >= SYSTEM_SCHEDULER_RESOLUTION * 2L) + LockSupport.parkNanos(diff - SYSTEM_SCHEDULER_RESOLUTION) + else if (diff > SYSTEM_SCHEDULER_RESOLUTION) + LockSupport.parkNanos(SYSTEM_SCHEDULER_RESOLUTION) } val mark = System.nanoTime() @@ -96,7 +100,7 @@ class ExecutionSpinner(private val executor: MailboxExecutorService, private val bindings.NtQueryTimerResolution(minimum, maximum, current) - SYSTEM_SCHEDULER_RESOLUTION = current[0] * 150L // give some room for error + SYSTEM_SCHEDULER_RESOLUTION = current[0] * 100L LOGGER.info("NtQueryTimerResolution(): {} ns/{} ns/{} ns min/max/current", minimum[0] * 100L, maximum[0] * 100L, current[0] * 100L) } }