From e0b97db7cc50f9324fa3d81e484a303c33485ff2 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Sun, 27 Dec 2020 21:40:59 +0000 Subject: [PATCH] Add unordered benchmark for RecvDataFromRemote --- internal/multiplex/session_test.go | 41 ++++++++++++++++++------------ 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/internal/multiplex/session_test.go b/internal/multiplex/session_test.go index ebd305e..b2eb76a 100644 --- a/internal/multiplex/session_test.go +++ b/internal/multiplex/session_test.go @@ -4,6 +4,7 @@ import ( "bytes" "github.com/cbeuw/connutil" "github.com/stretchr/testify/assert" + "io/ioutil" "math/rand" "strconv" "sync" @@ -415,7 +416,7 @@ func TestSession_timeoutAfter(t *testing.T) { } } -func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) { +func BenchmarkRecvDataFromRemote(b *testing.B) { testPayload := make([]byte, testPayloadLen) rand.Read(testPayload) f := &Frame{ @@ -439,23 +440,31 @@ func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) { for name, ep := range table { ep := ep b.Run(name, func(b *testing.B) { - seshConfig := seshConfigs["ordered"] - obfuscator, _ := MakeObfuscator(ep, sessionKey) - seshConfig.Obfuscator = obfuscator - sesh := MakeSession(0, seshConfig) + for seshType, seshConfig := range seshConfigs { + b.Run(seshType, func(b *testing.B) { + obfuscator, _ := MakeObfuscator(ep, sessionKey) + seshConfig.Obfuscator = obfuscator + sesh := MakeSession(0, seshConfig) - binaryFrames := [maxIter][]byte{} - for i := 0; i < maxIter; i++ { - obfsBuf := make([]byte, obfsBufLen) - n, _ := sesh.obfuscate(f, obfsBuf, 0) - binaryFrames[i] = obfsBuf[:n] - f.Seq++ - } + go func() { + stream, _ := sesh.Accept() + stream.(*Stream).WriteTo(ioutil.Discard) + }() - b.SetBytes(int64(len(f.Payload))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - sesh.recvDataFromRemote(binaryFrames[i]) + binaryFrames := [maxIter][]byte{} + for i := 0; i < maxIter; i++ { + obfsBuf := make([]byte, obfsBufLen) + n, _ := sesh.obfuscate(f, obfsBuf, 0) + binaryFrames[i] = obfsBuf[:n] + f.Seq++ + } + + b.SetBytes(int64(len(f.Payload))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + sesh.recvDataFromRemote(binaryFrames[i]) + } + }) } }) }