Improve download buffer calibration

This commit is contained in:
DarthSim
2019-03-11 14:30:00 +06:00
parent 67bbf14ba4
commit 1972c21783

View File

@@ -47,14 +47,7 @@ func (p *bufPool) calibrateAndClean() {
score := p.calls[pos] score := p.calls[pos]
p.callInd = 0 p.callInd = 0
p.maxSize = 64 p.maxSize = p.normalizeSize(score)
for {
if p.maxSize > score {
break
}
p.maxSize <<= 1
}
p.defaultSize = maxInt(p.defaultSize, p.calls[0]) p.defaultSize = maxInt(p.defaultSize, p.calls[0])
p.maxSize = maxInt(p.defaultSize, p.maxSize) p.maxSize = maxInt(p.defaultSize, p.maxSize)
@@ -82,6 +75,8 @@ func (p *bufPool) Get(size int) *bytes.Buffer {
p.mutex.Lock() p.mutex.Lock()
defer p.mutex.Unlock() defer p.mutex.Unlock()
size = p.normalizeSize(size)
minSize, maxSize, minInd, maxInd := -1, -1, -1, -1 minSize, maxSize, minInd, maxInd := -1, -1, -1, -1
for i := 0; i < len(p.buffers); i++ { for i := 0; i < len(p.buffers); i++ {
@@ -155,3 +150,7 @@ func (p *bufPool) Put(buf *bytes.Buffer) {
} }
} }
} }
func (p *bufPool) normalizeSize(n int) int {
return (n/bytes.MinRead + 2) * bytes.MinRead
}