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.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()
}

View File

@ -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()
}