diff options
| author | Léo Lam <leo@leolam.fr> | 2021-08-20 16:57:55 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-08-20 17:29:59 +0200 |
| commit | 737ea7966944404ab6dc68b8e0480cb324a78e04 (patch) | |
| tree | f934894b35d1342cd7447010f8c8fbdd77081df2 /src/KingSystem/Resource/resResourceMgrTask.cpp | |
| parent | f3c3332cef9137d91e187648cc3000e1e8393d55 (diff) | |
ksys/res: Implement more ResourceMgrTask functions
Diffstat (limited to 'src/KingSystem/Resource/resResourceMgrTask.cpp')
| -rw-r--r-- | src/KingSystem/Resource/resResourceMgrTask.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/resResourceMgrTask.cpp b/src/KingSystem/Resource/resResourceMgrTask.cpp index 6b4d34f2..babf010f 100644 --- a/src/KingSystem/Resource/resResourceMgrTask.cpp +++ b/src/KingSystem/Resource/resResourceMgrTask.cpp @@ -4,6 +4,7 @@ #include <resource/seadResourceMgr.h> #include <resource/seadSZSDecompressor.h> #include <thread/seadThreadUtil.h> +#include "KingSystem/Framework/frmWorkerSupportThreadMgr.h" #include "KingSystem/Resource/resCache.h" #include "KingSystem/Resource/resCompactedHeap.h" #include "KingSystem/Resource/resEntryFactory.h" @@ -414,6 +415,11 @@ bool ResourceMgrTask::calc_(void*) { return true; } +bool ResourceMgrTask::callSystemCalc_(void* userdata) { + systemCalc_(); + return true; +} + bool ResourceMgrTask::dropSFromExtensionIfNeeded(const sead::SafeString& path, sead::BufferedSafeString& new_path, s32 dot_idx, const sead::SafeString& extension) const { @@ -633,6 +639,41 @@ bool ResourceMgrTask::getUncompressedSize(u32* size, const sead::SafeString& pat return true; } +void ResourceMgrTask::clearUnits_() { + const auto lock = sead::makeScopedLock(mUnitsCS); + + const int num_units = mUnits.size(); + if (num_units != 0 && returnFalse()) + stubbedLogFunction(); + + for (auto it = mUnits.robustBegin(), end = mUnits.robustEnd(); it != end; ++it) { + ResourceUnit* unit = &*it; + if (it->mTask3.canSubmitRequest()) { + mUnits.erase(unit); + requestClearCache(&unit); + } + } + + if (mUnits.size() != 0 || (num_units != 0 && returnFalse())) + stubbedLogFunction(); +} + +void ResourceMgrTask::systemCalc_() { + if (mTask1->canSubmitRequest()) { + util::TaskRequest request; + request.mSynchronous = false; + request.mHasHandle = false; + request.mLaneId = u8(LaneId::_6); + request.mThread = mResourceControlThread; + request.mName = "res::System::calc"; + mTask1->submitRequest(request); + } + + mTexHandleMgr->preCalc(); + updateCompaction(); + mTexHandleMgr->calc(); +} + // reordering #ifdef NON_MATCHING void ResourceMgrTask::setCompactionStopped(bool stopped) { @@ -652,6 +693,14 @@ bool ResourceMgrTask::isCompactionStopped() const { return mCompactionCounter == 0; } +void ResourceMgrTask::requestCalc() { + frm::WorkerSupportThreadMgr::instance()->submitRequest(2, &mSystemCalcFn); +} + +void ResourceMgrTask::waitForCalc() { + frm::WorkerSupportThreadMgr::instance()->waitForTask(2); +} + bool ResourceMgrTask::initTempResourceLoader(TempResourceLoader* loader, TempResourceLoader::InitArg& arg) { arg.work = mTexHandleMgr->getArchiveWork(); |
