Sfoglia il codice sorgente

Improve download buffer calibration

DarthSim 6 anni fa
parent
commit
1972c21783
1 ha cambiato i file con 7 aggiunte e 8 eliminazioni
  1. 7 8
      bufpool.go

+ 7 - 8
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
+}