update upload speed smoothing logic in plugin

pull/53/head
Zlatin Balevsky 2020-10-06 20:36:40 +01:00
parent fdf3a46ad4
commit f7aa04b8c7
No known key found for this signature in database
GPG Key ID: A72832072D525E41
2 changed files with 34 additions and 3 deletions

View File

@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import com.muwire.core.Core;
import com.muwire.core.upload.UploadEvent;
@ -69,11 +68,15 @@ public class UploadManager {
}
}
public static class UploaderWrapper {
public class UploaderWrapper {
private volatile Uploader uploader;
private volatile int requests;
private volatile boolean finished;
private volatile int[] speedArray = new int[0];
private volatile int speedPos;
private volatile long lastSpeedRead = System.currentTimeMillis();
public Uploader getUploader() {
return uploader;
}
@ -85,5 +88,33 @@ public class UploadManager {
public boolean isFinished() {
return finished;
}
public int speed() {
if (speedArray.length != core.getMuOptions().getSpeedSmoothSeconds()) {
speedArray = new int[core.getMuOptions().getSpeedSmoothSeconds()];
speedPos = 0;
}
final long now = System.currentTimeMillis();
if (now < lastSpeedRead + 50)
return speedAverage();
int read = uploader.dataSinceLastRead();
int speed = (int) (1000.0d * read / (now - lastSpeedRead));
lastSpeedRead = now;
speedArray[speedPos++] = speed;
if (speedPos == speedArray.length)
speedPos = 0;
return speedAverage();
}
private int speedAverage() {
int total = 0;
for (int reading : speedArray)
total += reading;
return total / speedArray.length;
}
}
}

View File

@ -36,7 +36,7 @@ public class UploadServlet extends HttpServlet {
wrapper.getUploader().getDownloaderPersona().toBase64(),
wrapper.getUploader().getDonePieces(),
wrapper.getUploader().getTotalPieces(),
wrapper.getUploader().speed(),
wrapper.speed(),
wrapper.getUploader().isBrowseEnabled(),
wrapper.getUploader().isFeedEnabled(),
browseManager.isBrowsing(downloader),