diff options
| author | Léo Lam <leo@leolam.fr> | 2020-09-27 00:12:24 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-09-27 13:00:37 +0200 |
| commit | ba5a3c642d834a04800c6c6bc84cab7fe04ea0e2 (patch) | |
| tree | ed777a2af2b074182ee30e3cd4080c80f6958502 /src | |
| parent | b1926813b720b1f8088db62160cb60430b0b11f2 (diff) | |
ksys/res: Add ControlTask, TaskRequest
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/Resource/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resControlTask.cpp | 30 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resControlTask.h | 41 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resResourceMgrTask.cpp | 20 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resResourceMgrTask.h | 10 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resTaskRequest.cpp | 1 | ||||
| -rw-r--r-- | src/KingSystem/Resource/resTaskRequest.h | 25 | ||||
| -rw-r--r-- | src/KingSystem/Utils/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/KingSystem/Utils/Thread/Task.h | 2 | ||||
| -rw-r--r-- | src/KingSystem/Utils/Thread/TaskData.h | 11 |
10 files changed, 147 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt index 46218270..87918287 100644 --- a/src/KingSystem/Resource/CMakeLists.txt +++ b/src/KingSystem/Resource/CMakeLists.txt @@ -94,9 +94,15 @@ target_sources(uking PRIVATE resHandle.h resLoadRequest.cpp resLoadRequest.h + resControlTask.cpp + resControlTask.h resOffsetReadFileDevice.cpp resOffsetReadFileDevice.h + resResourceMgrTask.cpp + resResourceMgrTask.h resSystem.h + resTaskRequest.cpp + resTaskRequest.h resUnit.cpp resUnit.h diff --git a/src/KingSystem/Resource/resControlTask.cpp b/src/KingSystem/Resource/resControlTask.cpp new file mode 100644 index 00000000..bdade971 --- /dev/null +++ b/src/KingSystem/Resource/resControlTask.cpp @@ -0,0 +1,30 @@ +#include "KingSystem/Resource/resControlTask.h" +#include "KingSystem/Resource/resSystem.h" +#include "KingSystem/Resource/resTaskRequest.h" + +namespace ksys::res { + +ControlTask::ControlTask(sead::Heap* heap) : util::ManagedTask(heap) {} + +void ControlTask::onRun_() {} + +void ControlTask::prepareImpl_(util::TaskRequest* req_) { + auto* req = static_cast<TaskRequest*>(req_); + + mData.mHasResLoadReq = req->mHasResLoadReq; + mData.mPackResUnit = req->mPackResUnit; + mData.mResHandle = req->mResHandle; + mData.mResPath = req->mResPath; + mData.mResLoadReq = req->mResLoadReq; + mData.mResLoadReq.mPath = mData.mResPath; + + if (getUserData() == nullptr) + setUserData(&mData); +} + +void ControlTask::preRemoveImpl_() { + if (returnFalse()) + stubbedLogFunction(); +} + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/resControlTask.h b/src/KingSystem/Resource/resControlTask.h new file mode 100644 index 00000000..8bebc1fd --- /dev/null +++ b/src/KingSystem/Resource/resControlTask.h @@ -0,0 +1,41 @@ +#pragma once + +#include <prim/seadSafeString.h> +#include "KingSystem/Resource/resLoadRequest.h" +#include "KingSystem/Utils/Thread/ManagedTask.h" +#include "KingSystem/Utils/Thread/TaskData.h" +#include "KingSystem/Utils/Types.h" + +namespace ksys::res { + +class Handle; +class ResourceUnit; + +class ControlTaskData : public util::TaskData { + SEAD_RTTI_OVERRIDE(ControlTaskData, util::TaskData) +public: + virtual ~ControlTaskData() = default; + + bool mHasResLoadReq = false; + ResourceUnit* mPackResUnit = nullptr; + Handle* mResHandle = nullptr; + sead::FixedSafeString<128> mResPath; + LoadRequest mResLoadReq; +}; +KSYS_CHECK_SIZE_NX150(ControlTaskData, 0x138); + +class ControlTask : public util::ManagedTask { + SEAD_RTTI_OVERRIDE(ControlTask, util::ManagedTask) +public: + explicit ControlTask(sead::Heap* heap); + +private: + void onRun_() override; + void prepareImpl_(util::TaskRequest* req) override; + void preRemoveImpl_() override; + + ControlTaskData mData; +}; +KSYS_CHECK_SIZE_NX150(ControlTask, 0x1f8); + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/resResourceMgrTask.cpp b/src/KingSystem/Resource/resResourceMgrTask.cpp index c5b53de1..019a46de 100644 --- a/src/KingSystem/Resource/resResourceMgrTask.cpp +++ b/src/KingSystem/Resource/resResourceMgrTask.cpp @@ -1 +1,21 @@ #include "KingSystem/Resource/resResourceMgrTask.h" +#include <thread/seadThreadUtil.h> +#include "KingSystem/Utils/Thread/GameTaskThread.h" +#include "KingSystem/Utils/Thread/TaskThread.h" + +namespace ksys::res { + +util::TaskThread* ResourceMgrTask::makeResourceLoadingThread(sead::Heap* heap, + bool use_game_task_thread) { + if (use_game_task_thread) { + return new (heap) util::GameTaskThread( + "Resource Loading", heap, sead::ThreadUtil::ConvertPrioritySeadToPlatform(19), + sead::MessageQueue::BlockType::Blocking, 0x7fffffff, 0xfa000, 32); + } + + return new (heap) util::TaskThread( + "Resource Loading", heap, sead::ThreadUtil::ConvertPrioritySeadToPlatform(19), + sead::MessageQueue::BlockType::Blocking, 0x7fffffff, 0xa000, 32); +} + +} // namespace ksys::res diff --git a/src/KingSystem/Resource/resResourceMgrTask.h b/src/KingSystem/Resource/resResourceMgrTask.h index e9bdd2db..18ea07f0 100644 --- a/src/KingSystem/Resource/resResourceMgrTask.h +++ b/src/KingSystem/Resource/resResourceMgrTask.h @@ -1,8 +1,16 @@ #pragma once +namespace sead { +class Heap; +} + namespace ksys { class OverlayArena; + +namespace util { +class TaskThread; } +} // namespace ksys namespace ksys::res { @@ -14,6 +22,8 @@ public: void insertOverlayArena(OverlayArena* arena); OverlayArena* getSomeArena() const; + util::TaskThread* makeResourceLoadingThread(sead::Heap* heap, bool use_game_task_thread); + private: static ResourceMgrTask* sInstance; }; diff --git a/src/KingSystem/Resource/resTaskRequest.cpp b/src/KingSystem/Resource/resTaskRequest.cpp new file mode 100644 index 00000000..85d649d1 --- /dev/null +++ b/src/KingSystem/Resource/resTaskRequest.cpp @@ -0,0 +1 @@ +#include "resTaskRequest.h" diff --git a/src/KingSystem/Resource/resTaskRequest.h b/src/KingSystem/Resource/resTaskRequest.h new file mode 100644 index 00000000..f9925417 --- /dev/null +++ b/src/KingSystem/Resource/resTaskRequest.h @@ -0,0 +1,25 @@ +#pragma once + +#include "KingSystem/Resource/resLoadRequest.h" +#include "KingSystem/Utils/Thread/Task.h" +#include "KingSystem/Utils/Types.h" + +namespace ksys::res { + +class Handle; +class ResourceUnit; + +class TaskRequest : public util::TaskRequest { + SEAD_RTTI_OVERRIDE(TaskRequest, util::TaskRequest) +public: + TaskRequest() = default; + + bool mHasResLoadReq = false; + ResourceUnit* mPackResUnit = nullptr; + Handle* mResHandle = nullptr; + sead::FixedSafeString<128> mResPath; + LoadRequest mResLoadReq; +}; +KSYS_CHECK_SIZE_NX150(TaskRequest, 0x180); + +} // namespace ksys::res diff --git a/src/KingSystem/Utils/CMakeLists.txt b/src/KingSystem/Utils/CMakeLists.txt index 544422c5..34aa8ef6 100644 --- a/src/KingSystem/Utils/CMakeLists.txt +++ b/src/KingSystem/Utils/CMakeLists.txt @@ -9,6 +9,7 @@ target_sources(uking PRIVATE Thread/ManagedTaskHandle.h Thread/Task.cpp Thread/Task.h + Thread/TaskData.h Thread/TaskMgr.cpp Thread/TaskMgr.h Thread/TaskQueueBase.cpp diff --git a/src/KingSystem/Utils/Thread/Task.h b/src/KingSystem/Utils/Thread/Task.h index 4b86abe6..fa5a020c 100644 --- a/src/KingSystem/Utils/Thread/Task.h +++ b/src/KingSystem/Utils/Thread/Task.h @@ -73,6 +73,8 @@ KSYS_CHECK_SIZE_NX150(TaskDelegateSetter, 0x10); class TaskRequest { SEAD_RTTI_BASE(TaskRequest) public: + // TODO: initialize the members + TaskRequest() = default; virtual ~TaskRequest() = default; bool mHasHandle; diff --git a/src/KingSystem/Utils/Thread/TaskData.h b/src/KingSystem/Utils/Thread/TaskData.h new file mode 100644 index 00000000..68db7ce0 --- /dev/null +++ b/src/KingSystem/Utils/Thread/TaskData.h @@ -0,0 +1,11 @@ +#pragma once + +#include <prim/seadRuntimeTypeInfo.h> + +namespace ksys::util { + +class TaskData { + SEAD_RTTI_BASE(TaskData) +}; + +} // namespace ksys::util |
