1 package request_strategy
6 "github.com/bradfitz/iter"
9 func benchmarkPieceRequestOrder(
11 hintForPiece func(index int) *PieceRequestOrderPathHint,
16 for range iter.N(b.N) {
17 pro := NewPieceOrder()
18 state := PieceRequestOrderState{}
19 doPieces := func(m func(PieceRequestOrderKey)) {
20 for i := range iter.N(numPieces) {
21 key := PieceRequestOrderKey{
24 pro.PathHint = hintForPiece(i)
28 doPieces(func(key PieceRequestOrderKey) {
32 doPieces(func(key PieceRequestOrderKey) {
33 pro.Update(key, state)
35 doPieces(func(key PieceRequestOrderKey) {
36 state.Priority = piecePriority(key.Index / 4)
37 pro.Update(key, state)
41 doPieces(func(key PieceRequestOrderKey) {
42 pro.Update(key, state)
45 doPieces(func(key PieceRequestOrderKey) {
46 pro.Update(key, state)
55 func BenchmarkPieceRequestOrder(b *testing.B) {
56 const numPieces = 2000
57 b.Run("NoPathHints", func(b *testing.B) {
58 benchmarkPieceRequestOrder(b, func(int) *PieceRequestOrderPathHint {
62 b.Run("SharedPathHint", func(b *testing.B) {
63 var pathHint PieceRequestOrderPathHint
64 benchmarkPieceRequestOrder(b, func(int) *PieceRequestOrderPathHint {
68 b.Run("PathHintPerPiece", func(b *testing.B) {
69 pathHints := make([]PieceRequestOrderPathHint, numPieces)
70 benchmarkPieceRequestOrder(b, func(index int) *PieceRequestOrderPathHint {
71 return &pathHints[index]