23 enum class MaximumTimeBudget :
int {
28 enum class MinimumTimeBudget :
int {
33 struct CoroutinePolicy {
43 CoroutinePolicy& operator=(CoroutinePolicy
const&);
44 CoroutinePolicy(CoroutinePolicy
const&);
48 class ScopedChangeScheduler {
57 ScopedChangeScheduler& operator=(ScopedChangeScheduler
const&);
58 ScopedChangeScheduler(ScopedChangeScheduler
const&);
59 ScopedChangeScheduler();
65 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::Scheduler::CoroutinePolicy>> mCoroutinePolicy;
66 ::ll::TypedStorage<4, 4, uint> mTotalFrames;
67 ::ll::TypedStorage<4, 4, uint> mStarvedFrames;
68 ::ll::TypedStorage<4, 4, uint> mPromotionFrames;
69 ::ll::TypedStorage<4, 4, uint> mTargetFPS;
70 ::ll::TypedStorage<4, 4, uint> mEffectiveFPS;
71 ::ll::TypedStorage<4, 4, uint> mTotalRunCoroutines;
72 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mPredictedCoroutineDuration;
73 ::ll::TypedStorage<8, 8, ::std::chrono::nanoseconds> mTotalCoroutineDuration;
74 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::WorkerPool>> mCoroutinePool;
75 ::ll::TypedStorage<8, 8, ::std::chrono::steady_clock::time_point> mNextStarveCheckTime;
76 ::ll::TypedStorage<4, 4, ::std::thread::id> mThreadID;
87 virtual ~Scheduler() =
default;
89 virtual ~Scheduler() ;
97 MCAPI Scheduler(::std::string name, uint FPS);
99 MCAPI ::std::chrono::nanoseconds _calcBaseTimeBudget(
101 ::std::chrono::nanoseconds frameTimeSoFar,
102 ::Scheduler::MinimumTimeBudget ensureNonZeroRunTime,
103 ::Scheduler::MaximumTimeBudget limitMaxRunTime
106 MCAPI
bool _runCoroutines(::std::chrono::nanoseconds timeCap);
108 MCAPI
void processCoroutines(
109 ::std::chrono::nanoseconds timeSinceSwap,
110 ::Scheduler::MinimumTimeBudget ensureNonZeroRunTime,
111 ::Scheduler::MaximumTimeBudget limitMaxRunTime
116 MCAPI
void setTargetFPS(uint FPS);
118 MCAPI
void updateTargetFPS();
124 MCAPI
void* $ctor(::std::string name, uint FPS);