mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-07-28 18:47:11 +02:00
Mod: Do LayeredFs loading Parallel to improve speed (#6180)
* Mod: Do LayeredFs loading Parallel to improve speed This fixes and superseed #5672 due to inactivity, nothing more. (See original PR for description) Testing are welcome. Close #5661 * Addresses gdkchan's feedback * commit to test mako change * Revert "commit to test mako change" This reverts commit 8b0caa8a21db298db3dfcbe5b7e9029c4f066c46.
This commit is contained in:
parent
30bdc4544e
commit
7795b662a9
2 changed files with 72 additions and 6 deletions
65
src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/LazyFile.cs
Normal file
65
src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/LazyFile.cs
Normal file
|
@ -0,0 +1,65 @@
|
|||
using LibHac;
|
||||
using LibHac.Common;
|
||||
using LibHac.Fs;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
|
||||
{
|
||||
class LazyFile : LibHac.Fs.Fsa.IFile
|
||||
{
|
||||
private readonly LibHac.Fs.Fsa.IFileSystem _fs;
|
||||
private readonly string _filePath;
|
||||
private readonly UniqueRef<LibHac.Fs.Fsa.IFile> _fileReference = new();
|
||||
private readonly FileInfo _fileInfo;
|
||||
|
||||
public LazyFile(string filePath, string prefix, LibHac.Fs.Fsa.IFileSystem fs)
|
||||
{
|
||||
_fs = fs;
|
||||
_filePath = filePath;
|
||||
_fileInfo = new FileInfo(prefix + "/" + filePath);
|
||||
}
|
||||
|
||||
private void PrepareFile()
|
||||
{
|
||||
if (_fileReference.Get == null)
|
||||
{
|
||||
_fs.OpenFile(ref _fileReference.Ref, _filePath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
|
||||
}
|
||||
}
|
||||
|
||||
protected override Result DoRead(out long bytesRead, long offset, Span<byte> destination, in ReadOption option)
|
||||
{
|
||||
PrepareFile();
|
||||
|
||||
return _fileReference.Get!.Read(out bytesRead, offset, destination);
|
||||
}
|
||||
|
||||
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source, in WriteOption option)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
protected override Result DoFlush()
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
protected override Result DoSetSize(long size)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
protected override Result DoGetSize(out long size)
|
||||
{
|
||||
size = _fileInfo.Length;
|
||||
|
||||
return Result.Success;
|
||||
}
|
||||
|
||||
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue