netty5/codec-http2/src/test/java/io/netty/handler/codec/http2
Louis Ryan 05ce33f5ca Make the flow-controllers write fewer, fatter frames to improve throughput.
Motivation:

Coalescing many small writes into a larger DATA frame reduces framing overheads on the wire and reduces the number of calls to Http2FrameListeners on the remote side.
Delaying the write of WINDOW_UPDATE until flush allows for more consumed bytes to be returned as the aggregate of consumed bytes is returned and not the amount consumed when the threshold was crossed.

Modifications:
- Remote flow controller no longer immediately writes bytes when a flow-controlled payload is enqueued. Sequential data payloads are now merged into a single CompositeByteBuf which are written when 'writePendingBytes' is called.
- Listener added to remote flow-controller which observes written bytes per stream.
- Local flow-controller no longer immediately writes WINDOW_UPDATE when the ratio threshold is crossed. Now an explicit call to 'writeWindowUpdates' triggers the WINDOW_UPDATE for all streams who's ratio is exceeded at that time. This results in
  fewer window updates being sent and more bytes being returned.
- Http2ConnectionHandler.flush triggers 'writeWindowUpdates' on the local flow-controller followed by 'writePendingBytes' on the remote flow-controller so WINDOW_UPDATES preceed DATA frames on the wire.

Result:
- Better throughput for writing many small DATA chunks followed by a flush, saving 9-bytes per coalesced frame.
- Fewer WINDOW_UPDATES being written and more flow-control bytes returned to remote side more quickly, thereby improving throughput.
2015-06-19 15:20:31 -07:00
..
DataCompressionHttp2Test.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
DefaultHttp2ConnectionDecoderTest.java Allowing inbound HTTP/2 frames after sending GOAWAY 2015-05-05 15:03:56 -07:00
DefaultHttp2ConnectionEncoderTest.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
DefaultHttp2ConnectionTest.java Allowing inbound HTTP/2 frames after sending GOAWAY 2015-05-05 15:03:56 -07:00
DefaultHttp2FrameIOTest.java Fixing isDone in SimpleChannelPromiseAggregator 2015-05-05 12:46:23 -07:00
DefaultHttp2HeadersDecoderTest.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
DefaultHttp2HeadersEncoderTest.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
DefaultHttp2HeadersTest.java ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
DefaultHttp2LocalFlowControllerTest.java Have Http2LocalFlowController.consumeBytes indicate whether a WINDOW_UPDATE was written 2015-05-04 13:22:18 -07:00
DefaultHttp2RemoteFlowControllerTest.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
Http2ConnectionHandlerTest.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
Http2ConnectionRoundtripTest.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
Http2FrameRoundtripTest.java Do not use hard-coded handler names in HTTP/2 2015-06-10 11:46:02 +09:00
Http2HeaderBlockIOTest.java Back port HTTP/2 codec from master to 4.1 2015-01-23 11:06:11 -05:00
Http2SettingsTest.java Change Http2Settings to use char keys. 2015-04-10 11:50:24 -07:00
Http2TestUtil.java HTTP/2 Flow Controller required memory reduction 2015-04-22 14:40:21 -07:00
HttpToHttp2ConnectionHandlerTest.java Removing debugging change from unit test. 2015-02-11 09:07:08 -08:00
InboundHttp2ToHttpAdapterTest.java Do not use hard-coded handler names in HTTP/2 2015-06-10 11:46:02 +09:00
StreamBufferingEncoderTest.java Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00