peer_protocol: Improve piece decoding benchmark
This commit is contained in:
parent
01fee38709
commit
260806a6f2
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user