78 explicit operator bool()
const {
79 return m_pProcess !=
nullptr;
101 bool initialise(
Process* pKernelProcess);
108 void removeThread(
Thread* pThread);
111 bool threadInSchedule(
Thread* pThread);
114 void addProcess(
Process* pProcess);
117 void removeProcess(
Process* pProcess);
123 static size_t affinityBytes();
129 uint64_t loads[3] = {};
130 uint64_t userNanoseconds = 0;
131 uint64_t kernelNanoseconds = 0;
132 uint64_t idleNanoseconds = 0;
136 void recordCpuTime(
const Thread& thread, CpuTimeMode mode, Time::Timestamp elapsed);
138 void sampleLoadAverage();
140 void requestLoadAverageSample();
143 size_t getNumProcesses();
179 void waitUntilProcessRemoved(
Process* expected);
189 void threadStatusChanged(
Thread* pThread);
191#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
192 using GenericThreadStatusHook = void (*)(
Thread* thread);
195 static EXPORTED_PUBLIC
void setGenericThreadStatusHook(GenericThreadStatusHook hook);
196 bool runHostedLoadAverageRequestRegression();
199 Process* getKernelProcess()
const {
200 return m_pKernelProcess;
204 return m_pBspScheduler;
213 bool hasActiveSyscallLocked(Service_t service)
const;
219 size_t reserveProcessId();
222 void releaseProcessLease(
Process* process);
228 void drainDeferredTimeAccounting();
230 class ActivitySample;
231 static void releaseActivityEntry(
Process* process,
Thread* thread);
232 Mutex m_ActivityLock;
233 uint64_t m_NextActivityAttempt = 0;
234 bool m_ActivitySamplePending =
false;