From 732394c5fe61eaac82b174856c01fd74aade4e12 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Sat, 29 Jul 2023 00:45:11 +0200 Subject: [PATCH] fix light benchmark --- .../de/bixilon/minosoft/data/world/chunk/ChunkTestingUtil.kt | 4 ++-- .../bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt | 3 ++- .../bixilon/minosoft/data/world/chunk/light/SectionLight.kt | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/ChunkTestingUtil.kt b/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/ChunkTestingUtil.kt index 5e4960081..746cb7255 100644 --- a/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/ChunkTestingUtil.kt +++ b/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/ChunkTestingUtil.kt @@ -22,6 +22,7 @@ import de.bixilon.minosoft.data.registries.blocks.light.OpaqueProperty import de.bixilon.minosoft.data.registries.blocks.settings.BlockSettings import de.bixilon.minosoft.data.registries.blocks.state.AdvancedBlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState +import de.bixilon.minosoft.data.registries.blocks.state.manager.SimpleStateManager import de.bixilon.minosoft.data.registries.blocks.types.Block import de.bixilon.minosoft.data.registries.blocks.types.TestBlock import de.bixilon.minosoft.data.registries.dimension.DimensionProperties @@ -109,8 +110,7 @@ object ChunkTestingUtil { fun createBlock(name: String, luminance: Int, lightProperties: LightProperties): Block { val block = TestBlock(minosoft(name), BlockSettings()) val state = AdvancedBlockState(block, properties = emptyMap(), collisionShape = AbstractVoxelShape.EMPTY, outlineShape = AbstractVoxelShape.EMPTY, luminance = luminance, lightProperties = lightProperties, solidRenderer = true) - block::states.javaField!!.forceSet(block, setOf(state)) - block.states::default.javaField!!.forceSet(block, state) + block::states.forceSet(SimpleStateManager(state)) return block } diff --git a/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt b/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt index e5742cac1..c42ad6564 100644 --- a/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt +++ b/src/benchmark/kotlin/de/bixilon/minosoft/data/world/chunk/light/LightBenchmark.kt @@ -79,9 +79,10 @@ internal class LightBenchmark { for (index in 0 until 256) { highest.unsafeSet(index or (0x0F shl 8), solid) } + var totalPlace = 0L var totalBreak = 0L - val benchmark = BenchmarkUtil.benchmark(10000) { + val benchmark = BenchmarkUtil.benchmark(100000) { totalBreak += measureNanoTime { chunk[7, 255, 7] = null } totalPlace += measureNanoTime { chunk[7, 255, 7] = solid } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/SectionLight.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/SectionLight.kt index 66f4cef77..6902773b0 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/light/SectionLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/light/SectionLight.kt @@ -372,7 +372,7 @@ class SectionLight( (neighbours[Directions.O_DOWN] ?: chunk.getOrPut(section.sectionHeight - 1, false))?.light?.traceSkyLightIncrease(x, ProtocolDefinition.SECTION_MAX_Y, z, nextNeighbourLevel, Directions.DOWN, totalY - 1) } } - if (target != Directions.DOWN && target != null && (lightProperties.propagatesLight(Directions.UP))) { + if (target != Directions.DOWN && (target != null || lightProperties.propagatesLight(Directions.UP))) { if (y < ProtocolDefinition.SECTION_MAX_Y) { traceSkyLightIncrease(x, y + 1, z, nextNeighbourLevel, Directions.UP, totalY + 1) } else if (section.sectionHeight < chunk.maxSection) {