From cad6fa8d2b8511a1b7006d5a60848b9409e52063 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 10 Oct 2022 18:01:02 +0200 Subject: [PATCH] bump kutil and kotlin * This fixes some bugs and improves performance --- pom.xml | 4 +- src/main/java/de/bixilon/minosoft/Minosoft.kt | 38 +++++----- .../data/registries/registries/Registries.kt | 74 +++++++++---------- .../de/bixilon/minosoft/data/world/World.kt | 12 +-- .../minosoft/data/world/WorldEntities.kt | 8 +- .../rendering/particle/ParticleRenderer.kt | 8 +- .../renderer/renderer/RendererManager.kt | 14 ++-- .../gui/rendering/world/WorldRenderer.kt | 10 +-- .../network/connection/play/PlayConnection.kt | 8 +- .../pipeline/compression/PacketInflater.kt | 2 +- .../data/world/chunk/light/LightBenchmark.kt | 2 +- .../util/benchmark/BenchmarkResult.kt | 32 -------- .../minosoft/util/benchmark/BenchmarkUtil.kt | 33 --------- 13 files changed, 90 insertions(+), 155 deletions(-) delete mode 100644 src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkResult.kt delete mode 100644 src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkUtil.kt diff --git a/pom.xml b/pom.xml index ffbb7983f..2c5e6add3 100644 --- a/pom.xml +++ b/pom.xml @@ -299,7 +299,7 @@ 11 ${maven.compiler.source} 19 - 1.7.10 + 1.7.20 3.3.1 12.3.1 4.1.82.Final @@ -510,7 +510,7 @@ de.bixilon kutil - 1.16 + 1.17 io.netty diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index da4192543..8f337f42e 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -15,14 +15,14 @@ package de.bixilon.minosoft import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +import de.bixilon.kutil.concurrent.worker.task.TaskWorker +import de.bixilon.kutil.concurrent.worker.task.WorkerTask import de.bixilon.kutil.file.watcher.FileWatcherService import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.os.OSTypes import de.bixilon.kutil.os.PlatformInfo import de.bixilon.kutil.reflection.ReflectionUtil.forceInit -import de.bixilon.kutil.time.TimeUtil +import de.bixilon.kutil.time.TimeUtil.nanos import de.bixilon.kutil.unit.UnitFormatter.formatNanos import de.bixilon.minosoft.assets.file.ResourcesAssetsUtil import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties @@ -67,7 +67,7 @@ object Minosoft { @JvmStatic fun main(args: Array) { - val start = TimeUtil.nanos + val start = nanos() Log::class.java.forceInit() CommandLineArguments.parse(args) KUtil.initUtilClasses() @@ -80,39 +80,39 @@ object Minosoft { val taskWorker = TaskWorker(criticalErrorHandler = { _, exception -> exception.crash() }) - taskWorker += Task(identifier = BootTasks.CLI, priority = ThreadPool.HIGH, executor = CLI::startThread) + taskWorker += WorkerTask(identifier = BootTasks.CLI, priority = ThreadPool.HIGH, executor = CLI::startThread) - taskWorker += Task(identifier = BootTasks.PACKETS, priority = ThreadPool.HIGH, executor = PacketTypeRegistry::init) - taskWorker += Task(identifier = BootTasks.VERSIONS, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.PACKETS), executor = Versions::load) - taskWorker += Task(identifier = BootTasks.PROFILES, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.VERSIONS), executor = GlobalProfileManager::initialize) - taskWorker += Task(identifier = BootTasks.FILE_WATCHER, priority = ThreadPool.HIGH, optional = true, executor = this::startFileWatcherService) + taskWorker += WorkerTask(identifier = BootTasks.PACKETS, priority = ThreadPool.HIGH, executor = PacketTypeRegistry::init) + taskWorker += WorkerTask(identifier = BootTasks.VERSIONS, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.PACKETS), executor = Versions::load) + taskWorker += WorkerTask(identifier = BootTasks.PROFILES, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.VERSIONS), executor = GlobalProfileManager::initialize) + taskWorker += WorkerTask(identifier = BootTasks.FILE_WATCHER, priority = ThreadPool.HIGH, optional = true, executor = this::startFileWatcherService) - taskWorker += Task(identifier = BootTasks.LANGUAGE_FILES, dependencies = arrayOf(BootTasks.PROFILES), executor = this::loadLanguageFiles) - taskWorker += Task(identifier = BootTasks.ASSETS_PROPERTIES, dependencies = arrayOf(BootTasks.PROFILES), executor = AssetsVersionProperties::load) - taskWorker += Task(identifier = BootTasks.DEFAULT_REGISTRIES, dependencies = arrayOf(BootTasks.PROFILES), executor = DefaultRegistries::load) + taskWorker += WorkerTask(identifier = BootTasks.LANGUAGE_FILES, dependencies = arrayOf(BootTasks.PROFILES), executor = this::loadLanguageFiles) + taskWorker += WorkerTask(identifier = BootTasks.ASSETS_PROPERTIES, dependencies = arrayOf(BootTasks.PROFILES), executor = AssetsVersionProperties::load) + taskWorker += WorkerTask(identifier = BootTasks.DEFAULT_REGISTRIES, dependencies = arrayOf(BootTasks.PROFILES), executor = DefaultRegistries::load) - taskWorker += Task(identifier = BootTasks.LAN_SERVERS, dependencies = arrayOf(BootTasks.PROFILES), executor = LANServerListener::listen) + taskWorker += WorkerTask(identifier = BootTasks.LAN_SERVERS, dependencies = arrayOf(BootTasks.PROFILES), executor = LANServerListener::listen) if (!RunConfiguration.DISABLE_EROS) { - taskWorker += Task(identifier = BootTasks.JAVAFX, executor = { JavaFXInitializer.start() }) + taskWorker += WorkerTask(identifier = BootTasks.JAVAFX, executor = { JavaFXInitializer.start() }) DefaultThreadPool += { javafx.scene.text.Font::class.java.forceInit() } - taskWorker += Task(identifier = BootTasks.X_START_ON_FIRST_THREAD_WARNING, executor = { XStartOnFirstThreadWarning.show() }, dependencies = arrayOf(BootTasks.LANGUAGE_FILES, BootTasks.JAVAFX)) + taskWorker += WorkerTask(identifier = BootTasks.X_START_ON_FIRST_THREAD_WARNING, executor = { XStartOnFirstThreadWarning.show() }, dependencies = arrayOf(BootTasks.LANGUAGE_FILES, BootTasks.JAVAFX)) - taskWorker += Task(identifier = BootTasks.STARTUP_PROGRESS, executor = { StartingDialog(BOOT_LATCH).show() }, dependencies = arrayOf(BootTasks.LANGUAGE_FILES, BootTasks.JAVAFX)) + taskWorker += WorkerTask(identifier = BootTasks.STARTUP_PROGRESS, executor = { StartingDialog(BOOT_LATCH).show() }, dependencies = arrayOf(BootTasks.LANGUAGE_FILES, BootTasks.JAVAFX)) Eros::class.java.forceInit() } - taskWorker += Task(identifier = BootTasks.YGGDRASIL, executor = { YggdrasilUtil.load() }) + taskWorker += WorkerTask(identifier = BootTasks.YGGDRASIL, executor = { YggdrasilUtil.load() }) - taskWorker += Task(identifier = BootTasks.ASSETS_OVERRIDE, executor = { OVERRIDE_ASSETS_MANAGER.load(it) }) + taskWorker += WorkerTask(identifier = BootTasks.ASSETS_OVERRIDE, executor = { OVERRIDE_ASSETS_MANAGER.load(it) }) taskWorker.work(BOOT_LATCH) BOOT_LATCH.dec() // remove initial count BOOT_LATCH.await() - val end = TimeUtil.nanos + val end = nanos() Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Minosoft boot sequence finished in ${(end - start).formatNanos()}!" } GlobalEventMaster.fireEvent(FinishInitializingEvent()) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt index 099df7805..eb4c8ee62 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt @@ -15,8 +15,8 @@ package de.bixilon.minosoft.data.registries.registries import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.concurrent.pool.DefaultThreadPool -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +import de.bixilon.kutil.concurrent.worker.task.TaskWorker +import de.bixilon.kutil.concurrent.worker.task.WorkerTask import de.bixilon.kutil.json.JsonObject import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.json.JsonUtil.toJsonObject @@ -147,57 +147,57 @@ class Registries { val worker = TaskWorker(errorHandler = { _, it -> if (error == null) error = it }, criticalErrorHandler = { _, it -> if (error == null) error = it }) val stopwatch = Stopwatch() // enums - worker += Task(this::shapes) { loadShapes(pixlyzerData["shapes"]?.toJsonObject()) } + worker += WorkerTask(this::shapes) { loadShapes(pixlyzerData["shapes"]?.toJsonObject()) } - worker += Task(this::equipmentSlotRegistry) { equipmentSlotRegistry.initialize(pixlyzerData["equipment_slots"]) } - worker += Task(this::handEquipmentSlotRegistry) { handEquipmentSlotRegistry.initialize(pixlyzerData["hand_equipment_slots"]) } - worker += Task(this::armorEquipmentSlotRegistry) { armorEquipmentSlotRegistry.initialize(pixlyzerData["armor_equipment_slots"]) } - worker += Task(this::armorStandEquipmentSlotRegistry) { armorStandEquipmentSlotRegistry.initialize(pixlyzerData["armor_stand_equipment_slots"]) } + worker += WorkerTask(this::equipmentSlotRegistry) { equipmentSlotRegistry.initialize(pixlyzerData["equipment_slots"]) } + worker += WorkerTask(this::handEquipmentSlotRegistry) { handEquipmentSlotRegistry.initialize(pixlyzerData["hand_equipment_slots"]) } + worker += WorkerTask(this::armorEquipmentSlotRegistry) { armorEquipmentSlotRegistry.initialize(pixlyzerData["armor_equipment_slots"]) } + worker += WorkerTask(this::armorStandEquipmentSlotRegistry) { armorStandEquipmentSlotRegistry.initialize(pixlyzerData["armor_stand_equipment_slots"]) } - worker += Task(this::entityDataTypesRegistry) { entityDataTypesRegistry.initialize(pixlyzerData["entity_data_data_types"]) } + worker += WorkerTask(this::entityDataTypesRegistry) { entityDataTypesRegistry.initialize(pixlyzerData["entity_data_data_types"]) } - worker += Task(this::titleActionsRegistry) { titleActionsRegistry.initialize(pixlyzerData["title_actions"]) } - worker += Task(this::entityAnimationRegistry) { entityAnimationRegistry.initialize(pixlyzerData["entity_animations"]) } - worker += Task(this::entityActionsRegistry) { entityActionsRegistry.initialize(pixlyzerData["entity_actions"]) } + worker += WorkerTask(this::titleActionsRegistry) { titleActionsRegistry.initialize(pixlyzerData["title_actions"]) } + worker += WorkerTask(this::entityAnimationRegistry) { entityAnimationRegistry.initialize(pixlyzerData["entity_animations"]) } + worker += WorkerTask(this::entityActionsRegistry) { entityActionsRegistry.initialize(pixlyzerData["entity_actions"]) } // id stuff - worker += Task(this::biomeCategoryRegistry) { biomeCategoryRegistry.update(pixlyzerData["biome_categories"]?.unsafeCast(), this) } - worker += Task(this::biomePrecipitationRegistry) { biomePrecipitationRegistry.update(pixlyzerData["biome_precipitations"]?.unsafeCast(), this) } + worker += WorkerTask(this::biomeCategoryRegistry) { biomeCategoryRegistry.update(pixlyzerData["biome_categories"]?.unsafeCast(), this) } + worker += WorkerTask(this::biomePrecipitationRegistry) { biomePrecipitationRegistry.update(pixlyzerData["biome_precipitations"]?.unsafeCast(), this) } // id resource location stuff - worker += Task(this::containerTypeRegistry) { containerTypeRegistry.rawUpdate(pixlyzerData["container_types"]?.toJsonObject(), this) } - worker += Task(this::gameEventRegistry) { gameEventRegistry.rawUpdate(pixlyzerData["game_events"]?.toJsonObject(), this) } - worker += Task(this::worldEventRegistry) { worldEventRegistry.rawUpdate(pixlyzerData["world_events"]?.toJsonObject(), this) } - worker += Task(this::argumentTypeRegistry) { argumentTypeRegistry.rawUpdate(pixlyzerData["argument_type"]?.toJsonObject(), this) } + worker += WorkerTask(this::containerTypeRegistry) { containerTypeRegistry.rawUpdate(pixlyzerData["container_types"]?.toJsonObject(), this) } + worker += WorkerTask(this::gameEventRegistry) { gameEventRegistry.rawUpdate(pixlyzerData["game_events"]?.toJsonObject(), this) } + worker += WorkerTask(this::worldEventRegistry) { worldEventRegistry.rawUpdate(pixlyzerData["world_events"]?.toJsonObject(), this) } + worker += WorkerTask(this::argumentTypeRegistry) { argumentTypeRegistry.rawUpdate(pixlyzerData["argument_type"]?.toJsonObject(), this) } - worker += Task(this::entityTypeRegistry) { entityTypeRegistry.rawUpdate(pixlyzerData["entities"]?.toJsonObject(), this) } + worker += WorkerTask(this::entityTypeRegistry) { entityTypeRegistry.rawUpdate(pixlyzerData["entities"]?.toJsonObject(), this) } - worker += Task(this::motifRegistry) { motifRegistry.rawUpdate(pixlyzerData["motives"]?.toJsonObject(), this) } - worker += Task(this::soundEventRegistry) { soundEventRegistry.rawUpdate(pixlyzerData["sound_events"]?.toJsonObject(), null) } - worker += Task(this::soundGroupRegistry, dependencies = arrayOf(this::soundEventRegistry)) { soundGroupRegistry.update(pixlyzerData["sound_groups"]?.unsafeCast(), this) } - worker += Task(this::particleTypeRegistry) { particleTypeRegistry.rawUpdate(pixlyzerData["particles"]?.toJsonObject(), this) } - worker += Task(this::materialRegistry) { materialRegistry.rawUpdate(pixlyzerData["materials"]?.toJsonObject(), this) } - worker += Task(this::enchantmentRegistry) { enchantmentRegistry.rawUpdate(pixlyzerData["enchantments"]?.toJsonObject(), this) } - worker += Task(this::statusEffectRegistry) { statusEffectRegistry.rawUpdate(pixlyzerData["status_effects"]?.toJsonObject(), this) } - worker += Task(this::biomeRegistry, dependencies = arrayOf(this::biomeCategoryRegistry, this::biomePrecipitationRegistry)) { biomeRegistry.rawUpdate(pixlyzerData["biomes"]?.toJsonObject(), this) } - worker += Task(this::dimensionRegistry) { dimensionRegistry.rawUpdate(pixlyzerData["dimensions"]?.toJsonObject(), this) } - worker += Task(this::fluidRegistry) { fluidRegistry.rawUpdate(pixlyzerData["fluids"]?.toJsonObject(), this) } - worker += Task(this::blockRegistry, dependencies = arrayOf(this::fluidRegistry, this::shapes)) { blockRegistry.rawUpdate(pixlyzerData["blocks"]?.toJsonObject(), this) } - worker += Task(this::itemRegistry, dependencies = arrayOf(this::blockRegistry, this::entityTypeRegistry, this::fluidRegistry, this::statusEffectRegistry)) { itemRegistry.rawUpdate(pixlyzerData["items"]?.toJsonObject(), this) } + worker += WorkerTask(this::motifRegistry) { motifRegistry.rawUpdate(pixlyzerData["motives"]?.toJsonObject(), this) } + worker += WorkerTask(this::soundEventRegistry) { soundEventRegistry.rawUpdate(pixlyzerData["sound_events"]?.toJsonObject(), null) } + worker += WorkerTask(this::soundGroupRegistry, dependencies = arrayOf(this::soundEventRegistry)) { soundGroupRegistry.update(pixlyzerData["sound_groups"]?.unsafeCast(), this) } + worker += WorkerTask(this::particleTypeRegistry) { particleTypeRegistry.rawUpdate(pixlyzerData["particles"]?.toJsonObject(), this) } + worker += WorkerTask(this::materialRegistry) { materialRegistry.rawUpdate(pixlyzerData["materials"]?.toJsonObject(), this) } + worker += WorkerTask(this::enchantmentRegistry) { enchantmentRegistry.rawUpdate(pixlyzerData["enchantments"]?.toJsonObject(), this) } + worker += WorkerTask(this::statusEffectRegistry) { statusEffectRegistry.rawUpdate(pixlyzerData["status_effects"]?.toJsonObject(), this) } + worker += WorkerTask(this::biomeRegistry, dependencies = arrayOf(this::biomeCategoryRegistry, this::biomePrecipitationRegistry)) { biomeRegistry.rawUpdate(pixlyzerData["biomes"]?.toJsonObject(), this) } + worker += WorkerTask(this::dimensionRegistry) { dimensionRegistry.rawUpdate(pixlyzerData["dimensions"]?.toJsonObject(), this) } + worker += WorkerTask(this::fluidRegistry) { fluidRegistry.rawUpdate(pixlyzerData["fluids"]?.toJsonObject(), this) } + worker += WorkerTask(this::blockRegistry, dependencies = arrayOf(this::fluidRegistry, this::shapes)) { blockRegistry.rawUpdate(pixlyzerData["blocks"]?.toJsonObject(), this) } + worker += WorkerTask(this::itemRegistry, dependencies = arrayOf(this::blockRegistry, this::entityTypeRegistry, this::fluidRegistry, this::statusEffectRegistry)) { itemRegistry.rawUpdate(pixlyzerData["items"]?.toJsonObject(), this) } - worker += Task(this::blockEntityTypeRegistry, dependencies = arrayOf(this::blockRegistry)) { blockEntityTypeRegistry.rawUpdate(pixlyzerData["block_entities"]?.toJsonObject(), this) } + worker += WorkerTask(this::blockEntityTypeRegistry, dependencies = arrayOf(this::blockRegistry)) { blockEntityTypeRegistry.rawUpdate(pixlyzerData["block_entities"]?.toJsonObject(), this) } - worker += Task(this::villagerProfessionRegistry) { villagerProfessionRegistry.rawUpdate(pixlyzerData["villager_professions"]?.toJsonObject(), this) } - worker += Task(this::villagerTypeRegistry) { villagerTypeRegistry.rawUpdate(pixlyzerData["villager_types"]?.toJsonObject(), null) } + worker += WorkerTask(this::villagerProfessionRegistry) { villagerProfessionRegistry.rawUpdate(pixlyzerData["villager_professions"]?.toJsonObject(), this) } + worker += WorkerTask(this::villagerTypeRegistry) { villagerTypeRegistry.rawUpdate(pixlyzerData["villager_types"]?.toJsonObject(), null) } - worker += Task(this::blockDataTypeRegistry) { blockDataTypeRegistry.rawUpdate(pixlyzerData["block_data_data_types"]?.toJsonObject(), this) } + worker += WorkerTask(this::blockDataTypeRegistry) { blockDataTypeRegistry.rawUpdate(pixlyzerData["block_data_data_types"]?.toJsonObject(), this) } - worker += Task(this::catVariants) { catVariants.rawUpdate(pixlyzerData["variant/cat"]?.toJsonObject(), this) } - worker += Task(this::frogVariants) { frogVariants.rawUpdate(pixlyzerData["variant/frog"]?.toJsonObject(), this) } + worker += WorkerTask(this::catVariants) { catVariants.rawUpdate(pixlyzerData["variant/cat"]?.toJsonObject(), this) } + worker += WorkerTask(this::frogVariants) { frogVariants.rawUpdate(pixlyzerData["variant/frog"]?.toJsonObject(), this) } - worker += Task(this::statisticRegistry) { statisticRegistry.rawUpdate(pixlyzerData["statistics"]?.toJsonObject(), this) } + worker += WorkerTask(this::statisticRegistry) { statisticRegistry.rawUpdate(pixlyzerData["statistics"]?.toJsonObject(), this) } val inner = CountUpAndDownLatch(1, latch) worker.work(inner) diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index ccd498a7c..2ac755f18 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -18,8 +18,8 @@ import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.concurrent.lock.simple.SimpleLock import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalTask +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker import de.bixilon.kutil.watcher.DataWatcher.Companion.watched import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.entities.block.BlockEntity @@ -280,13 +280,13 @@ class World( val simulationDistance = view.simulationDistance val cameraPosition = connection.player.positionInfo.chunkPosition chunks.lock.acquire() - val worker = TaskWorker() + val worker = UnconditionalWorker() for ((chunkPosition, chunk) in chunks.unsafe) { // ToDo: Cache (improve performance) if (!chunkPosition.isInViewDistance(simulationDistance, cameraPosition)) { continue } - worker += Task(priority = ThreadPool.HIGH) { chunk.tick(connection, chunkPosition) } + worker += UnconditionalTask(priority = ThreadPool.HIGH) { chunk.tick(connection, chunkPosition) } } chunks.lock.release() worker.work() @@ -409,8 +409,8 @@ class World( } fun recalculateLight() { - val reset = TaskWorker() - val calculate = TaskWorker() + val reset = UnconditionalWorker() + val calculate = UnconditionalWorker() lock.acquire() for (chunk in chunks.unsafe.values) { reset += { chunk.light.reset() } diff --git a/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt index 539796f5e..4e4d4fd05 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/WorldEntities.kt @@ -16,8 +16,8 @@ package de.bixilon.minosoft.data.world import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kutil.concurrent.lock.simple.SimpleLock import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalTask +import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity @@ -184,9 +184,9 @@ class WorldEntities : Iterable { fun tick() { lock.acquire() - val worker = TaskWorker() + val worker = UnconditionalWorker() for (entity in entities) { - worker += Task(priority = ThreadPool.Priorities.HIGH) { entity.tryTick() } + worker += UnconditionalTask(priority = ThreadPool.Priorities.HIGH) { entity.tryTick() } } lock.release() worker.work() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt index aff3352ba..c40ca811e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt @@ -19,7 +19,7 @@ import de.bixilon.kutil.concurrent.lock.simple.SimpleLock import de.bixilon.kutil.concurrent.time.TimeWorker import de.bixilon.kutil.concurrent.time.TimeWorkerTask import de.bixilon.kutil.latch.CountUpAndDownLatch -import de.bixilon.kutil.time.TimeUtil +import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch import de.bixilon.minosoft.data.registries.ResourceLocation @@ -159,7 +159,7 @@ class ParticleRenderer( particlesLock.acquire() try { - val time = TimeUtil.millis + val time = millis() for (particle in particles) { if (!particle.chunkPosition.isInViewDistance(particleViewDistance, cameraPosition)) { // ToDo: Check fog distance particle.dead = true @@ -207,7 +207,7 @@ class ParticleRenderer( particle.dead = true return } - particle.tryTick(TimeUtil.millis) + particle.tryTick(millis()) particleQueueLock.lock() particleQueue += particle @@ -227,7 +227,7 @@ class ParticleRenderer( particlesLock.acquire() - val time = TimeUtil.millis + val time = millis() for (particle in particles) { particle.tryTick(time) if (particle.dead) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt index f96c20f4a..0a1d53b03 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt @@ -16,8 +16,8 @@ package de.bixilon.minosoft.gui.rendering.renderer.renderer import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.concurrent.pool.ThreadPool -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +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.minosoft.config.profile.ConnectionProfiles import de.bixilon.minosoft.data.registries.ResourceLocation @@ -65,7 +65,7 @@ class RendererManager( fun init(latch: CountUpAndDownLatch) { val inner = CountUpAndDownLatch(0, latch) - var worker = TaskWorker() + var worker = UnconditionalWorker() for (renderer in renderers.values) { worker += { renderer.preAsyncInit(inner) } } @@ -75,7 +75,7 @@ class RendererManager( renderer.init(inner) } - worker = TaskWorker() + worker = UnconditionalWorker() for (renderer in renderers.values) { worker += { renderer.asyncInit(inner) } } @@ -87,7 +87,7 @@ class RendererManager( renderer.postInit(latch) } val inner = CountUpAndDownLatch(0, latch) - val worker = TaskWorker() + val worker = UnconditionalWorker() for (renderer in renderers.values) { worker += { renderer.postAsyncInit(inner) } } @@ -120,12 +120,12 @@ class RendererManager( } val latch = CountUpAndDownLatch(0) - val worker = TaskWorker() + val worker = UnconditionalWorker() for (renderer in rendererList) { if (renderer !is AsyncRenderer) { continue } - worker += Task(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync() } + worker += UnconditionalTask(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync() } } worker.work(latch) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt index 5453f6336..2956e5b1b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt @@ -22,7 +22,7 @@ import de.bixilon.kutil.concurrent.pool.ThreadPool.Priorities.HIGH import de.bixilon.kutil.concurrent.pool.ThreadPool.Priorities.LOW import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable import de.bixilon.kutil.latch.CountUpAndDownLatch -import de.bixilon.kutil.time.TimeUtil +import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.minosoft.config.key.KeyActions import de.bixilon.minosoft.config.key.KeyBinding @@ -649,10 +649,10 @@ class WorldRenderer( } var addedMeshes = 0 - val start = TimeUtil.millis + val start = millis() val maxTime = if (connection.player.velocity.empty) 50L else 20L // If the player is still, then we can load more chunks (to not cause lags) - while (meshesToLoad.isNotEmpty() && (TimeUtil.millis - start < maxTime)) { + while (meshesToLoad.isNotEmpty() && (millis() - start < maxTime)) { val item = meshesToLoad.removeAt(0) meshesToLoadSet.remove(item) val mesh = item.mesh ?: continue @@ -688,10 +688,10 @@ class WorldRenderer( return } - val time = TimeUtil.millis + val time = millis() val maxTime = if (connection.player.velocity.empty) 50L else 20L // If the player is still, then we can load more chunks (to not cause lags) - while (meshesToUnload.isNotEmpty() && (TimeUtil.millis - time < maxTime)) { + while (meshesToUnload.isNotEmpty() && (millis() - time < maxTime)) { val mesh = meshesToUnload.removeAt(0) visible.removeMesh(mesh) mesh.unload() diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt index 71443d364..956c658b9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt @@ -15,8 +15,8 @@ package de.bixilon.minosoft.protocol.network.connection.play import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf -import de.bixilon.kutil.concurrent.worker.TaskWorker -import de.bixilon.kutil.concurrent.worker.tasks.Task +import de.bixilon.kutil.concurrent.worker.task.TaskWorker +import de.bixilon.kutil.concurrent.worker.task.WorkerTask import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.kutil.watcher.DataWatcher.Companion.watched @@ -187,8 +187,8 @@ class PlayConnection( } var privateKey: PlayerPrivateKey? = null if (version.requiresSignedChat) { - taskWorker += Task(optional = true) { - val minecraftKey = account.fetchKey(latch) ?: return@Task + taskWorker += WorkerTask(optional = true) { + val minecraftKey = account.fetchKey(latch) ?: return@WorkerTask minecraftKey.requireSignature() privateKey = PlayerPrivateKey( expiresAt = minecraftKey.expiresAt, diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/compression/PacketInflater.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/compression/PacketInflater.kt index 215c76296..f54b338ad 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/compression/PacketInflater.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/compression/PacketInflater.kt @@ -38,7 +38,7 @@ class PacketInflater( throw PacketTooLongException(uncompressedLength, maxPacketSize) } - val decompressed = rest.decompress() // ToDo: Kutil 1.17: passthrough expected + val decompressed = rest.decompress(uncompressedLength) if (decompressed.size != uncompressedLength) { throw SizeMismatchInflaterException() } diff --git a/src/test/java/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt b/src/test/java/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt index 2f59aa120..2dc989077 100644 --- a/src/test/java/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt +++ b/src/test/java/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt @@ -13,12 +13,12 @@ package de.bixilon.minosoft.data.world.chunk.light +import de.bixilon.kutil.benchmark.BenchmarkUtil import de.bixilon.kutil.unit.UnitFormatter.formatNanos import de.bixilon.minosoft.data.world.chunk.ChunkTestingUtil.createChunkWithNeighbours import de.bixilon.minosoft.data.world.chunk.ChunkTestingUtil.createSolidBlock import de.bixilon.minosoft.data.world.chunk.ChunkTestingUtil.createSolidLight import de.bixilon.minosoft.data.world.chunk.ChunkTestingUtil.fillBottom -import de.bixilon.minosoft.util.benchmark.BenchmarkUtil import org.junit.jupiter.api.Test import kotlin.system.measureNanoTime diff --git a/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkResult.kt b/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkResult.kt deleted file mode 100644 index 76d6c1491..000000000 --- a/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkResult.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.util.benchmark - -import de.bixilon.kutil.unit.UnitFormatter.formatNanos - -@Deprecated("Kutil 1.17") -class BenchmarkResult( - val runs: Int, - val totalNanos: Long, - val averageNanos: Long, -) { - - override fun toString(): String { - return "Benchmark@$runs, totaling=${totalNanos.formatNanos()}, avg=${averageNanos.formatNanos()}" - } - - fun println() { - println(this) - } -} diff --git a/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkUtil.kt b/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkUtil.kt deleted file mode 100644 index 84a776539..000000000 --- a/src/test/java/de/bixilon/minosoft/util/benchmark/BenchmarkUtil.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.util.benchmark - -import de.bixilon.kutil.time.TimeUtil - -@Deprecated("Kutil 1.17") -object BenchmarkUtil { - - inline fun benchmark(runs: Int = 100, warm: Boolean = true, block: () -> Unit): BenchmarkResult { - if (warm) { - block.invoke() - } - val start = TimeUtil.nanos - for (run in 0 until runs) { - block.invoke() - } - val end = TimeUtil.nanos - val delta = end - start - return BenchmarkResult(runs, delta, delta / runs) - } -}