From 260806a6f22f13ab8509d1caa121fb6fd467490c Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 12 Sep 2017 21:32:01 +1000 Subject: [PATCH] peer_protocol: Improve piece decoding benchmark --- peer_protocol/decoder_test.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/peer_protocol/decoder_test.go b/peer_protocol/decoder_test.go index acc769ba..7e538add 100644 --- a/peer_protocol/decoder_test.go +++ b/peer_protocol/decoder_test.go @@ -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) } } -- 2.44.0