From 1972c21783a10c49a250ee18983343a280598ba2 Mon Sep 17 00:00:00 2001 From: DarthSim Date: Mon, 11 Mar 2019 14:30:00 +0600 Subject: [PATCH] Improve download buffer calibration --- bufpool.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/bufpool.go b/bufpool.go index e112cd72..9ff7aece 100644 --- a/bufpool.go +++ b/bufpool.go @@ -47,14 +47,7 @@ func (p *bufPool) calibrateAndClean() { score := p.calls[pos] p.callInd = 0 - p.maxSize = 64 - - for { - if p.maxSize > score { - break - } - p.maxSize <<= 1 - } + p.maxSize = p.normalizeSize(score) p.defaultSize = maxInt(p.defaultSize, p.calls[0]) p.maxSize = maxInt(p.defaultSize, p.maxSize) @@ -82,6 +75,8 @@ func (p *bufPool) Get(size int) *bytes.Buffer { p.mutex.Lock() defer p.mutex.Unlock() + size = p.normalizeSize(size) + minSize, maxSize, minInd, maxInd := -1, -1, -1, -1 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 +}