mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-31 17:05:54 +02:00
Reduce tick buffer copy overhead
This commit is contained in:
parent
66513025c7
commit
3fa89737d9
@ -71,10 +71,7 @@ public class ClientChannel extends SimpleChannelInboundHandler<InboundPacket> {
|
||||
|
||||
// Release tick buffer
|
||||
if (playerConnection instanceof NettyPlayerConnection) {
|
||||
final ByteBuf tickBuffer = ((NettyPlayerConnection) playerConnection).getTickBuffer();
|
||||
synchronized (tickBuffer) {
|
||||
tickBuffer.release();
|
||||
}
|
||||
((NettyPlayerConnection) playerConnection).releaseTickBuffer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,7 +62,8 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
private PlayerSkin bungeeSkin;
|
||||
|
||||
private final static int INITIAL_BUFFER_SIZE = 65_535; // 2^16-1
|
||||
private final ByteBuf tickBuffer = BufUtils.getBuffer(true);
|
||||
private final Object tickBufferLock = new Object();
|
||||
private volatile ByteBuf tickBuffer = BufUtils.getBuffer(true);
|
||||
|
||||
public NettyPlayerConnection(@NotNull SocketChannel channel) {
|
||||
super();
|
||||
@ -119,7 +120,7 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
if (getPlayer() != null) {
|
||||
// Flush happen during #update()
|
||||
if (serverPacket instanceof CacheablePacket && MinecraftServer.hasPacketCaching()) {
|
||||
synchronized (tickBuffer) {
|
||||
synchronized (tickBufferLock) {
|
||||
if (tickBuffer.refCnt() == 0)
|
||||
return;
|
||||
CacheablePacket.writeCache(tickBuffer, serverPacket);
|
||||
@ -141,7 +142,7 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
public void write(@NotNull Object message, boolean skipTranslating) {
|
||||
if (message instanceof FramedPacket) {
|
||||
final FramedPacket framedPacket = (FramedPacket) message;
|
||||
synchronized (tickBuffer) {
|
||||
synchronized (tickBufferLock) {
|
||||
if (tickBuffer.refCnt() == 0)
|
||||
return;
|
||||
final ByteBuf body = framedPacket.getBody();
|
||||
@ -155,14 +156,14 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> AdventureSerializer.translate(component, getPlayer()));
|
||||
}
|
||||
|
||||
synchronized (tickBuffer) {
|
||||
synchronized (tickBufferLock) {
|
||||
if (tickBuffer.refCnt() == 0)
|
||||
return;
|
||||
PacketUtils.writeFramedPacket(tickBuffer, serverPacket);
|
||||
}
|
||||
return;
|
||||
} else if (message instanceof ByteBuf) {
|
||||
synchronized (tickBuffer) {
|
||||
synchronized (tickBufferLock) {
|
||||
if (tickBuffer.refCnt() == 0)
|
||||
return;
|
||||
tickBuffer.writeBytes((ByteBuf) message);
|
||||
@ -193,11 +194,11 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
|
||||
// Retrieve safe copy
|
||||
final ByteBuf copy;
|
||||
synchronized (tickBuffer) {
|
||||
synchronized (tickBufferLock) {
|
||||
if (tickBuffer.refCnt() == 0)
|
||||
return;
|
||||
copy = tickBuffer.copy();
|
||||
tickBuffer.clear();
|
||||
copy = tickBuffer;
|
||||
tickBuffer = tickBuffer.alloc().buffer(tickBuffer.writerIndex());
|
||||
}
|
||||
|
||||
// Write copied buffer to netty
|
||||
@ -379,10 +380,10 @@ public class NettyPlayerConnection extends PlayerConnection {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public ByteBuf getTickBuffer() {
|
||||
return tickBuffer;
|
||||
public void releaseTickBuffer() {
|
||||
synchronized (tickBufferLock) {
|
||||
tickBuffer.release();
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] getNonce() {
|
||||
|
Loading…
Reference in New Issue
Block a user