7 "github.com/dustin/go-humanize"
9 pp "github.com/anacrolix/torrent/peer_protocol"
12 func PieceMsg(length int64) pp.Message {
17 Piece: make([]byte, length),
21 var benchmarkPieceLengths = []int{defaultChunkSize, 1 << 20, 4 << 20, 8 << 20}
23 func runBenchmarkWriteToBuffer(b *testing.B, length int64) {
24 writer := &peerConnMsgWriter{
25 writeBuffer: &bytes.Buffer{},
27 msg := PieceMsg(length)
31 for i := 0; i < b.N; i++ {
33 writer.writeBuffer.Reset()
35 writer.writeToBuffer(msg)
39 func BenchmarkWritePieceMsg(b *testing.B) {
40 for _, length := range benchmarkPieceLengths {
41 b.Run(humanize.IBytes(uint64(length)), func(b *testing.B) {
42 b.Run("ToBuffer", func(b *testing.B) {
43 b.SetBytes(int64(length))
44 runBenchmarkWriteToBuffer(b, int64(length))
46 b.Run("MarshalBinary", func(b *testing.B) {
47 b.SetBytes(int64(length))
48 runBenchmarkMarshalBinaryWrite(b, int64(length))
54 func runBenchmarkMarshalBinaryWrite(b *testing.B, length int64) {
55 writer := &peerConnMsgWriter{
56 writeBuffer: &bytes.Buffer{},
58 msg := PieceMsg(length)
62 for i := 0; i < b.N; i++ {
64 writer.writeBuffer.Reset()
66 writer.writeBuffer.Write(msg.MustMarshalBinary())