mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[Media scan] Use new speed calculation algorithm.
This commit is contained in:
@@ -121,7 +121,6 @@ public sealed partial class MediaScan
|
||||
|
||||
MhddLog mhddLog;
|
||||
IbgLog ibgLog;
|
||||
double duration;
|
||||
|
||||
if(ataReader.IsLba)
|
||||
{
|
||||
@@ -148,21 +147,20 @@ public sealed partial class MediaScan
|
||||
UpdateProgress?.Invoke(string.Format(Localization.Core.Reading_sector_0_of_1_2,
|
||||
i,
|
||||
results.Blocks,
|
||||
ByteSize.FromMegabytes(currentSpeed)
|
||||
.Per(_oneSecond)
|
||||
.Humanize()),
|
||||
ByteSize.FromMegabytes(currentSpeed).Per(_oneSecond).Humanize()),
|
||||
(long)i,
|
||||
(long)results.Blocks);
|
||||
|
||||
_speedStopwatch.Restart();
|
||||
bool error = ataReader.ReadBlocks(out cmdBuf, i, blocksToRead, out duration, out _, out _);
|
||||
bool error = ataReader.ReadBlocks(out cmdBuf, i, blocksToRead, out double _, out _, out _);
|
||||
_speedStopwatch.Stop();
|
||||
accumulatedSpeedMs += _speedStopwatch.ElapsedMilliseconds;
|
||||
accumulatedSpeedMs += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
accumulatedSpeedSectors += blocksToRead;
|
||||
results.ProcessingTime += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
|
||||
if(!error)
|
||||
{
|
||||
switch(duration)
|
||||
switch(_speedStopwatch.Elapsed.TotalMilliseconds)
|
||||
{
|
||||
case >= 500:
|
||||
results.F += blocksToRead;
|
||||
@@ -190,8 +188,8 @@ public sealed partial class MediaScan
|
||||
break;
|
||||
}
|
||||
|
||||
ScanTime?.Invoke(i, duration);
|
||||
mhddLog.Write(i, duration);
|
||||
ScanTime?.Invoke(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
mhddLog.Write(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
}
|
||||
else
|
||||
@@ -201,7 +199,10 @@ public sealed partial class MediaScan
|
||||
|
||||
for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b);
|
||||
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration);
|
||||
mhddLog.Write(i,
|
||||
_speedStopwatch.Elapsed.TotalMilliseconds < 500
|
||||
? 65535
|
||||
: _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
@@ -288,13 +289,14 @@ public sealed partial class MediaScan
|
||||
.Humanize()));
|
||||
|
||||
_speedStopwatch.Restart();
|
||||
bool error = ataReader.ReadChs(out cmdBuf, cy, hd, sc, out duration, out _);
|
||||
accumulatedSpeedMs += _speedStopwatch.ElapsedMilliseconds;
|
||||
bool error = ataReader.ReadChs(out cmdBuf, cy, hd, sc, out double _, out _);
|
||||
accumulatedSpeedMs += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
accumulatedSpeedSectors++;
|
||||
results.ProcessingTime += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
|
||||
if(!error)
|
||||
{
|
||||
switch(duration)
|
||||
switch(_speedStopwatch.Elapsed.TotalMilliseconds)
|
||||
{
|
||||
case >= 500:
|
||||
results.F += blocksToRead;
|
||||
@@ -322,8 +324,8 @@ public sealed partial class MediaScan
|
||||
break;
|
||||
}
|
||||
|
||||
ScanTime?.Invoke(currentBlock, duration);
|
||||
mhddLog.Write(currentBlock, duration);
|
||||
ScanTime?.Invoke(currentBlock, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
mhddLog.Write(currentBlock, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(currentBlock, currentSpeed * 1024);
|
||||
}
|
||||
else
|
||||
@@ -331,7 +333,11 @@ public sealed partial class MediaScan
|
||||
ScanUnreadable?.Invoke(currentBlock);
|
||||
results.Errored++;
|
||||
results.UnreadableSectors.Add(currentBlock);
|
||||
mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration);
|
||||
|
||||
mhddLog.Write(currentBlock,
|
||||
_speedStopwatch.Elapsed.TotalMilliseconds < 500
|
||||
? 65535
|
||||
: _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
|
||||
ibgLog.Write(currentBlock, 0);
|
||||
}
|
||||
|
||||
@@ -377,8 +377,6 @@ public sealed partial class MediaScan
|
||||
{
|
||||
if(_aborted) break;
|
||||
|
||||
double cmdDuration;
|
||||
|
||||
if(results.Blocks - i < blocksToRead) blocksToRead = (uint)(results.Blocks - i);
|
||||
|
||||
if(currentSpeed > results.MaxSpeed && currentSpeed > 0) results.MaxSpeed = currentSpeed;
|
||||
@@ -411,20 +409,20 @@ public sealed partial class MediaScan
|
||||
MmcErrorField.None,
|
||||
MmcSubchannel.None,
|
||||
_dev.Timeout,
|
||||
out cmdDuration);
|
||||
out double _);
|
||||
}
|
||||
else
|
||||
sense = scsiReader.ReadBlocks(out _, i, blocksToRead, out cmdDuration, out _, out _);
|
||||
sense = scsiReader.ReadBlocks(out _, i, blocksToRead, out double _, out _, out _);
|
||||
|
||||
_speedStopwatch.Stop();
|
||||
accumulatedSpeedMs += _speedStopwatch.ElapsedMilliseconds;
|
||||
accumulatedSpeedMs += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
accumulatedSpeedSectors += blocksToRead;
|
||||
|
||||
results.ProcessingTime += cmdDuration;
|
||||
results.ProcessingTime += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
|
||||
if(!sense)
|
||||
{
|
||||
switch(cmdDuration)
|
||||
switch(_speedStopwatch.Elapsed.TotalMilliseconds)
|
||||
{
|
||||
case >= 500:
|
||||
results.F += blocksToRead;
|
||||
@@ -452,8 +450,8 @@ public sealed partial class MediaScan
|
||||
break;
|
||||
}
|
||||
|
||||
ScanTime?.Invoke(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
ScanTime?.Invoke(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
mhddLog.Write(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
}
|
||||
else
|
||||
@@ -484,7 +482,11 @@ public sealed partial class MediaScan
|
||||
for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b);
|
||||
|
||||
ScanUnreadable?.Invoke(i);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
|
||||
mhddLog.Write(i,
|
||||
_speedStopwatch.Elapsed.TotalMilliseconds < 500
|
||||
? 65535
|
||||
: _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
@@ -498,7 +500,10 @@ public sealed partial class MediaScan
|
||||
|
||||
for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i,
|
||||
_speedStopwatch.Elapsed.TotalMilliseconds < 500
|
||||
? 65535
|
||||
: _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
@@ -569,13 +574,13 @@ public sealed partial class MediaScan
|
||||
_speedStopwatch.Restart();
|
||||
sense = scsiReader.ReadBlocks(out _, i, blocksToRead, out double cmdDuration, out _, out _);
|
||||
_speedStopwatch.Stop();
|
||||
accumulatedSpeedMs += _speedStopwatch.ElapsedMilliseconds;
|
||||
accumulatedSpeedMs += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
accumulatedSpeedSectors += blocksToRead;
|
||||
results.ProcessingTime += cmdDuration;
|
||||
results.ProcessingTime += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
|
||||
if(!sense && !_dev.Error)
|
||||
{
|
||||
switch(cmdDuration)
|
||||
switch(_speedStopwatch.Elapsed.TotalMilliseconds)
|
||||
{
|
||||
case >= 500:
|
||||
results.F += blocksToRead;
|
||||
@@ -603,8 +608,8 @@ public sealed partial class MediaScan
|
||||
break;
|
||||
}
|
||||
|
||||
ScanTime?.Invoke(i, cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration);
|
||||
ScanTime?.Invoke(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
mhddLog.Write(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
}
|
||||
|
||||
@@ -616,7 +621,7 @@ public sealed partial class MediaScan
|
||||
|
||||
for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b);
|
||||
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
|
||||
mhddLog.Write(i, cmdDuration < 500 ? 65535 : _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,8 +52,7 @@ public sealed partial class MediaScan
|
||||
byte[] cmdBuf;
|
||||
bool sense;
|
||||
results.Blocks = 0;
|
||||
const uint timeout = 5;
|
||||
double duration;
|
||||
const uint timeout = 5;
|
||||
const ushort sdProfile = 0x0001;
|
||||
ushort blocksToRead = 128;
|
||||
uint blockSize = 512;
|
||||
@@ -145,7 +144,7 @@ public sealed partial class MediaScan
|
||||
|
||||
if(supportsCmd23)
|
||||
{
|
||||
sense = _dev.ReadWithBlockCount(out cmdBuf, out _, 0, blockSize, 1, byteAddressed, timeout, out duration);
|
||||
sense = _dev.ReadWithBlockCount(out cmdBuf, out _, 0, blockSize, 1, byteAddressed, timeout, out double _);
|
||||
|
||||
if(sense || _dev.Error)
|
||||
{
|
||||
@@ -177,7 +176,7 @@ public sealed partial class MediaScan
|
||||
blocksToRead,
|
||||
byteAddressed,
|
||||
timeout,
|
||||
out duration);
|
||||
out double _);
|
||||
|
||||
if(sense) blocksToRead /= 2;
|
||||
|
||||
@@ -264,7 +263,7 @@ public sealed partial class MediaScan
|
||||
blockSize,
|
||||
byteAddressed,
|
||||
timeout,
|
||||
out duration);
|
||||
out double _);
|
||||
}
|
||||
else if(supportsCmd23)
|
||||
{
|
||||
@@ -275,10 +274,10 @@ public sealed partial class MediaScan
|
||||
blocksToRead,
|
||||
byteAddressed,
|
||||
timeout,
|
||||
out duration);
|
||||
out double _);
|
||||
}
|
||||
else if(_useBufferedReads)
|
||||
error = _dev.BufferedOsRead(out cmdBuf, (long)(i * blockSize), blockSize * blocksToRead, out duration);
|
||||
error = _dev.BufferedOsRead(out cmdBuf, (long)(i * blockSize), blockSize * blocksToRead, out double _);
|
||||
else
|
||||
{
|
||||
error = _dev.ReadMultipleUsingSingle(out cmdBuf,
|
||||
@@ -288,16 +287,17 @@ public sealed partial class MediaScan
|
||||
blocksToRead,
|
||||
byteAddressed,
|
||||
timeout,
|
||||
out duration);
|
||||
out double _);
|
||||
}
|
||||
|
||||
_speedStopwatch.Stop();
|
||||
accumulatedSpeedMs += _speedStopwatch.ElapsedMilliseconds;
|
||||
accumulatedSpeedMs += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
accumulatedSpeedSectors += blocksToRead;
|
||||
results.ProcessingTime += _speedStopwatch.Elapsed.TotalMilliseconds;
|
||||
|
||||
if(!error)
|
||||
{
|
||||
switch(duration)
|
||||
switch(_speedStopwatch.Elapsed.TotalMilliseconds)
|
||||
{
|
||||
case >= 500:
|
||||
results.F += blocksToRead;
|
||||
@@ -325,8 +325,8 @@ public sealed partial class MediaScan
|
||||
break;
|
||||
}
|
||||
|
||||
ScanTime?.Invoke(i, duration);
|
||||
mhddLog.Write(i, duration);
|
||||
ScanTime?.Invoke(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
mhddLog.Write(i, _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
ibgLog.Write(i, currentSpeed * 1024);
|
||||
}
|
||||
else
|
||||
@@ -336,7 +336,10 @@ public sealed partial class MediaScan
|
||||
|
||||
for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b);
|
||||
|
||||
mhddLog.Write(i, duration < 500 ? 65535 : duration);
|
||||
mhddLog.Write(i,
|
||||
_speedStopwatch.Elapsed.TotalMilliseconds < 500
|
||||
? 65535
|
||||
: _speedStopwatch.Elapsed.TotalMilliseconds);
|
||||
|
||||
ibgLog.Write(i, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user