From 77101ab8af0b14f7d96de394f13886dcb49733c4 Mon Sep 17 00:00:00 2001 From: feijermu Date: Mon, 13 Jul 2020 23:34:29 +0800 Subject: [PATCH] Eliminate a redundant method call in HpackDynamicTable.add(...) (#10399) Motivation: The result of `header.size()` is already cached in `headerSize`. There is no need to call it again actually. Modification: Replace the second `header.size()` with `headerSize` directly. Result: Improve performance slightly. --- .../codec/http2/HpackDynamicTable.java | 2 +- .../codec/http2/HpackDynamicTableTest.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/HpackDynamicTable.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/HpackDynamicTable.java index f45d26cb32..a8cbfd5813 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/HpackDynamicTable.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/HpackDynamicTable.java @@ -109,7 +109,7 @@ final class HpackDynamicTable { remove(); } hpackHeaderFields[head++] = header; - size += header.size(); + size += headerSize; if (head == hpackHeaderFields.length) { head = 0; } diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/HpackDynamicTableTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/HpackDynamicTableTest.java index 235c5dd5b7..8dbc84d930 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/HpackDynamicTableTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/HpackDynamicTableTest.java @@ -103,4 +103,28 @@ public class HpackDynamicTableTest { assertEquals(0, table.length()); assertEquals(0, table.size()); } + + @Test + public void testAdd() { + HpackDynamicTable table = new HpackDynamicTable(100); + assertEquals(0, table.size()); + HpackHeaderField entry1 = new HpackHeaderField("foo", "bar"); //size:3+3+32=38 + HpackHeaderField entry2 = new HpackHeaderField("hello", "world"); + table.add(entry1); //success + assertEquals(entry1.size(), table.size()); + table.setCapacity(32); //entry1 is removed from table + assertEquals(0, table.size()); + assertEquals(0, table.length()); + table.add(entry1); //fail quietly + assertEquals(0, table.size()); + assertEquals(0, table.length()); + table.setCapacity(64); + table.add(entry1); //success + assertEquals(entry1.size(), table.size()); + assertEquals(1, table.length()); + table.add(entry2); //entry2 is added, but entry1 is removed from table + assertEquals(entry2.size(), table.size()); + assertEquals(1, table.length()); + assertEquals(entry2, table.getEntry(1)); + } }