netty5/license
Carl Mastrangelo 65d8ecc3a0 Use Table lookup for HPACK decoder (#9307)
Motivation:
Table based decoding is fast.

Modification:
Use table based decoding in HPACK decoder, inspired by
https://github.com/python-hyper/hpack/blob/master/hpack/huffman_table.py

This modifies the table to be based on integers, rather than 3-tuples of
bytes.  This is for two reasons:

1.  It's faster
2.  Using bytes makes the static intializer too big, and doesn't
compile.

Result:
Faster Huffman decoding.  This only seems to help the ascii case, the
other decoding is about the same.

Benchmarks:

```
Before:
Benchmark                     (limitToAscii)  (sensitive)  (size)   Mode  Cnt        Score       Error  Units
HpackDecoderBenchmark.decode            true         true   SMALL  thrpt   20   426293.636 ±  1444.843  ops/s
HpackDecoderBenchmark.decode            true         true  MEDIUM  thrpt   20    57843.738 ±   725.704  ops/s
HpackDecoderBenchmark.decode            true         true   LARGE  thrpt   20     3002.412 ±    16.998  ops/s
HpackDecoderBenchmark.decode            true        false   SMALL  thrpt   20   412339.400 ±  1128.394  ops/s
HpackDecoderBenchmark.decode            true        false  MEDIUM  thrpt   20    58226.870 ±   199.591  ops/s
HpackDecoderBenchmark.decode            true        false   LARGE  thrpt   20     3044.256 ±    10.675  ops/s
HpackDecoderBenchmark.decode           false         true   SMALL  thrpt   20  2082615.030 ±  5929.726  ops/s
HpackDecoderBenchmark.decode           false         true  MEDIUM  thrpt   10   571640.454 ± 26499.229  ops/s
HpackDecoderBenchmark.decode           false         true   LARGE  thrpt   20    92714.555 ±  2292.222  ops/s
HpackDecoderBenchmark.decode           false        false   SMALL  thrpt   20  1745872.421 ±  6788.840  ops/s
HpackDecoderBenchmark.decode           false        false  MEDIUM  thrpt   20   490420.323 ±  2455.431  ops/s
HpackDecoderBenchmark.decode           false        false   LARGE  thrpt   20    84536.200 ±   398.714  ops/s

After(bytes):
Benchmark                     (limitToAscii)  (sensitive)  (size)   Mode  Cnt        Score      Error  Units
HpackDecoderBenchmark.decode            true         true   SMALL  thrpt   20   472649.148 ± 7122.461  ops/s
HpackDecoderBenchmark.decode            true         true  MEDIUM  thrpt   20    66739.638 ±  341.607  ops/s
HpackDecoderBenchmark.decode            true         true   LARGE  thrpt   20     3139.773 ±   24.491  ops/s
HpackDecoderBenchmark.decode            true        false   SMALL  thrpt   20   466933.833 ± 4514.971  ops/s
HpackDecoderBenchmark.decode            true        false  MEDIUM  thrpt   20    66111.778 ±  568.326  ops/s
HpackDecoderBenchmark.decode            true        false   LARGE  thrpt   20     3143.619 ±    3.332  ops/s
HpackDecoderBenchmark.decode           false         true   SMALL  thrpt   20  2109995.177 ± 6203.143  ops/s
HpackDecoderBenchmark.decode           false         true  MEDIUM  thrpt   20   586026.055 ± 1578.550  ops/s
HpackDecoderBenchmark.decode           false        false   SMALL  thrpt   20  1775723.270 ± 4932.057  ops/s
HpackDecoderBenchmark.decode           false        false  MEDIUM  thrpt   20   493316.467 ± 1453.037  ops/s
HpackDecoderBenchmark.decode           false        false   LARGE  thrpt   10    85726.219 ±  402.573  ops/s

After(ints):
Benchmark                     (limitToAscii)  (sensitive)  (size)   Mode  Cnt        Score       Error  Units
HpackDecoderBenchmark.decode            true         true   SMALL  thrpt   20   615549.006 ±  5282.283  ops/s
HpackDecoderBenchmark.decode            true         true  MEDIUM  thrpt   20    86714.630 ±   654.489  ops/s
HpackDecoderBenchmark.decode            true         true   LARGE  thrpt   20     3984.439 ±    61.612  ops/s
HpackDecoderBenchmark.decode            true        false   SMALL  thrpt   20   602489.337 ±  5397.024  ops/s
HpackDecoderBenchmark.decode            true        false  MEDIUM  thrpt   20    88399.109 ±   241.115  ops/s
HpackDecoderBenchmark.decode            true        false   LARGE  thrpt   20     3875.729 ±   103.057  ops/s
HpackDecoderBenchmark.decode           false         true   SMALL  thrpt   20  2092165.454 ± 11918.859  ops/s
HpackDecoderBenchmark.decode           false         true  MEDIUM  thrpt   20   583465.437 ±  5452.115  ops/s
HpackDecoderBenchmark.decode           false         true   LARGE  thrpt   20    93290.061 ±   665.904  ops/s
HpackDecoderBenchmark.decode           false        false   SMALL  thrpt   20  1758402.495 ± 14677.438  ops/s
HpackDecoderBenchmark.decode           false        false  MEDIUM  thrpt   10   491598.099 ±  5029.698  ops/s
HpackDecoderBenchmark.decode           false        false   LARGE  thrpt   20    85834.290 ±   554.915  ops/s
```
2019-07-02 20:13:19 +02:00
..
LICENSE.aalto-xml.txt Integrate non-blocking XML parser as Netty codec (#2806) 2015-02-19 13:46:14 +01:00
LICENSE.base64.txt * Moved all third party license filed into the 'license' directory 2008-12-30 02:41:09 +00:00
LICENSE.bouncycastle.txt Preparation for porting OpenSSL support in 3.10 2014-05-17 20:01:30 +09:00
LICENSE.caliper.txt Update license notices and dependencies 2012-12-14 00:38:05 +09:00
LICENSE.commons-lang.txt [#4331] Helper methods to get charset from Content-Type header of HttpMessage 2015-11-19 15:59:34 -08:00
LICENSE.commons-logging.txt * Moved all third party license filed into the 'license' directory 2008-12-30 02:41:09 +00:00
LICENSE.compress-lzf.txt Implemented LZF compression codec 2014-07-17 07:18:07 +02:00
LICENSE.harmony.txt Introduce TextHeaders and AsciiString 2014-06-14 15:36:19 +09:00
LICENSE.hpack.txt Forking Twitter's hpack 2015-11-14 10:13:32 -08:00
LICENSE.hyper-hpack.txt Use Table lookup for HPACK decoder (#9307) 2019-07-02 20:13:19 +02:00
LICENSE.jboss-marshalling.txt Updated jboss-marshalling dependency to current license (#9172) 2019-05-23 07:21:57 +02:00
LICENSE.jbzip2.txt Implement a Bzip2Decoder 2014-06-24 14:50:09 +09:00
LICENSE.jctools.txt Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
LICENSE.jfastlz.txt Implemented FastLZ compression codec 2014-08-12 15:14:59 -07:00
LICENSE.jsr166y.txt * Moved all third party license filed into the 'license' directory 2008-12-30 02:41:09 +00:00
LICENSE.jzlib.txt Add back jzlib license file and notice 2013-02-21 14:00:59 -08:00
LICENSE.libdivsufsort.txt Implemented a Bzip2Encoder 2014-07-17 16:19:39 +02:00
LICENSE.log4j.txt * Moved all third party license filed into the 'license' directory 2008-12-30 02:41:09 +00:00
LICENSE.lz4.txt Implemented LZ4 compression codec 2014-08-14 15:05:24 -07:00
LICENSE.lzma-java.txt Remove reference to akka code and ArrayDeque which is not part of netty anymore 2017-03-07 21:30:51 +01:00
LICENSE.mvn-wrapper.txt Include mvn wrapper to make setup of development env easier 2018-01-26 08:13:17 +01:00
LICENSE.nghttp2-hpack.txt Use Table lookup for HPACK decoder (#9307) 2019-07-02 20:13:19 +02:00
LICENSE.protobuf.txt added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
LICENSE.slf4j.txt * Moved all third party license filed into the 'license' directory 2008-12-30 02:41:09 +00:00
LICENSE.snappy.txt Add Snappy compression codec 2012-12-18 21:09:31 +01:00
LICENSE.webbit.txt Added webbit license and credits 2011-10-27 10:34:37 +11:00
NOTICE.harmony.txt Add the NOTICE of the forked portion of Apache Harmony 2018-01-30 11:22:51 +01:00