From 06c1a00d39a830ec26c5db2908aa3b421f2957ab Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 10 Apr 2024 23:28:03 +0200 Subject: [PATCH] Optimize MapNode::serializeBulk before serializeBulk [us] __________________________ 9047x 9.363 after serializeBulk [us] __________________________ 8458x 1.214 --- src/mapnode.cpp | 18 ++++++++++-------- src/util/serialize.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index d16f6d647..6fe169e90 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -708,15 +708,17 @@ Buffer MapNode::serializeBulk(int version, Buffer databuf(nodecount * (content_width + params_width)); - u32 start1 = content_width * nodecount; - u32 start2 = (content_width + 1) * nodecount; + // Writing to the buffer linearly is faster + u8 *p = &databuf[0]; + for (u32 i = 0; i < nodecount; i++, p += 2) + writeU16(p, nodes[i].param0); + + for (u32 i = 0; i < nodecount; i++, p++) + writeU8(p, nodes[i].param1); + + for (u32 i = 0; i < nodecount; i++, p++) + writeU8(p, nodes[i].param2); - // Serialize content - for (u32 i = 0; i < nodecount; i++) { - writeU16(&databuf[i * 2], nodes[i].param0); - writeU8(&databuf[start1 + i], nodes[i].param1); - writeU8(&databuf[start2 + i], nodes[i].param2); - } return databuf; } diff --git a/src/util/serialize.h b/src/util/serialize.h index 5065de61d..0a8a559fa 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -291,7 +291,7 @@ inline v3f readV3F32(const u8 *data) inline void writeU8(u8 *data, u8 i) { - data[0] = (i >> 0) & 0xFF; + data[0] = i; } inline void writeS8(u8 *data, s8 i)