use UnconditionalWorker whenever possible

This commit is contained in:
Bixilon 2022-12-23 13:16:03 +01:00
parent 3245ce71ae
commit 7ce26ba406
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 16 additions and 16 deletions

View File

@ -17,9 +17,12 @@ import de.bixilon.kutil.collections.CollectionUtil.lockMapOf
import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf
import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.collections.map.LockMap
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool 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.latch.CountUpAndDownLatch
import de.bixilon.kutil.observer.DataObserver.Companion.observe 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.KeyActions
import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyBinding
import de.bixilon.minosoft.config.key.KeyCodes import de.bixilon.minosoft.config.key.KeyCodes
@ -100,7 +103,7 @@ class EntityRenderer(
override fun prePrepareDraw() { override fun prePrepareDraw() {
val count = AtomicInteger() val count = AtomicInteger()
runAsync { runAsync {
it.entity.draw(TimeUtil.millis) it.entity.draw(millis())
it.update = it.checkUpdate() it.update = it.checkUpdate()
it.prepareAsync() it.prepareAsync()
if (it.visible) { if (it.visible) {
@ -136,17 +139,15 @@ class EntityRenderer(
} }
private fun runAsync(executor: ((EntityModel<*>) -> Unit)) { private fun runAsync(executor: ((EntityModel<*>) -> Unit)) {
val latch = CountUpAndDownLatch(0) val worker = UnconditionalWorker()
models.lock.acquire() models.lock.acquire()
for (model in models.unsafe.values) { for (model in models.unsafe.values) {
latch.inc() worker += UnconditionalTask(ThreadPool.Priorities.HIGH) {
DefaultThreadPool += {
executor(model) executor(model)
latch.dec()
} }
} }
models.lock.release() models.lock.release()
latch.await() worker.work()
} }

View File

@ -14,10 +14,9 @@
package de.bixilon.minosoft.gui.rendering.world.mesh package de.bixilon.minosoft.gui.rendering.world.mesh
import de.bixilon.kotlinglm.vec3.Vec3 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.ThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalTask
import de.bixilon.kutil.latch.CountUpAndDownLatch 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.util.vec.vec3.Vec3Util.EMPTY
import de.bixilon.minosoft.gui.rendering.world.entities.BlockEntityRenderer import de.bixilon.minosoft.gui.rendering.world.entities.BlockEntityRenderer
import de.bixilon.minosoft.util.KUtil.format import de.bixilon.minosoft.util.KUtil.format
@ -58,12 +57,12 @@ class VisibleMeshes(val cameraPosition: Vec3 = Vec3.EMPTY, previous: VisibleMesh
fun sort() { fun sort() {
val latch = CountUpAndDownLatch(4) val worker = UnconditionalWorker()
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { opaque.sortBy { it.distance };latch.dec() } worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { opaque.sortBy { it.distance } }
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { translucent.sortBy { -it.distance };latch.dec() } worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { translucent.sortBy { -it.distance } }
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { transparent.sortBy { it.distance };latch.dec() } worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { transparent.sortBy { it.distance } }
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { text.sortBy { it.distance };latch.dec() } worker += UnconditionalTask(ThreadPool.Priorities.HIGHER) { text.sortBy { it.distance } }
latch.await() worker.work()
} }