Code formatting and reduced method size

This commit is contained in:
Aaron Murgatroyd 2024-07-06 22:36:40 +10:00
commit c0b91ed914

View file

@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities
public static bool CanTrim(string filename, ILog log = null) public static bool CanTrim(string filename, ILog log = null)
{ {
if (System.IO.Path.GetExtension(filename).ToUpperInvariant() == ".XCI") if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
{ {
var trimmer = new XCIFileTrimmer(filename, log); var trimmer = new XCIFileTrimmer(filename, log);
return trimmer.CanBeTrimmed; return trimmer.CanBeTrimmed;
@ -161,34 +161,12 @@ namespace Ryujinx.Common.Utilities
try try
{ {
this.Pos = this.TrimmedFileSizeB; this.Pos = this.TrimmedFileSizeB;
var buffer = new byte[BufferSize]; var freeSpaceValid = true;
var readSizeB = this.FileSizeB - this.TrimmedFileSizeB; var readSizeB = this.FileSizeB - this.TrimmedFileSizeB;
var reads = readSizeB / XCIFileTrimmer.BufferSize;
long read = 0;
var time = Performance.Measure(() => var time = Performance.Measure(() =>
{ {
try freeSpaceValid = CheckPadding(readSizeB);
{
while (true)
{
var bytes = _fileStream.Read(buffer, 0, XCIFileTrimmer.BufferSize);
if (bytes == 0)
break;
if (buffer.Take(bytes).AsParallel().Any(b => b != XCIFileTrimmer.PaddingByte))
{
Log?.Write(LogType.Warn, "Free space is NOT valid");
return;
}
Log?.Progress(read, reads, "Verifying file can be trimmed", false);
read++;
}
}
finally
{
Log?.Progress(reads, reads, "Verifying file can be trimmed", true);
}
}); });
if (time.TotalSeconds > 0) if (time.TotalSeconds > 0)
@ -196,8 +174,8 @@ namespace Ryujinx.Common.Utilities
Log?.Write(LogType.Info, $"Checked at {readSizeB / (double)XCIFileTrimmer.BytesInAMegabyte / time.TotalSeconds:N} Mb/sec"); Log?.Write(LogType.Info, $"Checked at {readSizeB / (double)XCIFileTrimmer.BytesInAMegabyte / time.TotalSeconds:N} Mb/sec");
} }
Log?.Write(LogType.Info, "Free space is valid"); if (freeSpaceValid) Log?.Write(LogType.Info, "Free space is valid");
this._freeSpaceValid = true; this._freeSpaceValid = freeSpaceValid;
} }
finally finally
{ {
@ -217,6 +195,31 @@ namespace Ryujinx.Common.Utilities
} }
} }
private bool CheckPadding(long readSizeB)
{
var maxReads = readSizeB / XCIFileTrimmer.BufferSize;
long read = 0;
var buffer = new byte[BufferSize];
while (true)
{
var bytes = _fileStream.Read(buffer, 0, XCIFileTrimmer.BufferSize);
if (bytes == 0)
break;
Log?.Progress(read, maxReads, "Verifying file can be trimmed", false);
if (buffer.Take(bytes).AsParallel().Any(b => b != XCIFileTrimmer.PaddingByte))
{
Log?.Write(LogType.Warn, "Free space is NOT valid");
return false;
}
read++;
}
return true;
}
protected void Reset() protected void Reset()
{ {
this._freeSpaceChecked = false; this._freeSpaceChecked = false;
@ -329,32 +332,13 @@ namespace Ryujinx.Common.Utilities
} }
var outfileStream = new FileStream(this._filename, FileMode.Append, FileAccess.Write, FileShare.Write); var outfileStream = new FileStream(this._filename, FileMode.Append, FileAccess.Write, FileShare.Write);
var buffer = new byte[BufferSize];
Array.Fill<byte>(buffer, XCIFileTrimmer.PaddingByte);
var bytesToWriteB = this.UntrimmedFileSizeB - this.FileSizeB; var bytesToWriteB = this.UntrimmedFileSizeB - this.FileSizeB;
var bytesLeftToWriteB = bytesToWriteB;
var writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize;
var write = 0;
try try
{ {
var time = Performance.Measure(() => var time = Performance.Measure(() =>
{ {
try WritePadding(outfileStream, bytesToWriteB);
{
while (bytesLeftToWriteB > 0)
{
var bytesToWrite = Math.Min(XCIFileTrimmer.BufferSize, bytesLeftToWriteB);
outfileStream.Write(buffer, 0, (int)bytesToWrite);
bytesLeftToWriteB -= bytesToWrite;
Log?.Progress(write, writes, "Writing padding data...", false);
write++;
}
}
finally
{
Log?.Progress(write, writes, "Writing padding data...", true);
}
}); });
if (time.TotalSeconds > 0) if (time.TotalSeconds > 0)
@ -377,6 +361,32 @@ namespace Ryujinx.Common.Utilities
} }
} }
private void WritePadding(FileStream outfileStream, long bytesToWriteB)
{
var bytesLeftToWriteB = bytesToWriteB;
var writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize;
var write = 0;
try
{
var buffer = new byte[BufferSize];
Array.Fill<byte>(buffer, XCIFileTrimmer.PaddingByte);
while (bytesLeftToWriteB > 0)
{
var bytesToWrite = Math.Min(XCIFileTrimmer.BufferSize, bytesLeftToWriteB);
outfileStream.Write(buffer, 0, (int)bytesToWrite);
bytesLeftToWriteB -= bytesToWrite;
Log?.Progress(write, writes, "Writing padding data...", false);
write++;
}
}
finally
{
Log?.Progress(write, writes, "Writing padding data...", true);
}
}
protected void OpenReaders() protected void OpenReaders()
{ {
if (_binaryReader == null) if (_binaryReader == null)