[Dump] Use new speed calculation algorithm.

This commit is contained in:
2025-11-20 18:57:39 +00:00
parent c1af9a1f96
commit 8b83f9cbbb
10 changed files with 281 additions and 247 deletions

View File

@@ -78,6 +78,7 @@ partial class Dump
InitProgress?.Invoke();
_speedStopwatch.Reset();
double elapsed = 0;
for(ulong i = _resume.NextBlock; i < blocks; i += blocksToRead)
{
@@ -102,9 +103,10 @@ partial class Dump
(long)i,
(long)blocks);
_speedStopwatch.Start();
sense = scsiReader.ReadBlocks(out buffer, i, blocksToRead, out double cmdDuration, out _, out _);
totalDuration += cmdDuration;
_speedStopwatch.Restart();
sense = scsiReader.ReadBlocks(out buffer, i, blocksToRead, out _, out _, out _);
elapsed += _speedStopwatch.Elapsed.TotalMilliseconds;
totalDuration += _speedStopwatch.Elapsed.TotalMilliseconds;
_speedStopwatch.Stop();
if(!sense && !_dev.Error)
@@ -194,8 +196,7 @@ partial class Dump
}
}
mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
mhddLog.Write(i, _speedStopwatch.Elapsed.TotalMilliseconds, blocksToRead);
_writeStopwatch.Restart();
outputFormat.WriteSectors(buffer,
@@ -242,9 +243,12 @@ partial class Dump
for(ulong b = i; b < i + _skip; b++) _resume.BadBlocks.Add(b);
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
mhddLog.Write(i,
_speedStopwatch.Elapsed.TotalMilliseconds < 500
? 65535
: _speedStopwatch.Elapsed.TotalMilliseconds,
_skip);
ibgLog.Write(i, 0);
AaruLogging.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
i += _skip - blocksToRead;
newTrim = true;
@@ -254,12 +258,12 @@ partial class Dump
sectorSpeedStart += blocksToRead;
_resume.NextBlock = i + blocksToRead;
double elapsed = _speedStopwatch.Elapsed.TotalSeconds;
if(elapsed < 100) continue;
if(elapsed <= 0 || sectorSpeedStart * blockSize < 524288) continue;
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed);
currentSpeed = sectorSpeedStart * blockSize / (1048576 * elapsed / 1000);
ibgLog.Write(i, currentSpeed * 1024);
sectorSpeedStart = 0;
elapsed = 0;
_speedStopwatch.Reset();
}