Files
botw/lib/sead/include/mc/seadWorkerMgr.h
T
Léo Lam 18c60323a9 Switch to subrepos
git subrepo clone https://github.com/open-ead/sead lib/sead

subrepo:
  subdir:   "lib/sead"
  merged:   "1b66e825d"
upstream:
  origin:   "https://github.com/open-ead/sead"
  branch:   "master"
  commit:   "1b66e825d"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone (merge) https://github.com/open-ead/nnheaders lib/NintendoSDK

subrepo:
  subdir:   "lib/NintendoSDK"
  merged:   "9ee21399f"
upstream:
  origin:   "https://github.com/open-ead/nnheaders"
  branch:   "master"
  commit:   "9ee21399f"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/agl lib/agl

subrepo:
  subdir:   "lib/agl"
  merged:   "7c063271b"
upstream:
  origin:   "https://github.com/open-ead/agl"
  branch:   "master"
  commit:   "7c063271b"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/EventFlow lib/EventFlow

subrepo:
  subdir:   "lib/EventFlow"
  merged:   "c35d21b34"
upstream:
  origin:   "https://github.com/open-ead/EventFlow"
  branch:   "master"
  commit:   "c35d21b34"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"
2022-03-21 21:31:42 +01:00

58 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