github.com/anacrolix/torrent@v1.61.0/peer-conn-msg-writer_test.go (about) 1 package torrent 2 3 import ( 4 "testing" 5 6 "github.com/dustin/go-humanize" 7 8 pp "github.com/anacrolix/torrent/peer_protocol" 9 ) 10 11 func PieceMsg(length int64) pp.Message { 12 return pp.Message{ 13 Type: pp.Piece, 14 Index: pp.Integer(0), 15 Begin: pp.Integer(0), 16 Piece: make([]byte, length), 17 } 18 } 19 20 var benchmarkPieceLengths = []int{defaultChunkSize, 1 << 20, 4 << 20, 8 << 20} 21 22 func runBenchmarkWriteToBuffer(b *testing.B, length int64) { 23 writer := &peerConnMsgWriter{ 24 writeBuffer: new(peerConnMsgWriterBuffer), 25 } 26 msg := PieceMsg(length) 27 28 b.ReportAllocs() 29 b.ResetTimer() 30 for i := 0; i < b.N; i++ { 31 //b.StopTimer() 32 writer.writeBuffer.Reset() 33 //b.StartTimer() 34 writer.writeToBuffer(msg) 35 } 36 } 37 38 func BenchmarkWritePieceMsg(b *testing.B) { 39 for _, length := range benchmarkPieceLengths { 40 b.Run(humanize.IBytes(uint64(length)), func(b *testing.B) { 41 b.Run("ToBuffer", func(b *testing.B) { 42 b.SetBytes(int64(length)) 43 runBenchmarkWriteToBuffer(b, int64(length)) 44 }) 45 b.Run("MarshalBinary", func(b *testing.B) { 46 b.SetBytes(int64(length)) 47 runBenchmarkMarshalBinaryWrite(b, int64(length)) 48 }) 49 }) 50 } 51 } 52 53 func runBenchmarkMarshalBinaryWrite(b *testing.B, length int64) { 54 writer := &peerConnMsgWriter{ 55 writeBuffer: &peerConnMsgWriterBuffer{}, 56 } 57 msg := PieceMsg(length) 58 59 b.ReportAllocs() 60 b.ResetTimer() 61 for i := 0; i < b.N; i++ { 62 //b.StopTimer() 63 writer.writeBuffer.Reset() 64 //b.StartTimer() 65 writer.writeBuffer.Write(msg.MustMarshalBinary()) 66 } 67 }