fs_user: Add a delay for each file open
This commit is contained in:
@ -15,6 +15,28 @@
|
||||
|
||||
namespace FileSys {
|
||||
|
||||
class SDMCWriteOnlyDelayGenerator : public DelayGenerator {
|
||||
public:
|
||||
u64 GetReadDelayNs(std::size_t length) override {
|
||||
// This is the delay measured on O3DS and O2DS with
|
||||
// https://gist.github.com/B3n30/ac40eac20603f519ff106107f4ac9182
|
||||
// from the results the average of each length was taken.
|
||||
static constexpr u64 slope(183);
|
||||
static constexpr u64 offset(524879);
|
||||
static constexpr u64 minimum(631826);
|
||||
u64 IPCDelayNanoseconds = std::max<u64>(static_cast<u64>(length) * slope + offset, minimum);
|
||||
return IPCDelayNanoseconds;
|
||||
}
|
||||
|
||||
u64 GetOpenDelayNs() override {
|
||||
// This is the delay measured on O3DS and O2DS with
|
||||
// https://gist.github.com/FearlessTobi/c37e143c314789251f98f2c45cd706d2
|
||||
// from the results the average of each length was taken.
|
||||
static constexpr u64 IPCDelayNanoseconds(269082);
|
||||
return IPCDelayNanoseconds;
|
||||
}
|
||||
};
|
||||
|
||||
ResultVal<std::unique_ptr<FileBackend>> SDMCWriteOnlyArchive::OpenFile(const Path& path,
|
||||
const Mode& mode) const {
|
||||
if (mode.read_flag) {
|
||||
@ -51,7 +73,10 @@ bool ArchiveFactory_SDMCWriteOnly::Initialize() {
|
||||
|
||||
ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SDMCWriteOnly::Open(const Path& path,
|
||||
u64 program_id) {
|
||||
auto archive = std::make_unique<SDMCWriteOnlyArchive>(sdmc_directory);
|
||||
std::unique_ptr<DelayGenerator> delay_generator =
|
||||
std::make_unique<SDMCWriteOnlyDelayGenerator>();
|
||||
auto archive =
|
||||
std::make_unique<SDMCWriteOnlyArchive>(sdmc_directory, std::move(delay_generator));
|
||||
return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user