]> Sergey Matveev's repositories - btrtrc.git/commitdiff
peer_protocol: Improve piece decoding benchmark
authorMatt Joiner <anacrolix@gmail.com>
Tue, 12 Sep 2017 11:32:01 +0000 (21:32 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 12 Sep 2017 11:32:01 +0000 (21:32 +1000)
peer_protocol/decoder_test.go

index acc769babcc4a31b599f491a32e132ef6882ce10..7e538adda5685742857b2b8fd35ed34f0195e8b5 100644 (file)
@@ -12,34 +12,42 @@ import (
 
 func BenchmarkDecodePieces(t *testing.B) {
        r, w := io.Pipe()
+       const pieceLen = 1 << 14
        msg := Message{
                Type:  Piece,
                Index: 0,
                Begin: 1,
-               Piece: make([]byte, 1<<14),
+               Piece: make([]byte, pieceLen),
        }
        b, err := msg.MarshalBinary()
        require.NoError(t, err)
        t.SetBytes(int64(len(b)))
+       defer r.Close()
        go func() {
+               defer w.Close()
                for {
                        n, err := w.Write(b)
-                       require.Equal(t, len(b), n)
+                       if err == io.ErrClosedPipe {
+                               return
+                       }
                        require.NoError(t, err)
+                       require.Equal(t, len(b), n)
                }
        }()
        d := Decoder{
+               // Emulate what package torrent's client would do.
                R:         bufio.NewReader(r),
                MaxLength: 1 << 18,
                Pool: &sync.Pool{
                        New: func() interface{} {
-                               return make([]byte, 1<<14)
+                               return make([]byte, pieceLen)
                        },
                },
        }
        for range iter.N(t.N) {
                var msg Message
                require.NoError(t, d.Decode(&msg))
+               // WWJD
                d.Pool.Put(msg.Piece)
        }
 }