// Calculates the number of pieces to set to Readahead priority, after the
// Now, and Next pieces.
func readaheadPieces(readahead, pieceLength int64) (ret int) {
+ // Expand the readahead to fit any partial pieces. Subtract 1 for the
+ // "next" piece that is assigned.
ret = int((readahead+pieceLength-1)/pieceLength - 1)
+ // Lengthen the "readahead tail" to smooth blockiness that occurs when the
+ // piece length is much larger than the readahead.
if ret < 2 {
- ret = 2
+ ret++
}
return
}
_ "github.com/anacrolix/envpprof"
"github.com/anacrolix/utp"
"github.com/bradfitz/iter"
+ "github.com/stretchr/testify/assert"
"gopkg.in/check.v1"
"github.com/anacrolix/torrent/bencode"
readaheadPieces int
}{
{5 * 1024 * 1024, 256 * 1024, 19},
- {5 * 1024 * 1024, 5 * 1024 * 1024, 0},
- {5*1024*1024 - 1, 5 * 1024 * 1024, 0},
- {5 * 1024 * 1024, 5*1024*1024 - 1, 1},
- {0, 5 * 1024 * 1024, -1},
+ {5 * 1024 * 1024, 5 * 1024 * 1024, 1},
+ {5*1024*1024 - 1, 5 * 1024 * 1024, 1},
+ {5 * 1024 * 1024, 5*1024*1024 - 1, 2},
+ {0, 5 * 1024 * 1024, 0},
{5 * 1024 * 1024, 1048576, 4},
} {
- if readaheadPieces(case_.readaheadBytes, case_.pieceLength) != case_.readaheadPieces {
- t.Fatalf("case failed: %v", case_)
- }
+ pieces := readaheadPieces(case_.readaheadBytes, case_.pieceLength)
+ assert.Equal(t, case_.readaheadPieces, pieces, "%v", case_)
}
}