From 4b76afc786dffb620644902c744890e3e22957b9 Mon Sep 17 00:00:00 2001 From: YHM404 Date: Wed, 10 Jul 2024 15:42:14 +0800 Subject: [PATCH 1/2] Add benchmark tests for parsing data frames --- http2/frame_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/http2/frame_test.go b/http2/frame_test.go index 86e5d4f80d..cd5842ba48 100644 --- a/http2/frame_test.go +++ b/http2/frame_test.go @@ -1258,3 +1258,20 @@ func TestSettingsDuplicates(t *testing.T) { } } + +func BenchmarkParseDataFrames(b *testing.B) { + fr, _ := testFramer() + fr.SetReuseFrames() + payload := []byte("foo") + for i := 0; i < b.N; i++ { + parseDataFrame(fr.frameCache, FrameHeader{StreamID: 3}, func(s string) {}, payload) + } +} + +func BenchmarkParseDataFramesWithoutReuse(b *testing.B) { + fr, _ := testFramer() + payload := []byte("foo") + for i := 0; i < b.N; i++ { + parseDataFrame(fr.frameCache, FrameHeader{StreamID: 3}, func(s string) {}, payload) + } +} From dd62f38f0705f5d2997b1343b10851a089c7d3a1 Mon Sep 17 00:00:00 2001 From: YHM404 Date: Wed, 10 Jul 2024 15:41:23 +0800 Subject: [PATCH 2/2] Set frame reuse in server and client connections --- http2/server.go | 1 + http2/transport.go | 1 + 2 files changed, 2 insertions(+) diff --git a/http2/server.go b/http2/server.go index 6c349f3ec6..86b78c7ec1 100644 --- a/http2/server.go +++ b/http2/server.go @@ -494,6 +494,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize()) fr := NewFramer(sc.bw, c) + fr.SetReuseFrames() if s.CountError != nil { fr.countError = s.CountError } diff --git a/http2/transport.go b/http2/transport.go index 61f511f97a..64c38c5f35 100644 --- a/http2/transport.go +++ b/http2/transport.go @@ -813,6 +813,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro }) cc.br = bufio.NewReader(c) cc.fr = NewFramer(cc.bw, cc.br) + cc.fr.SetReuseFrames() if t.maxFrameReadSize() != 0 { cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize()) }