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
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
11 changed files with 162 additions and 15 deletions

View File

@ -100,7 +100,7 @@
0x0000007100000c20,sub_7100000C20,140,
0x0000007100000cac,sub_7100000CAC,140,
0x0000007100000d38,sub_7100000D38,140,
0x0000007100000dc4,sub_7100000DC4,12,
0x0000007100000dc4,sub_7100000DC4,12,_ZNK4sead15RuntimeTypeInfo4Root9isDerivedEPKNS0_9InterfaceE
0x0000007100000f44,sub_7100000F44,140,
0x0000007100001028,nullsub_25,4,
0x000000710000103c,sub_710000103C,20,
@ -56386,7 +56386,7 @@
0x00000071009ccbf0,sub_71009CCBF0,204,
0x00000071009cccbc,sub_71009CCCBC,92,
0x00000071009ccd18,sub_71009CCD18,140,
0x00000071009ccda4,sub_71009CCDA4,140,
0x00000071009ccda4,sub_71009CCDA4,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys4util8TaskDataEE9isDerivedEPKNS0_9InterfaceE
0x00000071009cce30,sub_71009CCE30,52,
0x00000071009cce64,sub_71009CCE64,92,
0x00000071009ccec0,sub_71009CCEC0,48,
@ -90862,7 +90862,7 @@
0x000000710120464c,res::ResourceMgrTask::prepare,4876,
0x0000007101205958,res::ResourceMgrTask::insertOverlayArena,136,
0x00000071012059e0,sub_71012059E0,720,
0x0000007101205cb0,startResourceLoadingThread,236,
0x0000007101205cb0,startResourceLoadingThread,236,_ZN4ksys3res15ResourceMgrTask25makeResourceLoadingThreadEPN4sead4HeapEb
0x0000007101205d9c,WorkerThread1::init,224,
0x0000007101205e7c,WorkerThread2::init,224,
0x0000007101205f5c,ResourceBinder::callReadFilePathAndMakeHeapAndMaybePrepareLoad,8,
@ -93175,13 +93175,13 @@
0x00000071012badd4,sub_71012BADD4,8,
0x00000071012baddc,sub_71012BADDC,92,
0x00000071012bae38,sub_71012BAE38,8,
0x00000071012bafb4,EventResourceLoadArg::ctor,156,
0x00000071012bb050,EventResourceLoadArg::dtor,72,
0x00000071012bb098,sub_71012BB098,20,
0x00000071012bb0ac,EventResourceLoadArg::dtorDelete,80,
0x00000071012bb0fc,EventResourceLoadArg::b,368,
0x00000071012bb26c,EventResourceLoadArg::null1,4,
0x00000071012bb270,EventResourceLoadArg::c,32,
0x00000071012bafb4,EventResourceLoadArg::ctor,156,_ZN4ksys3res11ControlTaskC1EPN4sead4HeapE
0x00000071012bb050,EventResourceLoadArg::dtor,72,_ZN4ksys3res11ControlTaskD2Ev
0x00000071012bb098,sub_71012BB098,20,_ZN4ksys3res15ControlTaskDataD2Ev
0x00000071012bb0ac,EventResourceLoadArg::dtorDelete,80,_ZN4ksys3res11ControlTaskD0Ev
0x00000071012bb0fc,EventResourceLoadArg::b,368,_ZN4ksys3res11ControlTask12prepareImpl_EPNS_4util11TaskRequestE
0x00000071012bb26c,EventResourceLoadArg::null1,4,_ZN4ksys3res11ControlTask6onRun_Ev
0x00000071012bb270,EventResourceLoadArg::c,32,_ZN4ksys3res11ControlTask14preRemoveImpl_Ev
0x00000071012bb290,sub_71012BB290,156,
0x00000071012bb32c,sub_71012BB32C,20,
0x00000071012bb340,nullsub_4782,4,
@ -93189,13 +93189,13 @@
0x00000071012bb378,sub_71012BB378,260,
0x00000071012bb47c,nullsub_4783,4,
0x00000071012bb480,sub_71012BB480,32,
0x00000071012bb4a0,EventResourceLoadArg::rtti1,288,
0x00000071012bb5c0,EventResourceLoadArg::rtti2,92,
0x00000071012bb4a0,EventResourceLoadArg::rtti1,288,_ZNK4ksys3res11ControlTask27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x00000071012bb5c0,EventResourceLoadArg::rtti2,92,_ZNK4ksys3res11ControlTask18getRuntimeTypeInfoEv
0x00000071012bb61c,sub_71012BB61C,288,
0x00000071012bb73c,sub_71012BB73C,92,
0x00000071012bb798,sub_71012BB798,204,
0x00000071012bb864,sub_71012BB864,92,
0x00000071012bb8c0,sub_71012BB8C0,52,
0x00000071012bb798,sub_71012BB798,204,_ZNK4ksys3res15ControlTaskData27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x00000071012bb864,sub_71012BB864,92,_ZNK4ksys3res15ControlTaskData18getRuntimeTypeInfoEv
0x00000071012bb8c0,sub_71012BB8C0,52,_ZN4ksys3res15ControlTaskDataD0Ev
0x00000071012bb8f4,sub_71012BB8F4,204,
0x00000071012bb9c0,sub_71012BB9C0,92,
0x00000071012bba1c,j__ZdlPv_1295,4,

Can't render this file because it is too large.

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

View File

@ -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

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

View File

@ -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

View File

@ -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;
};

View File

@ -0,0 +1 @@
#include "resTaskRequest.h"

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

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

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;

View File

@ -0,0 +1,11 @@
#pragma once
#include <prim/seadRuntimeTypeInfo.h>
namespace ksys::util {
class TaskData {
SEAD_RTTI_BASE(TaskData)
};
} // namespace ksys::util