netty5/transport/src/main/java/io/netty/channel
Norman Maurer 8f7ef1cabb
Skip execution of Channel*Handler method if annotated with @Skip and … (#8988)
Motivation:

Invoking ChannelHandlers is not free and can result in some overhead when the ChannelPipeline becomes very long. This is especially true if most handlers will just forward the call to the next handler in the pipeline. When the user extends Channel*HandlerAdapter we can easily detect if can just skip the handler and invoke the next handler in the pipeline directly. This reduce the overhead of dispatch but also reduce the call-stack in many cases.

This backports https://github.com/netty/netty/pull/8723 and https://github.com/netty/netty/pull/8987 to 4.1

Modifications:

Detect if we can skip the handler when walking the pipeline.

Result:

Reduce overhead for long pipelines.

Benchmark                                       (extraHandlers)   Mode  Cnt       Score      Error  Units
DefaultChannelPipelineBenchmark.propagateEventOld             4  thrpt   10  267313.031 ± 9131.140  ops/s
DefaultChannelPipelineBenchmark.propagateEvent                4  thrpt   10  824825.673 ± 12727.594  ops/s
2019-04-09 09:36:52 +02:00
..
embedded Add a hint of ownership transfer when calling EmbeddedChannel.read*() methods. 2017-12-20 07:44:25 +01:00
group Simplify DefaultChannelGroup.contains(...) and so remove one instanceof check. 2018-03-17 09:45:24 +01:00
internal Enforce writeSpinCount to limit resource consumption per socket (#7478) 2017-12-07 16:00:52 -08:00
local Respect MAX_MESSAGES_PER_READ in LocalChannel / LocalServerChannel. (#7885) 2018-04-26 07:58:56 +02:00
nio Introduce SingleThreadEventLoop.registeredChannels (#8428) 2019-03-28 11:33:12 +00:00
oio Remove @Deprecated from package-info.java file (#8591) 2018-11-23 17:03:29 +01:00
pool Update to new checkstyle plugin (#8777) (#8780) 2019-01-25 11:58:42 +01:00
socket use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
AbstractChannel.java DefaultFileRegion.transferTo with invalid count may cause busy-spin (#8885) 2019-02-26 11:08:09 +01:00
AbstractChannelHandlerContext.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
AbstractCoalescingBufferQueue.java Fix minor spelling issues in javadocs (#8701) 2019-01-14 07:24:34 +01:00
AbstractEventLoop.java Implement EventExecutor.parent() in AbstractEventExecutor 2014-03-24 11:05:51 +09:00
AbstractEventLoopGroup.java Add EventExecutor.children() in favor of iterator() 2014-03-24 12:32:55 +09:00
AbstractServerChannel.java Fix assertion error when closing / shutdown native channel and SO_LINGER is set. 2017-09-18 14:46:37 -07:00
AdaptiveRecvByteBufAllocator.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
AddressedEnvelope.java Enable a user specify an arbitrary information with ReferenceCounted.touch() 2014-02-13 18:16:25 -08:00
Channel.java Typo error: Method invoker() no longer exists 2017-01-19 12:16:31 +01:00
ChannelConfig.java Clarify deprecation docs a bit. (#8226) 2018-08-25 08:14:38 +02:00
ChannelDuplexHandler.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
ChannelException.java
ChannelFactory.java Name resolver API and DNS-based name resolver 2014-10-16 17:05:20 +09:00
ChannelFlushPromiseNotifier.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
ChannelFuture.java trivial javadoc fixes 2016-03-16 20:18:29 +01:00
ChannelFutureListener.java
ChannelHandler.java Add @SupressWarnings("deprecation") to ChannelInboundHandlerAdapter and clarify deprecation in ChannelHandler (#9001) 2019-04-02 20:52:06 +02:00
ChannelHandlerAdapter.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
ChannelHandlerContext.java Rename ChannelHandlerContext#fireUserEventTriggered() argument from event to evt so it matches the ChannelInboundHandler#userEventTriggered() argument's name. 2016-07-07 17:01:19 +02:00
ChannelHandlerMask.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
ChannelId.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelInboundHandler.java Add @Deprecated when the javadoc says its deprecated 2016-05-01 20:30:13 +02:00
ChannelInboundHandlerAdapter.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
ChannelInboundInvoker.java Add ChannelInboundInvoker and ChannelOutboundInvoker 2016-05-14 20:41:13 +02:00
ChannelInitializer.java More correct fix for using ChannelInitializer with custom EventExecutor. (#8633) 2018-12-07 19:12:06 +01:00
ChannelMetadata.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
ChannelOption.java Deprecate ChannelOption.newInstance(...) (#8997) 2019-04-05 12:09:54 +02:00
ChannelOutboundBuffer.java Factor out less common code-path into own method to allow inlining. (#8590) 2018-11-25 21:46:14 +01:00
ChannelOutboundHandler.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelOutboundHandlerAdapter.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
ChannelOutboundInvoker.java Add ChannelInboundInvoker and ChannelOutboundInvoker 2016-05-14 20:41:13 +02:00
ChannelPipeline.java cleanup: fix indent (#8734) 2019-01-19 17:40:55 +01:00
ChannelPipelineException.java
ChannelProgressiveFuture.java Make EventExecutor.shutdownGracefully() return Future 2013-06-12 08:00:54 +09:00
ChannelProgressiveFutureListener.java
ChannelProgressivePromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ChannelPromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ChannelPromiseAggregator.java Deprecate PromiseAggregator 2016-03-14 10:53:30 -07:00
ChannelPromiseNotifier.java [#5598] Ensure SslHandler not log false-positives when try to close the channel due timeout. 2016-07-30 21:15:09 +02:00
CoalescingBufferQueue.java HTTP/2 write of released buffer should not write and should fail the promise 2017-11-06 14:38:58 -08:00
CombinedChannelDuplexHandler.java Cleanup: replaced deprecated ctx.attr() and ctx.hasAttr() methods usage with ch.attr() and ch.hasAttr(). 2018-01-18 15:00:41 +00:00
CompleteChannelFuture.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ConnectTimeoutException.java
DefaultAddressedEnvelope.java Revamp DNS codec 2015-05-01 11:33:16 +09:00
DefaultChannelConfig.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
DefaultChannelHandlerContext.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
DefaultChannelId.java Optimize DefaultChannelId.equals 2017-09-08 10:36:48 +02:00
DefaultChannelPipeline.java Skip execution of Channel*Handler method if annotated with @Skip and … (#8988) 2019-04-09 09:36:52 +02:00
DefaultChannelProgressivePromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
DefaultChannelPromise.java Fail fast when DefaultChannelPromise is constructed with null as Channel. 2018-01-18 18:57:42 +00:00
DefaultEventLoop.java Replace LocalEventLoopGroup with DefaultEventLoopGroup 2014-03-24 11:39:55 +09:00
DefaultEventLoopGroup.java [#5763] DefaultEventLoopGroup doesn't expose ctor variant that accepts custom Executor 2016-09-01 08:20:05 +02:00
DefaultFileRegion.java DefaultFileRegion.transferTo with invalid count may cause busy-spin (#8885) 2019-02-26 11:08:09 +01:00
DefaultMaxBytesRecvByteBufAllocator.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
DefaultMaxMessagesRecvByteBufAllocator.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
DefaultMessageSizeEstimator.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
DefaultSelectStrategy.java EPOLL SelectStrategy 2016-03-30 15:11:35 -07:00
DefaultSelectStrategyFactory.java EPOLL SelectStrategy 2016-03-30 15:11:35 -07:00
DelegatingChannelPromiseNotifier.java Not log notify failure for DelegatingChannelPromiseNotifier when promise is VoidChannelPromise 2017-09-07 08:58:39 +02:00
EventLoop.java [#5486] Not operate on serial execution assumption when using EventExecutor in the DefaultChannelPipeline. 2016-07-07 15:01:56 +02:00
EventLoopException.java Fix types in javadocs 2013-07-22 19:14:36 +02:00
EventLoopGroup.java Add a EventLoopGroup.register(ChannelPromise) 2016-05-21 18:40:17 +02:00
ExtendedClosedChannelException.java Include the original Exception that caused the Channel to be closed in the ClosedChannelException (#8863) 2019-02-15 13:13:17 -08:00
FailedChannelFuture.java Fix most inspector warnings 2014-07-02 19:55:07 +09:00
FileRegion.java Fix minor spelling issues in javadocs (#8701) 2019-01-14 07:24:34 +01:00
FixedRecvByteBufAllocator.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00
MaxBytesRecvByteBufAllocator.java Fix errors reported by javadoc 2015-12-27 08:36:45 +01:00
MaxMessagesRecvByteBufAllocator.java maxBytesPerRead channel configuration 2015-08-05 23:59:54 -07:00
MessageSizeEstimator.java Correctly update Channel.isWritable() when the write happens from outside the EventLoop in a fast fashion. Fixes [#1697] 2013-08-07 10:10:43 +02:00
MultithreadEventLoopGroup.java Enable configuring available processors 2017-04-23 10:31:17 +02:00
package-info.java
PendingBytesTracker.java Correctly update Channel writability when queueing data in SslHandler. 2017-10-24 09:13:15 +02:00
PendingWriteQueue.java Tighten up contract of PromiseCombiner and so make it more safe to use (#8886) 2019-02-28 20:32:04 +01:00
PreferHeapByteBufAllocator.java We should prefer heap buffers when using the OIO transport to reduce memory copies. 2017-08-11 08:48:04 +02:00
RecvByteBufAllocator.java Remove extra 'should' word in docs of continueReading() method 2018-07-11 10:19:03 +01:00
ReflectiveChannelFactory.java Access the Constructor of the Channel in the constructor of ReflectiveChannelFactory. (#8718) 2019-01-15 08:38:13 +01:00
SelectStrategy.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
SelectStrategyFactory.java Allow to customize NIO (channel) select strategies. 2016-03-30 15:01:25 -07:00
ServerChannel.java
SimpleChannelInboundHandler.java Fix javadoc issues 2017-02-22 07:31:07 +01:00
SimpleUserEventChannelHandler.java Create SimpleUserEventChannelHandler convenience class (#7991) 2018-06-29 08:25:23 +02:00
SingleThreadEventLoop.java Introduce SingleThreadEventLoop.registeredChannels (#8428) 2019-03-28 11:33:12 +00:00
SucceededChannelFuture.java Fix most inspector warnings 2014-07-02 19:55:07 +09:00
ThreadPerChannelEventLoop.java Introduce SingleThreadEventLoop.registeredChannels (#8428) 2019-03-28 11:33:12 +00:00
ThreadPerChannelEventLoopGroup.java Mark OIO based transports as deprecated as preparation for removal in Netty 5. (#8579) 2018-11-21 15:15:01 +01:00
VoidChannelPromise.java Add java-doc for implemented methods of io.netty.util.concurrent.Future#cancel(boolean mayInterruptIfRunning) 2018-01-29 11:19:52 +01:00
WriteBufferWaterMark.java use checkPositive/checkPositiveOrZero (#8803) 2019-01-31 09:07:14 +01:00