diff --git a/Aaru.Core/Devices/Dumping/ATA.cs b/Aaru.Core/Devices/Dumping/ATA.cs
index 34af45c9f..cf1dc7f75 100644
--- a/Aaru.Core/Devices/Dumping/ATA.cs
+++ b/Aaru.Core/Devices/Dumping/ATA.cs
@@ -267,7 +267,7 @@ public partial class Dump
_skip = blocksToRead;
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead,
- _private);
+ _private, _dimensions);
ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile);
@@ -330,7 +330,7 @@ public partial class Dump
if(!error)
{
- mhddLog.Write(i, duration);
+ mhddLog.Write(i, duration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(cmdBuf, i, blocksToRead);
@@ -346,7 +346,7 @@ public partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, duration < 500 ? 65535 : duration);
+ mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip);
ibgLog.Write(i, 0);
DateTime writeStart = DateTime.Now;
@@ -534,7 +534,7 @@ public partial class Dump
else
{
mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead,
- _private);
+ _private, _dimensions);
ibgLog = new IbgLog(_outputPrefix + ".ibg", ataProfile);
@@ -595,7 +595,7 @@ public partial class Dump
if(!error || recoveredError)
{
- mhddLog.Write(currentBlock, duration);
+ mhddLog.Write(currentBlock, duration, 1);
ibgLog.Write(currentBlock, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
@@ -612,7 +612,7 @@ public partial class Dump
else
{
_resume.BadBlocks.Add(currentBlock);
- mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration);
+ mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration, 1);
ibgLog.Write(currentBlock, 0);
DateTime writeStart = DateTime.Now;
diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs
index 43726d2a8..54a681d34 100644
--- a/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs
+++ b/Aaru.Core/Devices/Dumping/CompactDisc/CdiReady.cs
@@ -242,7 +242,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i + r, cmdDuration);
+ mhddLog.Write(i + r, cmdDuration, 1);
ibgLog.Write(i + r, currentSpeed * 1024);
extents.Add(i + r, 1, true);
DateTime writeStart = DateTime.Now;
@@ -324,7 +324,7 @@ partial class Dump
FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead,
subSize, ref cmdBuf, blockSize, false);
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, 1);
ibgLog.Write(i, currentSpeed * 1024);
extents.Add(i, blocksToRead, true);
DateTime writeStart = DateTime.Now;
diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs
index af579315a..8eaa8aeae 100644
--- a/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs
+++ b/Aaru.Core/Devices/Dumping/CompactDisc/Data.cs
@@ -476,7 +476,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i + r, cmdDuration);
+ mhddLog.Write(i + r, cmdDuration, 1);
ibgLog.Write(i + r, currentSpeed * 1024);
extents.Add(i + r, 1, true);
DateTime writeStart = DateTime.Now;
@@ -596,7 +596,7 @@ partial class Dump
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0,
Sense.PrettifySense(senseBuf));
- mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i + r, cmdDuration < 500 ? 65535 : cmdDuration, 1);
ibgLog.Write(i + r, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, 1, i + r);
@@ -636,7 +636,7 @@ partial class Dump
FixOffsetData(offsetBytes, sectorSize, sectorsForOffset, supportedSubchannel, ref blocksToRead,
subSize, ref cmdBuf, blockSize, failedCrossingLeadOut);
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
extents.Add(i, blocksToRead, true);
DateTime writeStart = DateTime.Now;
@@ -774,7 +774,7 @@ partial class Dump
_resume.BadBlocks.Add(b);
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs
index bcbf7e95b..20dd3374c 100644
--- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs
+++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs
@@ -1112,7 +1112,7 @@ sealed partial class Dump
sectorsForOffset = 0;
}
- mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private);
+ mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, _maximumReadable, _private, _dimensions);
ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0008);
if(_createGraph)
diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs
index eafc13e76..806ab5fc6 100644
--- a/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs
+++ b/Aaru.Core/Devices/Dumping/CompactDisc/LeadOuts.cs
@@ -145,7 +145,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, 1);
ibgLog.Write(i, currentSpeed * 1024);
extents.Add(i, _maximumReadable, true);
leadOutExtents.Remove(i);
@@ -207,7 +207,7 @@ partial class Dump
imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds;
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
}
@@ -317,7 +317,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, _maximumReadable);
ibgLog.Write(i, currentSpeed * 1024);
extents.Add(i, _maximumReadable, true);
leadOutExtents.Remove(i);
@@ -380,7 +380,7 @@ partial class Dump
imageWriteDuration += (DateTime.Now - writeStart).TotalSeconds;
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, 1);
ibgLog.Write(i, 0);
}
diff --git a/Aaru.Core/Devices/Dumping/MiniDisc.cs b/Aaru.Core/Devices/Dumping/MiniDisc.cs
index 4574096ec..342cde4fa 100644
--- a/Aaru.Core/Devices/Dumping/MiniDisc.cs
+++ b/Aaru.Core/Devices/Dumping/MiniDisc.cs
@@ -263,7 +263,7 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
@@ -418,7 +418,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
@@ -443,7 +443,7 @@ partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs
index a165600d0..a3e5bb3b1 100644
--- a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs
+++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs
@@ -158,7 +158,7 @@ public partial class Dump
bool ret;
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
@@ -251,7 +251,7 @@ public partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
@@ -278,7 +278,7 @@ public partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs
index d05baa238..7562aadbf 100644
--- a/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs
+++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/UMD.cs
@@ -158,7 +158,7 @@ public partial class Dump
bool ret;
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010);
ret = outputOptical.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
@@ -265,7 +265,7 @@ public partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputOptical.WriteSectors(readBuffer, i, blocksToRead);
@@ -292,7 +292,7 @@ public partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/Sbc/Data.cs b/Aaru.Core/Devices/Dumping/Sbc/Data.cs
index 4376c4042..dcc861dd2 100644
--- a/Aaru.Core/Devices/Dumping/Sbc/Data.cs
+++ b/Aaru.Core/Devices/Dumping/Sbc/Data.cs
@@ -208,7 +208,7 @@ partial class Dump
}
}
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(buffer, i, blocksToRead);
@@ -249,7 +249,7 @@ partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs
index 512e65b2f..c53af4e06 100644
--- a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs
+++ b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs
@@ -369,7 +369,7 @@ partial class Dump
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sbcProfile);
bool imageCreated = false;
diff --git a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs
index ccca6e002..6e8953de0 100644
--- a/Aaru.Core/Devices/Dumping/Sbc/Optical.cs
+++ b/Aaru.Core/Devices/Dumping/Sbc/Optical.cs
@@ -215,7 +215,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(buffer, i, blocksToRead);
@@ -239,7 +239,7 @@ partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, i);
diff --git a/Aaru.Core/Devices/Dumping/SecureDigital.cs b/Aaru.Core/Devices/Dumping/SecureDigital.cs
index 56dcc979d..774ab3ba7 100644
--- a/Aaru.Core/Devices/Dumping/SecureDigital.cs
+++ b/Aaru.Core/Devices/Dumping/SecureDigital.cs
@@ -457,7 +457,7 @@ public partial class Dump
}
}
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", sdProfile);
ret = outputFormat.Create(_outputPath,
@@ -665,7 +665,7 @@ public partial class Dump
if(!error)
{
- mhddLog.Write(i, duration);
+ mhddLog.Write(i, duration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(cmdBuf, i, blocksToRead);
@@ -683,7 +683,7 @@ public partial class Dump
for(ulong b = i; b < i + _skip; b++)
_resume.BadBlocks.Add(b);
- mhddLog.Write(i, duration < 500 ? 65535 : duration);
+ mhddLog.Write(i, duration < 500 ? 65535 : duration, _skip);
ibgLog.Write(i, 0);
DateTime writeStart = DateTime.Now;
diff --git a/Aaru.Core/Devices/Dumping/XGD.cs b/Aaru.Core/Devices/Dumping/XGD.cs
index 403a7626d..88ca5ea23 100644
--- a/Aaru.Core/Devices/Dumping/XGD.cs
+++ b/Aaru.Core/Devices/Dumping/XGD.cs
@@ -498,7 +498,7 @@ partial class Dump
_dumpLog.WriteLine(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead);
UpdateStatus?.Invoke(string.Format(Localization.Core.Reading_0_sectors_at_a_time, blocksToRead));
- var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private);
+ var mhddLog = new MhddLog(_outputPrefix + ".mhddlog.bin", _dev, blocks, blockSize, blocksToRead, _private, _dimensions);
var ibgLog = new IbgLog(_outputPrefix + ".ibg", 0x0010);
ret = outputFormat.Create(_outputPath, dskType, _formatOptions, blocks, blockSize);
@@ -654,7 +654,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(readBuffer, i, blocksToRead);
@@ -684,7 +684,7 @@ partial class Dump
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0,
Sense.PrettifySense(senseBuf));
- mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(i, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(i, 0);
@@ -733,7 +733,7 @@ partial class Dump
if(extentEnd - i < blocksToRead)
blocksToRead = (uint)(extentEnd - i) + 1;
- mhddLog.Write(i, cmdDuration);
+ mhddLog.Write(i, cmdDuration, blocksToRead);
ibgLog.Write(i, currentSpeed * 1024);
// Write empty data
@@ -778,7 +778,7 @@ partial class Dump
Invoke(string.Format(Localization.Core.Reading_sector_0_of_1_2_MiB_sec, middle + currentSector, totalSize, currentSpeed),
(long)(middle + currentSector), (long)totalSize);
- mhddLog.Write(middle + currentSector, cmdDuration);
+ mhddLog.Write(middle + currentSector, cmdDuration, blocksToRead);
ibgLog.Write(middle + currentSector, currentSpeed * 1024);
// Write empty data
@@ -855,7 +855,7 @@ partial class Dump
if(!sense &&
!_dev.Error)
{
- mhddLog.Write(currentSector, cmdDuration);
+ mhddLog.Write(currentSector, cmdDuration, blocksToRead);
ibgLog.Write(currentSector, currentSpeed * 1024);
DateTime writeStart = DateTime.Now;
outputFormat.WriteSectors(readBuffer, currentSector, blocksToRead);
@@ -880,7 +880,7 @@ partial class Dump
//errored += blocksToRead;
//resume.BadBlocks.Add(l1);
AaruConsole.DebugWriteLine("Dump-Media", Localization.Core.READ_error_0, Sense.PrettifySense(senseBuf));
- mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration);
+ mhddLog.Write(l1, cmdDuration < 500 ? 65535 : cmdDuration, _skip);
ibgLog.Write(l1, 0);
_dumpLog.WriteLine(Localization.Core.Skipping_0_blocks_from_errored_block_1, _skip, l1);
diff --git a/Aaru.Core/Logging/MHDDLog.cs b/Aaru.Core/Logging/MHDDLog.cs
index afc0f4423..f7fb8c44c 100644
--- a/Aaru.Core/Logging/MHDDLog.cs
+++ b/Aaru.Core/Logging/MHDDLog.cs
@@ -35,6 +35,8 @@ using System.Globalization;
using System.IO;
using System.Text;
using Aaru.CommonTypes.Enums;
+using Aaru.CommonTypes.Interfaces;
+using Aaru.Core.Graphics;
using Aaru.Devices;
namespace Aaru.Core.Logging;
@@ -45,6 +47,7 @@ sealed class MhddLog
const string MHDD_VER = "VER:2 ";
readonly string _logFile;
readonly MemoryStream _mhddFs;
+ readonly IMediaGraph _mediaGraph;
/// Initializes the MHDD log
/// Log file
@@ -53,12 +56,15 @@ sealed class MhddLog
/// Bytes per block
/// How many blocks read at once
/// Disable saving paths or serial numbers in log
- internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private)
+ internal MhddLog(string outputFile, Device dev, ulong blocks, ulong blockSize, ulong blocksToRead, bool @private, uint mediaGraphDimensions = 0)
{
if(dev == null ||
string.IsNullOrEmpty(outputFile))
return;
+ if(mediaGraphDimensions > 0)
+ _mediaGraph = new BlockMap((int)mediaGraphDimensions, (int)mediaGraphDimensions, blocks);
+
_mhddFs = new MemoryStream();
_logFile = outputFile;
@@ -142,7 +148,7 @@ sealed class MhddLog
/// Logs a new read
/// Starting sector
/// Duration in milliseconds
- internal void Write(ulong sector, double duration)
+ internal void Write(ulong sector, double duration, uint length = 1)
{
if(_logFile == null)
return;
@@ -152,6 +158,28 @@ sealed class MhddLog
_mhddFs.Write(sectorBytes, 0, 8);
_mhddFs.Write(durationBytes, 0, 8);
+
+ switch(duration)
+ {
+ case < 3: _mediaGraph?.PaintSectors(sector, length, 0x00, 0xFF, 0x00);
+
+ break;
+ case >= 3 and < 10: _mediaGraph?.PaintSectors(sector, length, 0x80, 0xFF, 0x00);
+
+ break;
+ case >= 10 and < 50: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xFF, 0x00);
+
+ break;
+ case >= 50 and < 150: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0xAB, 0x00);
+
+ break;
+ case >= 150 and < 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x56, 0x00);
+
+ break;
+ case >= 500: _mediaGraph?.PaintSectors(sector, length, 0xFF, 0x00, 0x00);
+
+ break;
+ }
}
/// Closes and writes to file the MHDD log
@@ -164,5 +192,7 @@ sealed class MhddLog
_mhddFs.WriteTo(fs);
_mhddFs.Close();
fs.Close();
+
+ _mediaGraph?.WriteTo(Path.GetFileNameWithoutExtension(_logFile) + ".png");
}
}
\ No newline at end of file