From 7ce26ba40663c77a41e7ac5f932fb55f614ec261 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 23 Dec 2022 13:16:03 +0100 Subject: [PATCH] use UnconditionalWorker whenever possible --- .../gui/rendering/entity/EntityRenderer.kt | 15 ++++++++------- .../gui/rendering/world/mesh/VisibleMeshes.kt | 17 ++++++++--------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt index 8abf49ff7..bbb8c5ccb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entity/EntityRenderer.kt @@ -17,9 +17,12 @@ import de.bixilon.kutil.collections.CollectionUtil.lockMapOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.concurrent.pool.DefaultThreadPool +import de.bixilon.kutil.concurrent.pool.ThreadPool +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalTask +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.observer.DataObserver.Companion.observe -import de.bixilon.kutil.time.TimeUtil +import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.minosoft.config.key.KeyActions import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyCodes @@ -100,7 +103,7 @@ class EntityRenderer( override fun prePrepareDraw() { val count = AtomicInteger() runAsync { - it.entity.draw(TimeUtil.millis) + it.entity.draw(millis()) it.update = it.checkUpdate() it.prepareAsync() if (it.visible) { @@ -136,17 +139,15 @@ class EntityRenderer( } private fun runAsync(executor: ((EntityModel<*>) -> Unit)) { - val latch = CountUpAndDownLatch(0) + val worker = UnconditionalWorker() models.lock.acquire() for (model in models.unsafe.values) { - latch.inc() - DefaultThreadPool += { + worker += UnconditionalTask(ThreadPool.Priorities.HIGH) { executor(model) - latch.dec() } } models.lock.release() - latch.await() + worker.work() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/VisibleMeshes.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/VisibleMeshes.kt index 162964282..21805a5f2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/VisibleMeshes.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/VisibleMeshes.kt @@ -14,10 +14,9 @@ package de.bixilon.minosoft.gui.rendering.world.mesh import de.bixilon.kotlinglm.vec3.Vec3 -import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable -import de.bixilon.kutil.latch.CountUpAndDownLatch +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalTask +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY import de.bixilon.minosoft.gui.rendering.world.entities.BlockEntityRenderer import de.bixilon.minosoft.util.KUtil.format @@ -58,12 +57,12 @@ class VisibleMeshes(val cameraPosition: Vec3 = Vec3.EMPTY, previous: VisibleMesh fun sort() { - val latch = CountUpAndDownLatch(4) - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { opaque.sortBy { it.distance };latch.dec() } - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { translucent.sortBy { -it.distance };latch.dec() } - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { transparent.sortBy { it.distance };latch.dec() } - DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { text.sortBy { it.distance };latch.dec() } - latch.await() + val worker = UnconditionalWorker() + worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { opaque.sortBy { it.distance } } + worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { translucent.sortBy { -it.distance } } + worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { transparent.sortBy { it.distance } } + worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { text.sortBy { it.distance } } + worker.work() }