bump kutil

This speeds up loading a lot, it uses ConcurrentIterator instead of ConcurrentSpliterator for model baking
This commit is contained in:
Moritz Zwerger 2023-12-13 19:48:31 +01:00
parent 81b1241563
commit de30a0cc48
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 16 additions and 20 deletions

View File

@ -17,5 +17,5 @@ lwjgl.version=3.3.3
ikonli.version=12.3.1
netty.version=4.1.101.Final
jackson.version=2.16.0
kutil.version=1.24.6
kutil.version=1.25.0
glm.version=0.9.9.1-12

View File

@ -14,7 +14,7 @@
package de.bixilon.minosoft.data.world.chunk.manager
import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkUtil.isInViewDistance
import java.util.*
@ -24,10 +24,9 @@ class ChunkTicker(val manager: ChunkManager) {
fun tick(simulationDistance: Int, cameraPosition: Vec2i) {
val iterator = ConcurrentIterator(manager.chunks.unsafe.entries.spliterator(), priority = ThreadPool.HIGH)
iterator.iterate {
manager.chunks.unsafe.entries.async(priority = ThreadPool.HIGH) {
if (!it.key.isInViewDistance(simulationDistance, cameraPosition)) {
return@iterate
return@async
}
it.value.tick(manager.world.connection, it.key, random)
}

View File

@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.world.entities
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.data.entities.entities.LivingEntity
@ -48,10 +48,9 @@ class EntityTicker(val entities: WorldEntities) {
fun tick() {
val iterator = ConcurrentIterator(entities.entities.spliterator(), priority = ThreadPool.HIGH)
iterator.iterate {
entities.entities.async(priority = ThreadPool.HIGH) {
if (it.attachment.vehicle != null) {
return@iterate
return@async
}
tickEntity(it)
}

View File

@ -14,8 +14,8 @@
package de.bixilon.minosoft.gui.rendering.entities
import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
import de.bixilon.kutil.collections.map.LockMap
import de.bixilon.kutil.collections.spliterator.async.ConcurrentSpliterator
import de.bixilon.kutil.concurrent.lock.simple.SimpleLock
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.kutil.exception.ExceptionUtil.ignoreAll
@ -97,7 +97,7 @@ class EntityRendererManager(val renderer: EntitiesRenderer) : Iterable<EntityRen
fun iterate(executor: ((EntityRenderer<*>) -> Unit)) {
lock.acquire()
ConcurrentIterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor)
ConcurrentSpliterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor)
lock.release()
}
}

View File

@ -14,7 +14,7 @@
package de.bixilon.minosoft.gui.rendering.models.loader
import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
import de.bixilon.kutil.collections.map.LockMap
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.kutil.latch.AbstractLatch
@ -71,16 +71,15 @@ class BlockLoader(private val loader: ModelLoader) {
}
fun load(latch: AbstractLatch?) {
val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator
iterator.iterate {
if (it.model != null) return@iterate // model already set
loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) {
if (it.model != null) return@async // model already set
val prototype: BlockModelPrototype
try {
prototype = loadState(it) ?: return@iterate
prototype = loadState(it) ?: return@async
} catch (error: Exception) {
Log.log(LogMessageType.RENDERING, LogLevels.WARN) { "Can not load block model for block $it: $error" }
Log.log(LogMessageType.RENDERING, LogLevels.VERBOSE) { error }
return@iterate
return@async
}
it.model = prototype
@ -89,9 +88,8 @@ class BlockLoader(private val loader: ModelLoader) {
fun bake(latch: AbstractLatch?) {
val context = loader.context
val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator
iterator.iterate {
val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@iterate
loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) {
val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@async
it.model = null
prototype.bake(context, it)