Files
admins d70d81ebdf OneDrive Backup
OneDrive Backup
2023-07-28 22:36:06 +07:00

50 lines
1.5 KiB
C#

using System.Diagnostics;
namespace onedrive_backup.Graph
{
public class TransferSpeedHelper
{
private Stopwatch _stopWatch = new Stopwatch();
private double _prevProgress = 0;
private double _prevTimeStamp = 0;
private double _speedCap;
public TransferSpeedHelper(double? speedCapKBSec)
{
_speedCap = speedCapKBSec != null ? speedCapKBSec.Value * 1024 : double.MaxValue;
}
public void Start()
{
Reset();
_stopWatch.Start();
}
public void Reset()
{
_stopWatch.Reset();
_prevTimeStamp = 0;
_prevProgress = 0;
}
public (double delay, double ratePerSecond) MarkAndCalcThrottle(double progress)
{
double bytesTransfered = progress - _prevProgress;
var ellapsedMS = _stopWatch.ElapsedMilliseconds;
double timefromPrev = ellapsedMS - _prevTimeStamp;
double ratePerSecond = 1000 * bytesTransfered / timefromPrev;
_prevTimeStamp = ellapsedMS;
_prevProgress = progress;
if (ratePerSecond > _speedCap)
{
var targetTimeForSpeedMS = (bytesTransfered / _speedCap) * 1000;
var remainingTimeToWait = targetTimeForSpeedMS - _prevTimeStamp;
return (remainingTimeToWait, ratePerSecond);
}
return (0, ratePerSecond);
}
}
}