]> Sergey Matveev's repositories - btrtrc.git/blob - peer-conn-msg-writer_test.go
cmd/btrtrc client
[btrtrc.git] / peer-conn-msg-writer_test.go
1 package torrent
2
3 import (
4         "bytes"
5         "testing"
6
7         "github.com/dustin/go-humanize"
8
9         pp "github.com/anacrolix/torrent/peer_protocol"
10 )
11
12 func PieceMsg(length int64) pp.Message {
13         return pp.Message{
14                 Type:  pp.Piece,
15                 Index: pp.Integer(0),
16                 Begin: pp.Integer(0),
17                 Piece: make([]byte, length),
18         }
19 }
20
21 var benchmarkPieceLengths = []int{defaultChunkSize, 1 << 20, 4 << 20, 8 << 20}
22
23 func runBenchmarkWriteToBuffer(b *testing.B, length int64) {
24         writer := &peerConnMsgWriter{
25                 writeBuffer: &bytes.Buffer{},
26         }
27         msg := PieceMsg(length)
28
29         b.ReportAllocs()
30         b.ResetTimer()
31         for i := 0; i < b.N; i++ {
32                 //b.StopTimer()
33                 writer.writeBuffer.Reset()
34                 //b.StartTimer()
35                 writer.writeToBuffer(msg)
36         }
37 }
38
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))
45                         })
46                         b.Run("MarshalBinary", func(b *testing.B) {
47                                 b.SetBytes(int64(length))
48                                 runBenchmarkMarshalBinaryWrite(b, int64(length))
49                         })
50                 })
51         }
52 }
53
54 func runBenchmarkMarshalBinaryWrite(b *testing.B, length int64) {
55         writer := &peerConnMsgWriter{
56                 writeBuffer: &bytes.Buffer{},
57         }
58         msg := PieceMsg(length)
59
60         b.ReportAllocs()
61         b.ResetTimer()
62         for i := 0; i < b.N; i++ {
63                 //b.StopTimer()
64                 writer.writeBuffer.Reset()
65                 //b.StartTimer()
66                 writer.writeBuffer.Write(msg.MustMarshalBinary())
67         }
68 }