ksys/res: Add ControlTask, TaskRequest

This commit is contained in:
Léo Lam
2020-09-27 00:12:24 +02:00
parent b1926813b7
commit ba5a3c642d
11 changed files with 162 additions and 15 deletions
+6
View File
@@ -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
@@ -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
+41
View File
@@ -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
@@ -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
@@ -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;
};
@@ -0,0 +1 @@
#include "resTaskRequest.h"
+25
View File
@@ -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
+1
View File
@@ -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
+2
View File
@@ -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;
+11
View File
@@ -0,0 +1,11 @@
#pragma once
#include <prim/seadRuntimeTypeInfo.h>
namespace ksys::util {
class TaskData {
SEAD_RTTI_BASE(TaskData)
};
} // namespace ksys::util