Rename connection field in ConnectedPlayer.

This sounds stupid, but YourKit really casts its net wide when it tries
to instrument usages of JDBC. Velocity doesn't use JDBC, and yet if you
run Velocity with YourKit (even without profiling active) you pay a
significant cost.
This commit is contained in:
Andrew Steinborn
2019-01-11 17:46:33 -05:00
parent d8e7f87506
commit 5dbe6aa808
8 changed files with 53 additions and 54 deletions

View File

@@ -422,7 +422,7 @@ public class VelocityServer implements ProxyServer {
Preconditions.checkNotNull(component, "component"); Preconditions.checkNotNull(component, "component");
Chat chat = Chat.createClientbound(component); Chat chat = Chat.createClientbound(component);
for (ConnectedPlayer player : connectionsByUuid.values()) { for (ConnectedPlayer player : connectionsByUuid.values()) {
player.getConnection().write(chat); player.getMinecraftConnection().write(chat);
} }
} }

View File

@@ -36,7 +36,8 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
this.server = server; this.server = server;
this.serverConn = serverConn; this.serverConn = serverConn;
MinecraftSessionHandler psh = serverConn.getPlayer().getConnection().getSessionHandler(); MinecraftSessionHandler psh = serverConn.getPlayer().getMinecraftConnection()
.getSessionHandler();
if (!(psh instanceof ClientPlaySessionHandler)) { if (!(psh instanceof ClientPlaySessionHandler)) {
throw new IllegalStateException( throw new IllegalStateException(
"Initializing BackendPlaySessionHandler with no backing client play session handler!"); "Initializing BackendPlaySessionHandler with no backing client play session handler!");
@@ -97,7 +98,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
if (PluginMessageUtil.isMcBrand(packet)) { if (PluginMessageUtil.isMcBrand(packet)) {
PluginMessage rewritten = PluginMessageUtil.rewriteMinecraftBrand(packet, PluginMessage rewritten = PluginMessageUtil.rewriteMinecraftBrand(packet,
server.getVersion()); server.getVersion());
serverConn.getPlayer().getConnection().write(rewritten); serverConn.getPlayer().getMinecraftConnection().write(rewritten);
return true; return true;
} }
@@ -111,7 +112,7 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
return false; return false;
} }
MinecraftConnection clientConn = serverConn.getPlayer().getConnection(); MinecraftConnection clientConn = serverConn.getPlayer().getMinecraftConnection();
PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), id, PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), id,
packet.getData()); packet.getData());
server.getEventManager().fire(event) server.getEventManager().fire(event)
@@ -156,12 +157,12 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
@Override @Override
public void handleGeneric(MinecraftPacket packet) { public void handleGeneric(MinecraftPacket packet) {
serverConn.getPlayer().getConnection().write(packet); serverConn.getPlayer().getMinecraftConnection().write(packet);
} }
@Override @Override
public void handleUnknown(ByteBuf buf) { public void handleUnknown(ByteBuf buf) {
serverConn.getPlayer().getConnection().write(buf.retain()); serverConn.getPlayer().getMinecraftConnection().write(buf.retain());
} }
@Override @Override

View File

@@ -114,7 +114,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
VelocityServerConnection existingConnection = serverConn.getPlayer().getConnectedServer(); VelocityServerConnection existingConnection = serverConn.getPlayer().getConnectedServer();
if (existingConnection == null) { if (existingConnection == null) {
// Strap on the play session handler // Strap on the play session handler
serverConn.getPlayer().getConnection() serverConn.getPlayer().getMinecraftConnection()
.setSessionHandler(new ClientPlaySessionHandler(server, serverConn.getPlayer())); .setSessionHandler(new ClientPlaySessionHandler(server, serverConn.getPlayer()));
} else { } else {
// For Legacy Forge // For Legacy Forge

View File

@@ -10,7 +10,6 @@ import static com.velocitypowered.proxy.network.Connections.MINECRAFT_ENCODER;
import static com.velocitypowered.proxy.network.Connections.READ_TIMEOUT; import static com.velocitypowered.proxy.network.Connections.READ_TIMEOUT;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.base.VerifyException;
import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.ConnectionRequestBuilder; import com.velocitypowered.api.proxy.ConnectionRequestBuilder;
import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.ServerConnection;
@@ -22,7 +21,6 @@ import com.velocitypowered.proxy.connection.ConnectionTypes;
import com.velocitypowered.proxy.connection.MinecraftConnection; import com.velocitypowered.proxy.connection.MinecraftConnection;
import com.velocitypowered.proxy.connection.MinecraftConnectionAssociation; import com.velocitypowered.proxy.connection.MinecraftConnectionAssociation;
import com.velocitypowered.proxy.connection.client.ConnectedPlayer; import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
import com.velocitypowered.proxy.connection.forge.legacy.LegacyForgeConstants;
import com.velocitypowered.proxy.protocol.ProtocolUtils; import com.velocitypowered.proxy.protocol.ProtocolUtils;
import com.velocitypowered.proxy.protocol.StateRegistry; import com.velocitypowered.proxy.protocol.StateRegistry;
import com.velocitypowered.proxy.protocol.netty.MinecraftDecoder; import com.velocitypowered.proxy.protocol.netty.MinecraftDecoder;
@@ -139,13 +137,13 @@ public class VelocityServerConnection implements MinecraftConnectionAssociation,
PlayerInfoForwarding forwardingMode = server.getConfiguration().getPlayerInfoForwardingMode(); PlayerInfoForwarding forwardingMode = server.getConfiguration().getPlayerInfoForwardingMode();
// Initiate the handshake. // Initiate the handshake.
ProtocolVersion protocolVersion = proxyPlayer.getConnection().getNextProtocolVersion(); ProtocolVersion protocolVersion = proxyPlayer.getMinecraftConnection().getNextProtocolVersion();
Handshake handshake = new Handshake(); Handshake handshake = new Handshake();
handshake.setNextStatus(StateRegistry.LOGIN_ID); handshake.setNextStatus(StateRegistry.LOGIN_ID);
handshake.setProtocolVersion(protocolVersion); handshake.setProtocolVersion(protocolVersion);
if (forwardingMode == PlayerInfoForwarding.LEGACY) { if (forwardingMode == PlayerInfoForwarding.LEGACY) {
handshake.setServerAddress(createLegacyForwardingAddress()); handshake.setServerAddress(createLegacyForwardingAddress());
} else if (proxyPlayer.getConnection().getType() == ConnectionTypes.LEGACY_FORGE) { } else if (proxyPlayer.getMinecraftConnection().getType() == ConnectionTypes.LEGACY_FORGE) {
handshake.setServerAddress(handshake.getServerAddress() + HANDSHAKE_HOSTNAME_TOKEN); handshake.setServerAddress(handshake.getServerAddress() + HANDSHAKE_HOSTNAME_TOKEN);
} else { } else {
handshake.setServerAddress(registeredServer.getServerInfo().getAddress().getHostString()); handshake.setServerAddress(registeredServer.getServerInfo().getAddress().getHostString());

View File

@@ -68,7 +68,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
public void activated() { public void activated() {
PluginMessage register = PluginMessageUtil.constructChannelsPacket(player.getProtocolVersion(), PluginMessage register = PluginMessageUtil.constructChannelsPacket(player.getProtocolVersion(),
server.getChannelRegistrar().getChannelsForProtocol(player.getProtocolVersion())); server.getChannelRegistrar().getChannelsForProtocol(player.getProtocolVersion()));
player.getConnection().write(register); player.getMinecraftConnection().write(register);
} }
@Override @Override
@@ -165,7 +165,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
resp.setLength(longestLength); resp.setLength(longestLength);
resp.getOffers().addAll(offers); resp.getOffers().addAll(offers);
player.getConnection().write(resp); player.getMinecraftConnection().write(resp);
return true; return true;
} }
} }
@@ -288,7 +288,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
public void writabilityChanged() { public void writabilityChanged() {
VelocityServerConnection serverConn = player.getConnectedServer(); VelocityServerConnection serverConn = player.getConnectedServer();
if (serverConn != null) { if (serverConn != null) {
boolean writable = player.getConnection().getChannel().isWritable(); boolean writable = player.getMinecraftConnection().getChannel().isWritable();
MinecraftConnection smc = serverConn.getConnection(); MinecraftConnection smc = serverConn.getConnection();
if (smc != null) { if (smc != null) {
smc.getChannel().config().setAutoRead(writable); smc.getChannel().config().setAutoRead(writable);
@@ -316,7 +316,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
if (!spawned) { if (!spawned) {
// Nothing special to do with regards to spawning the player // Nothing special to do with regards to spawning the player
spawned = true; spawned = true;
player.getConnection().delayedWrite(joinGame); player.getMinecraftConnection().delayedWrite(joinGame);
// Required for Legacy Forge // Required for Legacy Forge
player.getPhase().onFirstJoin(player); player.getPhase().onFirstJoin(player);
@@ -336,12 +336,12 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
// Most notably, by having the client accept the join game packet, we can work around the need // Most notably, by having the client accept the join game packet, we can work around the need
// to perform entity ID rewrites, eliminating potential issues from rewriting packets and // to perform entity ID rewrites, eliminating potential issues from rewriting packets and
// improving compatibility with mods. // improving compatibility with mods.
player.getConnection().delayedWrite(joinGame); player.getMinecraftConnection().delayedWrite(joinGame);
int tempDim = joinGame.getDimension() == 0 ? -1 : 0; int tempDim = joinGame.getDimension() == 0 ? -1 : 0;
player.getConnection().delayedWrite( player.getMinecraftConnection().delayedWrite(
new Respawn(tempDim, joinGame.getDifficulty(), joinGame.getGamemode(), new Respawn(tempDim, joinGame.getDifficulty(), joinGame.getGamemode(),
joinGame.getLevelType())); joinGame.getLevelType()));
player.getConnection().delayedWrite( player.getMinecraftConnection().delayedWrite(
new Respawn(joinGame.getDimension(), joinGame.getDifficulty(), joinGame.getGamemode(), new Respawn(joinGame.getDimension(), joinGame.getDifficulty(), joinGame.getGamemode(),
joinGame.getLevelType())); joinGame.getLevelType()));
} }
@@ -352,7 +352,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
BossBar deletePacket = new BossBar(); BossBar deletePacket = new BossBar();
deletePacket.setUuid(serverBossBar); deletePacket.setUuid(serverBossBar);
deletePacket.setAction(BossBar.REMOVE); deletePacket.setAction(BossBar.REMOVE);
player.getConnection().delayedWrite(deletePacket); player.getMinecraftConnection().delayedWrite(deletePacket);
} }
serverBossBars.clear(); serverBossBars.clear();
@@ -375,11 +375,11 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
} }
// Clear any title from the previous server. // Clear any title from the previous server.
player.getConnection() player.getMinecraftConnection()
.delayedWrite(TitlePacket.resetForProtocolVersion(player.getProtocolVersion())); .delayedWrite(TitlePacket.resetForProtocolVersion(player.getProtocolVersion()));
// Flush everything // Flush everything
player.getConnection().flush(); player.getMinecraftConnection().flush();
serverMc.flush(); serverMc.flush();
serverConn.completeJoin(); serverConn.completeJoin();
} }
@@ -417,7 +417,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
} }
} }
player.getConnection().write(response); player.getMinecraftConnection().write(response);
} }
/** /**

View File

@@ -70,7 +70,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
private static final Logger logger = LogManager.getLogger(ConnectedPlayer.class); private static final Logger logger = LogManager.getLogger(ConnectedPlayer.class);
private final MinecraftConnection connection; private final MinecraftConnection minecraftConnection;
private final @Nullable InetSocketAddress virtualHost; private final @Nullable InetSocketAddress virtualHost;
private GameProfile profile; private GameProfile profile;
private PermissionFunction permissionFunction; private PermissionFunction permissionFunction;
@@ -87,15 +87,15 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
@MonotonicNonNull @MonotonicNonNull
private List<String> serversToTry = null; private List<String> serversToTry = null;
ConnectedPlayer(VelocityServer server, GameProfile profile, MinecraftConnection connection, ConnectedPlayer(VelocityServer server, GameProfile profile,
@Nullable InetSocketAddress virtualHost) { MinecraftConnection minecraftConnection, @Nullable InetSocketAddress virtualHost) {
this.server = server; this.server = server;
this.tabList = new VelocityTabList(connection); this.tabList = new VelocityTabList(minecraftConnection);
this.profile = profile; this.profile = profile;
this.connection = connection; this.minecraftConnection = minecraftConnection;
this.virtualHost = virtualHost; this.virtualHost = virtualHost;
this.permissionFunction = PermissionFunction.ALWAYS_UNDEFINED; this.permissionFunction = PermissionFunction.ALWAYS_UNDEFINED;
this.connectionPhase = connection.getType().getInitialClientPhase(); this.connectionPhase = minecraftConnection.getType().getInitialClientPhase();
} }
@Override @Override
@@ -117,8 +117,8 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
return profile; return profile;
} }
public MinecraftConnection getConnection() { public MinecraftConnection getMinecraftConnection() {
return connection; return minecraftConnection;
} }
@Override @Override
@@ -151,7 +151,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
@Override @Override
public InetSocketAddress getRemoteAddress() { public InetSocketAddress getRemoteAddress() {
return (InetSocketAddress) connection.getRemoteAddress(); return (InetSocketAddress) minecraftConnection.getRemoteAddress();
} }
@Override @Override
@@ -165,12 +165,12 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
@Override @Override
public boolean isActive() { public boolean isActive() {
return connection.getChannel().isActive(); return minecraftConnection.getChannel().isActive();
} }
@Override @Override
public ProtocolVersion getProtocolVersion() { public ProtocolVersion getProtocolVersion() {
return connection.getProtocolVersion(); return minecraftConnection.getProtocolVersion();
} }
@Override @Override
@@ -186,7 +186,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
TitlePacket pkt = new TitlePacket(); TitlePacket pkt = new TitlePacket();
pkt.setAction(TitlePacket.SET_ACTION_BAR); pkt.setAction(TitlePacket.SET_ACTION_BAR);
pkt.setComponent(ComponentSerializers.JSON.serialize(component)); pkt.setComponent(ComponentSerializers.JSON.serialize(component));
connection.write(pkt); minecraftConnection.write(pkt);
return; return;
} else { } else {
// Due to issues with action bar packets, we'll need to convert the text message into a // Due to issues with action bar packets, we'll need to convert the text message into a
@@ -202,7 +202,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
Chat chat = new Chat(); Chat chat = new Chat();
chat.setType(pos); chat.setType(pos);
chat.setMessage(json); chat.setMessage(json);
connection.write(chat); minecraftConnection.write(chat);
} }
@Override @Override
@@ -238,23 +238,23 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
@Override @Override
public void disconnect(Component reason) { public void disconnect(Component reason) {
logger.info("{} has disconnected: {}", this, ComponentSerializers.LEGACY.serialize(reason)); logger.info("{} has disconnected: {}", this, ComponentSerializers.LEGACY.serialize(reason));
connection.closeWith(Disconnect.create(reason)); minecraftConnection.closeWith(Disconnect.create(reason));
} }
@Override @Override
public void sendTitle(Title title) { public void sendTitle(Title title) {
Preconditions.checkNotNull(title, "title"); Preconditions.checkNotNull(title, "title");
ProtocolVersion protocolVersion = minecraftConnection.getProtocolVersion();
if (title.equals(Titles.reset())) { if (title.equals(Titles.reset())) {
connection.write(TitlePacket.resetForProtocolVersion(connection.getProtocolVersion())); minecraftConnection.write(TitlePacket.resetForProtocolVersion(protocolVersion));
} else if (title.equals(Titles.hide())) { } else if (title.equals(Titles.hide())) {
connection.write(TitlePacket.hideForProtocolVersion(connection.getProtocolVersion())); minecraftConnection.write(TitlePacket.hideForProtocolVersion(protocolVersion));
} else if (title instanceof TextTitle) { } else if (title instanceof TextTitle) {
TextTitle tt = (TextTitle) title; TextTitle tt = (TextTitle) title;
if (tt.isResetBeforeSend()) { if (tt.isResetBeforeSend()) {
connection minecraftConnection.delayedWrite(TitlePacket.resetForProtocolVersion(protocolVersion));
.delayedWrite(TitlePacket.resetForProtocolVersion(connection.getProtocolVersion()));
} }
Optional<Component> titleText = tt.getTitle(); Optional<Component> titleText = tt.getTitle();
@@ -262,7 +262,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
TitlePacket titlePkt = new TitlePacket(); TitlePacket titlePkt = new TitlePacket();
titlePkt.setAction(TitlePacket.SET_TITLE); titlePkt.setAction(TitlePacket.SET_TITLE);
titlePkt.setComponent(ComponentSerializers.JSON.serialize(titleText.get())); titlePkt.setComponent(ComponentSerializers.JSON.serialize(titleText.get()));
connection.delayedWrite(titlePkt); minecraftConnection.delayedWrite(titlePkt);
} }
Optional<Component> subtitleText = tt.getSubtitle(); Optional<Component> subtitleText = tt.getSubtitle();
@@ -270,17 +270,17 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
TitlePacket titlePkt = new TitlePacket(); TitlePacket titlePkt = new TitlePacket();
titlePkt.setAction(TitlePacket.SET_SUBTITLE); titlePkt.setAction(TitlePacket.SET_SUBTITLE);
titlePkt.setComponent(ComponentSerializers.JSON.serialize(subtitleText.get())); titlePkt.setComponent(ComponentSerializers.JSON.serialize(subtitleText.get()));
connection.delayedWrite(titlePkt); minecraftConnection.delayedWrite(titlePkt);
} }
if (tt.areTimesSet()) { if (tt.areTimesSet()) {
TitlePacket timesPkt = TitlePacket.timesForProtocolVersion(connection.getProtocolVersion()); TitlePacket timesPkt = TitlePacket.timesForProtocolVersion(protocolVersion);
timesPkt.setFadeIn(tt.getFadeIn()); timesPkt.setFadeIn(tt.getFadeIn());
timesPkt.setStay(tt.getStay()); timesPkt.setStay(tt.getStay());
timesPkt.setFadeOut(tt.getFadeOut()); timesPkt.setFadeOut(tt.getFadeOut());
connection.delayedWrite(timesPkt); minecraftConnection.delayedWrite(timesPkt);
} }
connection.flush(); minecraftConnection.flush();
} else { } else {
throw new IllegalArgumentException("Unknown title class " + title.getClass().getName()); throw new IllegalArgumentException("Unknown title class " + title.getClass().getName());
} }
@@ -388,7 +388,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
// In case someone gets creative, assume we want to disconnect the player. // In case someone gets creative, assume we want to disconnect the player.
disconnect(friendlyReason); disconnect(friendlyReason);
} }
}, connection.eventLoop()); }, minecraftConnection.eventLoop());
} }
} }
@@ -477,7 +477,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
PluginMessage message = new PluginMessage(); PluginMessage message = new PluginMessage();
message.setChannel(identifier.getId()); message.setChannel(identifier.getId());
message.setData(data); message.setData(data);
connection.write(message); minecraftConnection.write(message);
return true; return true;
} }
@@ -496,7 +496,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
ResourcePackRequest request = new ResourcePackRequest(); ResourcePackRequest request = new ResourcePackRequest();
request.setUrl(url); request.setUrl(url);
request.setHash(""); request.setHash("");
connection.write(request); minecraftConnection.write(request);
} }
@Override @Override
@@ -508,7 +508,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
ResourcePackRequest request = new ResourcePackRequest(); ResourcePackRequest request = new ResourcePackRequest();
request.setUrl(url); request.setUrl(url);
request.setHash(ByteBufUtil.hexDump(hash)); request.setHash(ByteBufUtil.hexDump(hash));
connection.write(request); minecraftConnection.write(request);
} }
/** /**
@@ -517,10 +517,10 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
* ID last sent by the server. * ID last sent by the server.
*/ */
public void sendKeepAlive() { public void sendKeepAlive() {
if (connection.getState() == StateRegistry.PLAY) { if (minecraftConnection.getState() == StateRegistry.PLAY) {
KeepAlive keepAlive = new KeepAlive(); KeepAlive keepAlive = new KeepAlive();
keepAlive.setRandomId(ThreadLocalRandom.current().nextLong()); keepAlive.setRandomId(ThreadLocalRandom.current().nextLong());
connection.write(keepAlive); minecraftConnection.write(keepAlive);
} }
} }
@@ -632,7 +632,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player {
// The only remaining value is successful (no need to do anything!) // The only remaining value is successful (no need to do anything!)
break; break;
} }
}, connection.eventLoop()) }, minecraftConnection.eventLoop())
.thenApply(Result::isSuccessful); .thenApply(Result::isSuccessful);
} }

View File

@@ -114,7 +114,7 @@ public enum LegacyForgeHandshakeBackendPhase implements BackendConnectionPhase {
serverConnection.setConnectionPhase(newPhase); serverConnection.setConnectionPhase(newPhase);
// Write the packet to the player, we don't need it now. // Write the packet to the player, we don't need it now.
player.getConnection().write(message); player.getMinecraftConnection().write(message);
return true; return true;
} }

View File

@@ -137,7 +137,7 @@ public enum LegacyForgeHandshakeClientPhase implements ClientConnectionPhase {
COMPLETE(null) { COMPLETE(null) {
@Override @Override
public void resetConnectionPhase(ConnectedPlayer player) { public void resetConnectionPhase(ConnectedPlayer player) {
player.getConnection().write(LegacyForgeUtil.resetPacket()); player.getMinecraftConnection().write(LegacyForgeUtil.resetPacket());
player.setPhase(LegacyForgeHandshakeClientPhase.NOT_STARTED); player.setPhase(LegacyForgeHandshakeClientPhase.NOT_STARTED);
} }