From 926c02b7f5c069b306426441fcf32bf2adf32ec8 Mon Sep 17 00:00:00 2001 From: Eoghanmc22 Date: Sat, 21 Nov 2020 13:09:03 -0500 Subject: [PATCH] Small optimizations to netty. --- .../java/net/minestom/server/MinecraftServer.java | 2 +- .../server/network/netty/NettyServer.java | 2 ++ .../network/netty/channel/ClientChannel.java | 6 ++++-- .../network/netty/codec/GroupedPacketHandler.java | 15 ++++++++++++++- .../network/player/NettyPlayerConnection.java | 4 ++-- src/test/java/demo/PlayerInit.java | 12 ++++++------ 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minestom/server/MinecraftServer.java b/src/main/java/net/minestom/server/MinecraftServer.java index 6d817a075..027571fe8 100644 --- a/src/main/java/net/minestom/server/MinecraftServer.java +++ b/src/main/java/net/minestom/server/MinecraftServer.java @@ -606,7 +606,7 @@ public final class MinecraftServer { * * @return should process netty errors */ - public static boolean processingNettyErrors() { + public static boolean shouldProcessNettyErrors() { return processNettyErrors; } diff --git a/src/main/java/net/minestom/server/network/netty/NettyServer.java b/src/main/java/net/minestom/server/network/netty/NettyServer.java index c3b94b75f..11e8e866e 100644 --- a/src/main/java/net/minestom/server/network/netty/NettyServer.java +++ b/src/main/java/net/minestom/server/network/netty/NettyServer.java @@ -1,6 +1,7 @@ package net.minestom.server.network.netty; import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.ByteBufAllocator; import io.netty.channel.*; import io.netty.channel.epoll.Epoll; import io.netty.channel.epoll.EpollEventLoopGroup; @@ -100,6 +101,7 @@ public final class NettyServer { ChannelConfig config = ch.config(); config.setOption(ChannelOption.TCP_NODELAY, true); config.setOption(ChannelOption.SO_SNDBUF, 1_000_000); + config.setAllocator(ByteBufAllocator.DEFAULT); ChannelPipeline pipeline = ch.pipeline(); diff --git a/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java b/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java index de9a6352e..99a5f52a9 100644 --- a/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java +++ b/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java @@ -65,8 +65,10 @@ public class ClientChannel extends SimpleChannelInboundHandler { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - LOGGER.info(cause.getMessage()); - cause.printStackTrace(); + if (MinecraftServer.shouldProcessNettyErrors()) { + LOGGER.info(cause.getMessage()); + cause.printStackTrace(); + } ctx.close(); } } diff --git a/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java b/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java index a71d52c4a..085cd9c9b 100644 --- a/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java +++ b/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java @@ -10,9 +10,22 @@ public class GroupedPacketHandler extends MessageToByteEncoder { @Override protected void encode(ChannelHandlerContext ctx, FramedPacket msg, ByteBuf out) { final ByteBuf packet = msg.body; - out.writeBytes(packet.duplicate()); + + out.setBytes(0, packet, 0, packet.writerIndex()); + out.writerIndex(packet.writerIndex()); + if (msg.releaseBuf) { packet.release(); } } + + @Override + protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, FramedPacket msg, boolean preferDirect) { + if (preferDirect) { + return ctx.alloc().ioBuffer(msg.body.writerIndex()); + } else { + return ctx.alloc().heapBuffer(msg.body.writerIndex()); + } + } + } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index b4f8efa2f..fa7909aa5 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -143,7 +143,7 @@ public class NettyPlayerConnection extends PlayerConnection { } public void write(Object message) { - if (MinecraftServer.processingNettyErrors()) + if (MinecraftServer.shouldProcessNettyErrors()) channel.write(message).addListener(future -> { if (!future.isSuccess()) { future.cause().printStackTrace(); @@ -154,7 +154,7 @@ public class NettyPlayerConnection extends PlayerConnection { } public void writeAndFlush(Object message) { - if (MinecraftServer.processingNettyErrors()) + if (MinecraftServer.shouldProcessNettyErrors()) channel.writeAndFlush(message).addListener(future -> { if (!future.isSuccess()) { future.cause().printStackTrace(); diff --git a/src/test/java/demo/PlayerInit.java b/src/test/java/demo/PlayerInit.java index 4adefbbe8..095e34298 100644 --- a/src/test/java/demo/PlayerInit.java +++ b/src/test/java/demo/PlayerInit.java @@ -49,11 +49,11 @@ public class PlayerInit { instanceContainer.setChunkGenerator(noiseTestGenerator); // Load some chunks beforehand - final int loopStart = -32; - final int loopEnd = 32; + final int loopStart = -16; + final int loopEnd = 16; for (int x = loopStart; x < loopEnd; x++) for (int z = loopStart; z < loopEnd; z++) { - instanceContainer.loadChunk(x, z); + //instanceContainer.loadChunk(x, z); } inventory = new Inventory(InventoryType.CHEST_1_ROW, "Test inventory"); @@ -172,9 +172,9 @@ public class PlayerInit { player.addEventCallback(PlayerLoginEvent.class, event -> { event.setSpawningInstance(instanceContainer); - int x = Math.abs(ThreadLocalRandom.current().nextInt()) % 1000 + 500; - int z = Math.abs(ThreadLocalRandom.current().nextInt()) % 1000 + 500; - player.setRespawnPoint(new Position(0, 70f, 0)); + int x = Math.abs(ThreadLocalRandom.current().nextInt()) % 2000 - 1000; + int z = Math.abs(ThreadLocalRandom.current().nextInt()) % 2000 - 1000; + player.setRespawnPoint(new Position(x, 70f, z)); /*player.getInventory().addInventoryCondition((p, slot, clickType, inventoryConditionResult) -> { if (slot == -999)