mirror of https://github.com/zlatinb/muwire
rewrite the smoothing of download speed
parent
0046694173
commit
ef71a42dd4
|
@ -73,7 +73,6 @@ public class Downloader {
|
||||||
private volatile long lastSpeedRead = System.currentTimeMillis()
|
private volatile long lastSpeedRead = System.currentTimeMillis()
|
||||||
private ArrayList speedArr = new ArrayList<Integer>()
|
private ArrayList speedArr = new ArrayList<Integer>()
|
||||||
private int speedPos = 0
|
private int speedPos = 0
|
||||||
private int speedAvg = 0
|
|
||||||
|
|
||||||
public Downloader(EventBus eventBus, DownloadManager downloadManager, ChatServer chatServer,
|
public Downloader(EventBus eventBus, DownloadManager downloadManager, ChatServer chatServer,
|
||||||
Persona me, File file, long length, InfoHash infoHash,
|
Persona me, File file, long length, InfoHash infoHash,
|
||||||
|
@ -173,33 +172,21 @@ public class Downloader {
|
||||||
lastSpeedRead = now
|
lastSpeedRead = now
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this is not very accurate since each slot may hold more than a second
|
||||||
if (speedArr.size() != downloadManager.muSettings.speedSmoothSeconds) {
|
if (speedArr.size() != downloadManager.muSettings.speedSmoothSeconds) {
|
||||||
speedArr.clear()
|
speedArr.clear()
|
||||||
downloadManager.muSettings.speedSmoothSeconds.times { speedArr.add(0) }
|
downloadManager.muSettings.speedSmoothSeconds.times { speedArr.add(0) }
|
||||||
speedPos = 0
|
speedPos = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// normalize to speedArr.size
|
speedArr[speedPos++] = currSpeed
|
||||||
currSpeed /= speedArr.size()
|
|
||||||
|
|
||||||
// compute new speedAvg and update speedArr
|
|
||||||
if ( speedArr[speedPos] > speedAvg ) {
|
|
||||||
speedAvg = 0
|
|
||||||
} else {
|
|
||||||
speedAvg -= speedArr[speedPos]
|
|
||||||
}
|
|
||||||
speedAvg += currSpeed
|
|
||||||
speedArr[speedPos] = currSpeed
|
|
||||||
// this might be necessary due to rounding errors
|
|
||||||
if (speedAvg < 0)
|
|
||||||
speedAvg = 0
|
|
||||||
|
|
||||||
// rolling index over the speedArr
|
// rolling index over the speedArr
|
||||||
speedPos++
|
|
||||||
if (speedPos >= speedArr.size())
|
if (speedPos >= speedArr.size())
|
||||||
speedPos=0
|
speedPos=0
|
||||||
|
|
||||||
speedAvg
|
speedArr.average()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DownloadState getCurrentState() {
|
public DownloadState getCurrentState() {
|
||||||
|
|
Loading…
Reference in New Issue