diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt index fbe4167d..b3160ffc 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/ExecutionSpinner.kt @@ -46,9 +46,11 @@ class ExecutionSpinner(private val waiter: Runnable, private val spinner: Boolea } private fun timeUntilNextFrame(): Long { - return Starbound.TIMESTEP_NANOS - (System.nanoTime() - lastRender) - frameRenderTime + return Starbound.TIMESTEP_NANOS - (System.nanoTime() - lastRender) - frameRenderTime - compensate } + private var compensate = 0L + private var carrier: Thread? = null @Volatile private var isPaused = false @@ -77,17 +79,11 @@ class ExecutionSpinner(private val waiter: Runnable, private val spinner: Boolea while (diff > 0L) { waiter.run() diff = timeUntilNextFrame() - - if (PRECISE_WAIT) { - if (diff >= SYSTEM_SCHEDULER_RESOLUTION * 2L) - LockSupport.parkNanos(diff - SYSTEM_SCHEDULER_RESOLUTION) - else if (diff > SYSTEM_SCHEDULER_RESOLUTION) - LockSupport.parkNanos(SYSTEM_SCHEDULER_RESOLUTION) - } else { - LockSupport.parkNanos(diff) - } + LockSupport.parkNanos(diff) } + compensate = -diff + val mark = System.nanoTime() val result = spinner.asBoolean frameRenderTime = System.nanoTime() - mark @@ -103,7 +99,6 @@ class ExecutionSpinner(private val waiter: Runnable, private val spinner: Boolea } companion object { - private const val PRECISE_WAIT = false private val LOGGER = LogManager.getLogger() private var SYSTEM_SCHEDULER_RESOLUTION = 1_000_000L