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  }