From b7ceeb1797c4edd23b0f1bc1e9c56f0d847a28de Mon Sep 17 00:00:00 2001 From: Dmitriy Dumanskiy Date: Wed, 30 Jan 2019 22:17:00 +0200 Subject: [PATCH] Compare HttpMethod by reference (#8815) Motivation: In most cases, HttpMethod instance is built from the factory method and the same instance is taken for known Http Methods. So we can implement fast path for equals(). Modification: Replace == checks with HttpMethod.equals; Use this == o within HttpMethod.equals; Replaced known new HttpMethod with HttpMethod.valueOf; Result: Comparisons should be a bit faster in some cases. --- .../codec/http/HttpContentEncoder.java | 6 ++--- .../netty/handler/codec/http/HttpMethod.java | 6 +++++ .../handler/codec/http/HttpServerCodec.java | 3 ++- .../handler/codec/http/cors/CorsHandler.java | 2 +- ...bSocketServerProtocolHandshakeHandler.java | 2 +- .../netty/handler/codec/rtsp/RtspMethods.java | 22 +++++++++---------- .../file/HttpStaticFileServerHandler.java | 2 +- .../http/upload/HttpUploadServerHandler.java | 2 +- .../WebSocketServerHandler.java | 2 +- .../server/WebSocketIndexPageHandler.java | 2 +- .../autobahn/AutobahnServerHandler.java | 2 +- 11 files changed, 29 insertions(+), 22 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentEncoder.java index 4c18933f38..659ec4b474 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpContentEncoder.java @@ -78,10 +78,10 @@ public abstract class HttpContentEncoder extends MessageToMessageCodec { @Override public boolean equals(Object o) { + if (this == o) { + return true; + } if (!(o instanceof HttpMethod)) { return false; } @@ -171,6 +174,9 @@ public class HttpMethod implements Comparable { @Override public int compareTo(HttpMethod o) { + if (o == this) { + return 0; + } return name().compareTo(o.name()); } diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java index 411fc8827d..ccd3123727 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java @@ -115,7 +115,8 @@ public final class HttpServerCodec extends CombinedChannelDuplexHandler methodMap = new HashMap<>(); @@ -130,7 +130,7 @@ public final class RtspMethods { if (result != null) { return result; } else { - return new HttpMethod(name); + return HttpMethod.valueOf(name); } } diff --git a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java index e2a801324d..8095fe419c 100644 --- a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java +++ b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java @@ -117,7 +117,7 @@ public class HttpStaticFileServerHandler extends SimpleChannelInboundHandler } // Allow only GET methods. - if (req.method() != GET) { + if (!GET.equals(req.method())) { sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HTTP_1_1, FORBIDDEN)); return; } diff --git a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketIndexPageHandler.java b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketIndexPageHandler.java index 7d543ce399..124415d12a 100644 --- a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketIndexPageHandler.java +++ b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketIndexPageHandler.java @@ -58,7 +58,7 @@ public class WebSocketIndexPageHandler extends SimpleChannelInboundHandler