sead::Worker class

Base classes

class Thread

Public types

enum class HeapNullOption { AlwaysUseSpecifiedHeap = 0, UseSpecifiedOrContainHeap = 1, DoNotAppendDisposerIfNoHeapSpecified = 2, UseSpecifiedOrCurrentHeap = 3 }
enum class NodeClassType { Reflexible = 0, Node = 1, Other = 2 }
enum class AllocFlg { Name = 1u << 0u, Meta = 1u << 1u }

Public static variables

static MessageQueue::Element cMsg_Process constexpr
static const s32 cDefaultPriority

Public static functions

static void yield()
static void sleep(TickSpan howLong)
static auto getListNodeOffset() -> u32

Constructors, destructors, conversion operators

SEAD_ENUM(State, cSleep, cWakeup, cRunning, cRunning_WaitLock, cRunning_GetLock, cRunning_Run, cRunning_AfterRun, cRunning_BeforeReturn, cRunning_AllJobDoneReturn, cFinished, cWaitingAtWorker) Worker(WorkerMgr *mgr

Public functions

auto pushJobQueue(const char* name, JobQueue* queue, JobQueuePushType type) -> bool
void clearJobQQ()
void setState(Worker::State state)
void destroy() virtual
auto sendMessage(MessageQueue::Element msg, MessageQueue::BlockType block_type) -> bool virtual
auto recvMessage(MessageQueue::BlockType block_type) -> MessageQueue::Element virtual
auto getMessageQueue() const -> const MessageQueue& virtual
auto start() -> bool virtual
void quit(bool is_jam) virtual
void waitDone() virtual
void quitAndDestroySingleThread(bool is_jam) virtual
void quitAndWaitDoneSingleThread(bool is_jam) virtual
void setPriority(s32 prio) virtual
auto getPriority() const -> s32 virtual
auto getBlockType() const -> MessageQueue::BlockType virtual
auto getStackSize() const -> s32 virtual
auto calcStackUsedSizePeak() const -> s32 virtual
auto getId() const -> u32
auto getState() const -> State
auto isDone() const -> bool
auto isActive() const -> bool
auto getAffinity() const -> const CoreIdMask&
void setAffinity(const CoreIdMask& affinity)
void checkStackOverFlow(const char* source_file, s32 source_line) const
void checkStackEndCorruption(const char* source_file, s32 source_line) const
void checkStackPointerOverFlow(const char* source_file, s32 source_line) const
void setStackOverflowExceptionEnable(bool)
auto getThreadListNode() -> ThreadListNode*
auto isDefaultPriority() const -> bool
auto getCurrentHeap() const -> Heap*
auto setCurrentHeap(Heap* heap) -> Heap*
auto getFindContainHeapCache() -> FindContainHeapCache*
auto getName() const -> const SafeString&
void setName(const SafeString& name)
auto getNodeClassType() const -> NodeClassType virtual

Public variables

u32 num_jobs
u32 s32 stack_size
u32 s32 s32 priority
u32 s32 s32 const SafeString& name

Protected functions

void calc_(MessageQueue::Element msg) override
void proc_() virtual
auto getNextJQ_() -> JobQueue*
void wakeup_(MessageQueue::Element msg)
void run_() virtual
auto getStackCheckStartAddress_() const -> uintptr_t virtual
void initStackCheck_()
void initStackCheckWithCurrentStackPointer_()
auto getDisposerHeap_() const -> Heap*

Protected variables

CoreId mCore
Atomic<Worker::State> mWorkerState
WorkerMgr* mMgr
RingBuffer<JobQueue*> mJobQueues
JobQueueLock mLock
JobQueue* mCurrentQueue
const char* mCurrentQueueDescription
u32 mNumRuns
TickTime mLastRun
Event mEvent
MessageQueue mMessageQueue
s32 mStackSize
ThreadListNode mListNode
Heap* mCurrentHeap
FindContainHeapCache mFindContainHeapCache
MessageQueue::BlockType mBlockType
MessageQueue::Element mQuitMsg
u32 mId
State mState
CoreIdMask mAffinity
void* mStackTop
void* mStackTopForCheck
s32 mPriority

Enum documentation

enum class sead::Worker::HeapNullOption

enum class sead::Worker::AllocFlg

Function documentation

static void sead::Worker::yield()

static void sead::Worker::sleep(TickSpan howLong)

static u32 sead::Worker::getListNodeOffset()

void sead::Worker::destroy() virtual

bool sead::Worker::sendMessage(MessageQueue::Element msg, MessageQueue::BlockType block_type) virtual

const MessageQueue& sead::Worker::getMessageQueue() const virtual

bool sead::Worker::start() virtual

void sead::Worker::quit(bool is_jam) virtual

void sead::Worker::waitDone() virtual

void sead::Worker::quitAndDestroySingleThread(bool is_jam) virtual

void sead::Worker::quitAndWaitDoneSingleThread(bool is_jam) virtual

void sead::Worker::setPriority(s32 prio) virtual

s32 sead::Worker::getPriority() const virtual

MessageQueue::BlockType sead::Worker::getBlockType() const virtual

s32 sead::Worker::getStackSize() const virtual

s32 sead::Worker::calcStackUsedSizePeak() const virtual

u32 sead::Worker::getId() const

State sead::Worker::getState() const

bool sead::Worker::isDone() const

bool sead::Worker::isActive() const

const CoreIdMask& sead::Worker::getAffinity() const

void sead::Worker::setAffinity(const CoreIdMask& affinity)

void sead::Worker::checkStackOverFlow(const char* source_file, s32 source_line) const

void sead::Worker::checkStackEndCorruption(const char* source_file, s32 source_line) const

void sead::Worker::checkStackPointerOverFlow(const char* source_file, s32 source_line) const

void sead::Worker::setStackOverflowExceptionEnable(bool)

bool sead::Worker::isDefaultPriority() const

Heap* sead::Worker::getCurrentHeap() const

Heap* sead::Worker::setCurrentHeap(Heap* heap)

const SafeString& sead::Worker::getName() const

void sead::Worker::setName(const SafeString& name)

NodeClassType sead::Worker::getNodeClassType() const virtual

void sead::Worker::run_() virtual protected

uintptr_t sead::Worker::getStackCheckStartAddress_() const virtual protected

void sead::Worker::initStackCheck_() protected

void sead::Worker::initStackCheckWithCurrentStackPointer_() protected

Heap* sead::Worker::getDisposerHeap_() const protected

Variable documentation

static const s32 sead::Worker::cDefaultPriority

MessageQueue sead::Worker::mMessageQueue protected

s32 sead::Worker::mStackSize protected

ThreadListNode sead::Worker::mListNode protected

Heap* sead::Worker::mCurrentHeap protected

MessageQueue::BlockType sead::Worker::mBlockType protected

MessageQueue::Element sead::Worker::mQuitMsg protected

u32 sead::Worker::mId protected

State sead::Worker::mState protected

CoreIdMask sead::Worker::mAffinity protected

void* sead::Worker::mStackTop protected

void* sead::Worker::mStackTopForCheck protected

s32 sead::Worker::mPriority protected