mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-25 20:55:17 +00:00
57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include "container/seadBuffer.h"
|
|
#include "framework/seadInfLoopChecker.h"
|
|
#include "heap/seadDisposer.h"
|
|
#include "hostio/seadHostIONode.h"
|
|
#include "mc/seadCoreInfo.h"
|
|
#include "mc/seadJobQueue.h"
|
|
#include "mc/seadWorker.h"
|
|
#include "time/seadTickSpan.h"
|
|
#include "time/seadTickTime.h"
|
|
|
|
namespace sead
|
|
{
|
|
class WorkerMgr : public hostio::Node
|
|
{
|
|
public:
|
|
struct InitializeArg
|
|
{
|
|
InitializeArg();
|
|
|
|
std::array<s32, 3> thread_priorities;
|
|
std::array<u32, 3> thread_stack_sizes;
|
|
u32 worker_num_jobs;
|
|
const char* name;
|
|
};
|
|
|
|
WorkerMgr();
|
|
virtual ~WorkerMgr() = default;
|
|
WorkerMgr(const WorkerMgr&) = delete;
|
|
auto operator=(const WorkerMgr&) = delete;
|
|
|
|
virtual void initialize(const InitializeArg& arg);
|
|
void finalize();
|
|
|
|
void pushJobQueue(JobQueue* queue, CoreIdMask core_id_mask, SyncType sync_type,
|
|
JobQueuePushType push_type);
|
|
void pushJobQueue(const char* context_name, JobQueue* queue, CoreIdMask core_id_mask,
|
|
SyncType sync_type, JobQueuePushType push_type);
|
|
void run();
|
|
void sync();
|
|
bool isAllWorkerSleep() const;
|
|
|
|
protected:
|
|
void onInfLoop_(const InfLoopChecker::InfLoopParam& param);
|
|
|
|
InfLoopChecker::InfLoopEvent::Slot mInfLoopEventSlot;
|
|
Buffer<Worker*> mWorkers;
|
|
Buffer<JobQueue*> mJobQueues;
|
|
u32 mNumJobQueues;
|
|
bool mProcessJobQueues = false;
|
|
u32 mNumWakeups = 0;
|
|
TickTime mLastWakeup;
|
|
TickSpan mWaitDuration = TickSpan::makeFromMilliSeconds(1);
|
|
};
|
|
} // namespace sead
|