Archived
0

рефакторинг object pool для NetByteBuf

This commit is contained in:
2021-07-09 14:19:05 +03:00
parent 84b4069f7b
commit ee8c9e4a3e
6 changed files with 27 additions and 20 deletions

View File

@@ -11,7 +11,6 @@ import mc.protocol.buffer.NetByteBuf;
import mc.protocol.packets.ClientSidePacket;
import mc.protocol.packets.UnknownPacket;
import mc.protocol.pool.ProtocolObjectPool;
import mc.protocol.pool.UnpooledNetByteBuf;
import java.util.List;
import java.util.Objects;
@@ -30,7 +29,7 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
State state = Objects.requireNonNull(ctx.channel().attr(ProtocolAttributes.STATE).get());
NetByteBuf netByteBuf = new UnpooledNetByteBuf(in);
NetByteBuf netByteBuf = ProtocolObjectPool.netByteBuf().borrowObject(in);
int packetId = netByteBuf.readVarInt();
Class<? extends ClientSidePacket> packetClass = state.getClientSidePacketById(packetId);
@@ -55,6 +54,8 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
}
out.add(packet);
}
ProtocolObjectPool.netByteBuf().returnObject(netByteBuf);
}
private static String packetIdAsHexcode(int packetId) {

View File

@@ -1,7 +1,6 @@
package mc.protocol.handler.codec;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import lombok.extern.slf4j.Slf4j;
@@ -9,7 +8,7 @@ import mc.protocol.ProtocolAttributes;
import mc.protocol.State;
import mc.protocol.buffer.NetByteBuf;
import mc.protocol.packets.ServerSidePacket;
import mc.protocol.pool.UnpooledNetByteBuf;
import mc.protocol.pool.ProtocolObjectPool;
import java.util.Objects;
@@ -29,12 +28,15 @@ public class ProtocolEncoder extends MessageToByteEncoder<ServerSidePacket> {
log.debug("OUT: {}:{}", state, packet);
}
NetByteBuf buffer = new UnpooledNetByteBuf(Unpooled.buffer());
NetByteBuf buffer = ProtocolObjectPool.netByteBuf().borrowObject();
buffer.writeVarInt(packetId);
packet.writeSelf(buffer);
NetByteBuf netByteBuf = new UnpooledNetByteBuf(out);
NetByteBuf netByteBuf = ProtocolObjectPool.netByteBuf().borrowObject(out);
netByteBuf.writeVarInt(buffer.readableBytes());
netByteBuf.writeBytes(buffer);
ProtocolObjectPool.netByteBuf().returnObject(netByteBuf);
ProtocolObjectPool.netByteBuf().returnObject(buffer);
}
}

View File

@@ -4,6 +4,7 @@ import io.netty.buffer.Unpooled;
import lombok.Data;
import mc.protocol.buffer.NetByteBuf;
import mc.protocol.packets.ServerSidePacket;
import mc.protocol.pool.ProtocolObjectPool;
import mc.protocol.pool.UnpooledNetByteBuf;
/**
@@ -79,24 +80,19 @@ public class ChunkDataPacket implements ServerSidePacket {
}
static {
voidData = new UnpooledNetByteBuf(Unpooled.buffer());
voidData = new UnpooledNetByteBuf(Unpooled.directBuffer());
voidData.writeBoolean(true); // Is Full chunk
voidData.writeVarInt(0b11111111); // Available Sections
NetByteBuf data = new UnpooledNetByteBuf(Unpooled.buffer());
NetByteBuf data = ProtocolObjectPool.netByteBuf().borrowObject();
for (int i = 0; i < 16; i++) {
NetByteBuf dataBuff = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[4096]));
NetByteBuf blockLight = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[2048]));
NetByteBuf skyLight = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[2048]));
NetByteBuf biomes = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[256]));
data.writeUnsignedByte(13);
data.writeUnsignedByte(0);
data.writeVarInt(dataBuff.readableBytes());
data.writeBytes(dataBuff);
data.writeBytes(blockLight);
data.writeBytes(skyLight);
data.writeBytes(biomes);
data.writeVarInt(4096); // dataBuff.length
data.writeBytes(new byte[4096]); // dataBuff
data.writeBytes(new byte[2048]); // blockLight
data.writeBytes(new byte[2048]); // skyLight
data.writeBytes(new byte[256]); // biomes
}
voidData.writeVarInt(data.readableBytes());
@@ -105,5 +101,7 @@ public class ChunkDataPacket implements ServerSidePacket {
voidData.markReaderIndex();
voidData.markWriterIndex();
ProtocolObjectPool.netByteBuf().returnObject(data);
}
}

View File

@@ -19,7 +19,7 @@ public class NetByteBufObjectPool implements ObjectPool<NetByteBuf> {
@Override
public NetByteBuf borrowObject() {
return borrowObject(PooledByteBufAllocator.DEFAULT.buffer());
return borrowObject(PooledByteBufAllocator.DEFAULT.directBuffer());
}
@SneakyThrows

View File

@@ -7,7 +7,7 @@ import mc.utils.pool.Passivable;
public class PooledNetByteBuf extends NetByteBuf implements Passivable {
void init(ByteBuf byteBuf) {
this.byteBuf = byteBuf;
this.byteBuf = byteBuf.retain();
}
@Override

View File

@@ -20,4 +20,10 @@
<logger name="io.netty.handler.logging.LoggingHandler" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="mc.protocol.handler.codec.ProtocolEncoder" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="mc.protocol.handler.codec.ProtocolDecoder" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>