diff options
| author | Léo Lam <leo@leolam.fr> | 2020-10-08 00:13:12 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-10-10 00:54:50 +0200 |
| commit | 83660921b64dfc37f4b6176d36656e26a9798285 (patch) | |
| tree | 1d18d4a9c161923c37c78f83ec2e45620201f6af /src/KingSystem/Resource/resResourceMgrTask.cpp | |
| parent | 76655d85a90ca1cede47a45b4faa3e6e767b99a3 (diff) | |
ksys/res: Start adding ResourceMgrTask
Adds data members and simple functions.
Diffstat (limited to 'src/KingSystem/Resource/resResourceMgrTask.cpp')
| -rw-r--r-- | src/KingSystem/Resource/resResourceMgrTask.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/resResourceMgrTask.cpp b/src/KingSystem/Resource/resResourceMgrTask.cpp index 019a46de..2622e3e5 100644 --- a/src/KingSystem/Resource/resResourceMgrTask.cpp +++ b/src/KingSystem/Resource/resResourceMgrTask.cpp @@ -1,10 +1,81 @@ #include "KingSystem/Resource/resResourceMgrTask.h" +#include <framework/seadHeapPolicies.h> +#include <framework/seadTaskID.h> #include <thread/seadThreadUtil.h> +#include "KingSystem/Resource/resCompactedHeap.h" +#include "KingSystem/Resource/resEntryFactory.h" +#include "KingSystem/Resource/resTextureHandleList.h" +#include "KingSystem/Resource/resTextureHandleMgr.h" +#include "KingSystem/Utils/SafeDelete.h" #include "KingSystem/Utils/Thread/GameTaskThread.h" +#include "KingSystem/Utils/Thread/TaskMgr.h" #include "KingSystem/Utils/Thread/TaskThread.h" namespace ksys::res { +void ResourceMgrTask::setInstance(ResourceMgrTask* task) { + if (!sInstance) { + sInstance = task; + task->mInstancePtrClearer.mClearOnDestruction = true; + } +} + +ResourceMgrTask::ResourceMgrTask(const sead::TaskConstructArg& arg) + : sead::CalculateTask(arg, "res::ResourceMgrTask"), + mSzsDecompressorCS(arg.heap_array->getPrimaryHeap()), + mCounter(arg.heap_array->getPrimaryHeap()), mTask(arg.heap_array->getPrimaryHeap()) { + mArenas.initOffset(OverlayArena::getListNodeOffset()); + mUnits.initOffset(ResourceUnit::getResMgrUnitListNodeOffset()); + mSomeList.initOffset(0x188); // TODO: replace this with a "get offset" call + mSystemCalcFn.bind(this, &ResourceMgrTask::callSystemCalc_); + mFileDevicePrefixes.initOffset(FileDevicePrefix::getListNodeOffset()); +} + +ResourceMgrTask::~ResourceMgrTask() { + util::safeDelete(mTexHandleList); + util::safeDelete(mTexHandleMgr); + util::safeDeleteThread(mCompactionThread); + + if (mCompactedHeapMip0) { + mCompactedHeapMip0->destroy(); + util::safeDeleteArray(mCompactedHeapMip0Buffer); + } + + if (mCompactedHeapMain) { + mCompactedHeapMain->destroy(); + util::safeDeleteArray(mCompactedHeapMainBuffer); + mCompactedHeapMainSeadHeap->destroy(); + } + + util::safeDeleteArray(mCompactedHeapMainBuffer2); + util::safeDeleteArray(mOffsetReadBuf); + mExtensions2.freeBuffer(); + mExtensions1.freeBuffer(); + + util::safeDeleteThread(mMovableMemoryThread); + util::safeDeleteThread(mResourceMemoryThread); + util::safeDeleteThread(mResourceControlThread); + util::safeDeleteThread(mResourceLoadingThread); + util::safeDelete(mTask3); + util::safeDelete(mTask2); + util::safeDelete(mTask1); + util::safeDelete(mControlTask); + + if (mResourceMemoryTaskMgr) { + mResourceMemoryTaskMgr->finalize(); + util::safeDelete(mResourceMemoryTaskMgr); + } + + if (mResourceControlTaskMgr) { + mResourceControlTaskMgr->finalize(); + util::safeDelete(mResourceControlTaskMgr); + } + + util::safeDelete(mEntryFactoryBase); + + mResSystemHeap->destroy(); +} + util::TaskThread* ResourceMgrTask::makeResourceLoadingThread(sead::Heap* heap, bool use_game_task_thread) { if (use_game_task_thread) { |
