From a9d4bdbfbaca28e558fa8fdcc67c09b661d136a1 Mon Sep 17 00:00:00 2001 From: ishland Date: Sat, 15 Jun 2024 12:39:43 +0800 Subject: [PATCH] perf: shortcut off-thread chunk access if the chunk is already available --- .../async_chunk_request/MixinServerChunkManager.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/c2me-opts-chunk-access/src/main/java/com/ishland/c2me/opts/chunk_access/mixin/async_chunk_request/MixinServerChunkManager.java b/c2me-opts-chunk-access/src/main/java/com/ishland/c2me/opts/chunk_access/mixin/async_chunk_request/MixinServerChunkManager.java index 894ef86b..112ceab3 100644 --- a/c2me-opts-chunk-access/src/main/java/com/ishland/c2me/opts/chunk_access/mixin/async_chunk_request/MixinServerChunkManager.java +++ b/c2me-opts-chunk-access/src/main/java/com/ishland/c2me/opts/chunk_access/mixin/async_chunk_request/MixinServerChunkManager.java @@ -69,12 +69,23 @@ private void onGetChunk(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean @Unique @Final private Chunk c2me$getChunkOffThread(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean create) { + // shortcut for worldgen threads final ChunkRegion currentRegion = CurrentWorldGenState.getCurrentRegion(); if (currentRegion != null) { Chunk chunk = currentRegion.getChunk(chunkX, chunkZ, leastStatus, false); if (chunk instanceof WrapperProtoChunk readOnlyChunk) chunk = readOnlyChunk.getWrappedChunk(); if (chunk != null) return chunk; } + + // shortcut if already exists + final ChunkHolder available = this.getChunkHolder(ChunkPos.toLong(chunkX, chunkZ)); // thread-safe + if (available != null) { + final Chunk availableChunk = available.getOrNull(leastStatus); + if (availableChunk != null) { + return availableChunk; + } + } + final CompletableFuture chunkLoad = c2me$getChunkFutureOffThread(chunkX, chunkZ, leastStatus, create); assert chunkLoad != null; return CFUtil.join(chunkLoad);