]> Sergey Matveev's repositories - btrtrc.git/commitdiff
peer_protocol: Add a benchmark for decoding pieces
authorMatt Joiner <anacrolix@gmail.com>
Tue, 12 Sep 2017 11:12:56 +0000 (21:12 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 12 Sep 2017 11:12:56 +0000 (21:12 +1000)
peer_protocol/decoder_test.go [new file with mode: 0644]

diff --git a/peer_protocol/decoder_test.go b/peer_protocol/decoder_test.go
new file mode 100644 (file)
index 0000000..acc769b
--- /dev/null
@@ -0,0 +1,45 @@
+package peer_protocol
+
+import (
+       "bufio"
+       "io"
+       "sync"
+       "testing"
+
+       "github.com/bradfitz/iter"
+       "github.com/stretchr/testify/require"
+)
+
+func BenchmarkDecodePieces(t *testing.B) {
+       r, w := io.Pipe()
+       msg := Message{
+               Type:  Piece,
+               Index: 0,
+               Begin: 1,
+               Piece: make([]byte, 1<<14),
+       }
+       b, err := msg.MarshalBinary()
+       require.NoError(t, err)
+       t.SetBytes(int64(len(b)))
+       go func() {
+               for {
+                       n, err := w.Write(b)
+                       require.Equal(t, len(b), n)
+                       require.NoError(t, err)
+               }
+       }()
+       d := Decoder{
+               R:         bufio.NewReader(r),
+               MaxLength: 1 << 18,
+               Pool: &sync.Pool{
+                       New: func() interface{} {
+                               return make([]byte, 1<<14)
+                       },
+               },
+       }
+       for range iter.N(t.N) {
+               var msg Message
+               require.NoError(t, d.Decode(&msg))
+               d.Pool.Put(msg.Piece)
+       }
+}