From 5f192f224f95214cb74f6a2330fd8687c95b7473 Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Mon, 1 Jul 2024 16:36:54 +0200 Subject: [PATCH] Decrease the compression ratio of stored maps to improve their generation time. helps with #513 --- src/network.zig | 2 +- src/server/storage.zig | 2 +- src/server/terrain/SurfaceMap.zig | 2 +- src/utils.zig | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/network.zig b/src/network.zig index 1afb4ed9..bff1986f 100644 --- a/src/network.zig +++ b/src/network.zig @@ -1225,7 +1225,7 @@ pub const Protocols = struct { for(&map.startHeight, 0..) |val, i| { std.mem.writeInt(i16, uncompressedData[2*i..][0..2], val, .big); } - const compressedData = utils.Compression.deflate(main.stackAllocator, &uncompressedData); + const compressedData = utils.Compression.deflate(main.stackAllocator, &uncompressedData, .default); defer main.stackAllocator.free(compressedData); const data = main.stackAllocator.alloc(u8, 9 + compressedData.len); defer main.stackAllocator.free(data); diff --git a/src/server/storage.zig b/src/server/storage.zig index 0df6b303..2a77387d 100644 --- a/src/server/storage.zig +++ b/src/server/storage.zig @@ -216,7 +216,7 @@ pub const ChunkCompression = struct { for(0..chunk.chunkVolume) |i| { std.mem.writeInt(u32, uncompressedData[4*i..][0..4], ch.data.getValue(i).toInt(), .big); } - const compressedData = main.utils.Compression.deflate(main.stackAllocator, &uncompressedData); + const compressedData = main.utils.Compression.deflate(main.stackAllocator, &uncompressedData, .default); defer main.stackAllocator.free(compressedData); const data = allocator.alloc(u8, 4 + compressedData.len); @memcpy(data[4..], compressedData); diff --git a/src/server/terrain/SurfaceMap.zig b/src/server/terrain/SurfaceMap.zig index f536c97b..82b18478 100644 --- a/src/server/terrain/SurfaceMap.zig +++ b/src/server/terrain/SurfaceMap.zig @@ -187,7 +187,7 @@ pub const MapFragment = struct { std.mem.writeInt(u32, originalHeightData[4*(x*mapSize + y)..][0..4], @bitCast((if(originalData) |map| map else &self.heightMap)[x][y]), .big); } } - const compressedData = main.utils.Compression.deflate(main.stackAllocator, rawData); + const compressedData = main.utils.Compression.deflate(main.stackAllocator, rawData, .fast); defer main.stackAllocator.free(compressedData); const fullData = main.stackAllocator.alloc(u8, compressedData.len + @sizeOf(StorageHeader)); diff --git a/src/utils.zig b/src/utils.zig index c3ab77c2..2bab48a7 100644 --- a/src/utils.zig +++ b/src/utils.zig @@ -8,9 +8,9 @@ const main = @import("main.zig"); pub const file_monitor = @import("utils/file_monitor.zig"); pub const Compression = struct { - pub fn deflate(allocator: NeverFailingAllocator, data: []const u8) []u8 { + pub fn deflate(allocator: NeverFailingAllocator, data: []const u8, level: std.compress.flate.deflate.Level) []u8 { var result = main.List(u8).init(allocator); - var comp = std.compress.flate.compressor(result.writer(), .{}) catch unreachable; + var comp = std.compress.flate.compressor(result.writer(), .{.level = level}) catch unreachable; _ = comp.write(data) catch unreachable; comp.finish() catch unreachable; return result.toOwnedSlice();