Fix speed calculations for very fast devices. Fixes #473

This commit is contained in:
2021-07-28 01:42:52 +01:00
parent ba8948b059
commit 2b52a5b0a6
15 changed files with 45 additions and 35 deletions

View File

@@ -325,7 +325,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
@@ -547,7 +547,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -101,12 +101,12 @@ namespace Aaru.Core.Devices.Dumping
int frame = sector[i + 14];
// Convert to binary
minute = ((minute / 16) * 10) + (minute & 0x0F);
second = ((second / 16) * 10) + (second & 0x0F);
frame = ((frame / 16) * 10) + (frame & 0x0F);
minute = (minute / 16 * 10) + (minute & 0x0F);
second = (second / 16 * 10) + (second & 0x0F);
frame = (frame / 16 * 10) + (frame & 0x0F);
// Calculate the first found LBA
int lba = ((minute * 60 * 75) + (second * 75) + frame) - 150;
int lba = (minute * 60 * 75) + (second * 75) + frame - 150;
// Calculate the difference between the found LBA and the requested one
int diff = wantedLba - lba;
@@ -309,10 +309,10 @@ namespace Aaru.Core.Devices.Dumping
elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = (sectorSpeedStart * blockSize) / (1048576 * elapsed);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
sectorSpeedStart = 0;
timeSpeedStart = DateTime.UtcNow;
}
@@ -403,10 +403,10 @@ namespace Aaru.Core.Devices.Dumping
elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = (sectorSpeedStart * blockSize) / (1048576 * elapsed);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
sectorSpeedStart = 0;
timeSpeedStart = DateTime.UtcNow;
}

View File

@@ -492,7 +492,7 @@ namespace Aaru.Core.Devices.Dumping
elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
@@ -658,7 +658,7 @@ namespace Aaru.Core.Devices.Dumping
elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -114,7 +114,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -396,7 +396,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -243,7 +243,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -266,7 +266,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -1066,7 +1066,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = currentSpeedSize / (1048576 * elapsed);

View File

@@ -246,10 +246,10 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = (sectorSpeedStart * blockSize) / (1048576 * elapsed);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
sectorSpeedStart = 0;
timeSpeedStart = DateTime.UtcNow;
}

View File

@@ -251,7 +251,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -591,7 +591,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -645,7 +645,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
@@ -834,7 +834,7 @@ namespace Aaru.Core.Devices.Dumping
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -190,11 +190,11 @@ namespace Aaru.Core.Devices.Scanning
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = (sectorSpeedStart * blockSize) / (1048576 * elapsed);
ScanSpeed?.Invoke(i, currentSpeed * 1024);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
ScanSpeed?.Invoke(i, currentSpeed * 1024);
sectorSpeedStart = 0;
timeSpeedStart = DateTime.UtcNow;
}
@@ -204,7 +204,7 @@ namespace Aaru.Core.Devices.Scanning
mhddLog.Close();
ibgLog.Close(_dev, results.Blocks, blockSize, (end - start).TotalSeconds, currentSpeed * 1024,
(blockSize * (double)(results.Blocks + 1)) / 1024 / (results.ProcessingTime / 1000),
blockSize * (double)(results.Blocks + 1) / 1024 / (results.ProcessingTime / 1000),
_devicePath);
InitProgress?.Invoke();
@@ -304,11 +304,11 @@ namespace Aaru.Core.Devices.Scanning
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = (sectorSpeedStart * blockSize) / (1048576 * elapsed);
ScanSpeed?.Invoke(currentBlock, currentSpeed * 1024);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
ScanSpeed?.Invoke(currentBlock, currentSpeed * 1024);
sectorSpeedStart = 0;
timeSpeedStart = DateTime.UtcNow;
}
@@ -320,7 +320,7 @@ namespace Aaru.Core.Devices.Scanning
mhddLog.Close();
ibgLog.Close(_dev, results.Blocks, blockSize, (end - start).TotalSeconds, currentSpeed * 1024,
(blockSize * (double)(results.Blocks + 1)) / 1024 / (results.ProcessingTime / 1000),
blockSize * (double)(results.Blocks + 1) / 1024 / (results.ProcessingTime / 1000),
_devicePath);
InitProgress?.Invoke();
@@ -357,7 +357,7 @@ namespace Aaru.Core.Devices.Scanning
results.ProcessingTime /= 1000;
results.TotalTime = (end - start).TotalSeconds;
results.AvgSpeed = (blockSize * (double)(results.Blocks + 1)) / 1048576 / results.ProcessingTime;
results.AvgSpeed = blockSize * (double)(results.Blocks + 1) / 1048576 / results.ProcessingTime;
results.SeekTimes = seekTimes;
return results;

View File

@@ -460,7 +460,7 @@ namespace Aaru.Core.Devices.Scanning
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
@@ -473,6 +473,16 @@ namespace Aaru.Core.Devices.Scanning
EndProgress?.Invoke();
mhddLog.Close();
currentSpeed = sectorSpeedStart * blockSize / (1048576 * (end - timeSpeedStart).TotalSeconds);
// ReSharper disable once CompareOfFloatsByEqualityOperator
if(results.MaxSpeed == double.MinValue)
results.MaxSpeed = currentSpeed;
// ReSharper disable once CompareOfFloatsByEqualityOperator
if(results.MinSpeed == double.MaxValue)
results.MinSpeed = currentSpeed;
ibgLog.Close(_dev, results.Blocks, blockSize, (end - start).TotalSeconds, currentSpeed * 1024,
blockSize * (double)(results.Blocks + 1) / 1024 / (results.ProcessingTime / 1000),
_devicePath);
@@ -553,7 +563,7 @@ namespace Aaru.Core.Devices.Scanning
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);

View File

@@ -295,7 +295,7 @@ namespace Aaru.Core.Devices.Scanning
double elapsed = (DateTime.UtcNow - timeSpeedStart).TotalSeconds;
if(elapsed < 1)
if(elapsed <= 0)
continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);