13#include "platforms/coroutine_runtime.h"
57 if (r && r->has_active_tasks()) {
68 total += r->active_task_count();
80 FL_WARN_ONCE(
"task::run re-entrancy detected, skipping nested call");
94 auto elapsed = [begin_time]() {
99 auto remaining = [elapsed, microseconds]() -> fl::u32 {
100 fl::u32 e = elapsed();
101 if (e >= microseconds) {
104 return microseconds - e;
108 auto expired = [remaining]() {
109 return remaining() == 0;
150 if (microseconds > 0) {
151 const fl::u32 time_left = remaining();
153 fl::platforms::ICoroutineRuntime::instance().pumpCoroutines(
163 auto time_left = remaining();
165 fl::u32 sleep_us =
fl::min(1000u, time_left);
166 fl::platforms::ICoroutineRuntime::instance().pumpCoroutines(sleep_us);
169 }
while (!expired());
176 if (microseconds > 0) {
178 if (e < microseconds) {
179 fl::platforms::ICoroutineRuntime::instance().pumpCoroutines(
180 fl::min(1000u, microseconds - e));
185 }
while (
fl::micros() - begin_time < microseconds);
FastLED chrono implementation - duration types for time measurements.
static T & instance() FL_NO_EXCEPT
static T & instance() FL_NO_EXCEPT
size_t total_active_tasks() const FL_NO_EXCEPT
Get total number of active tasks across all runners.
fl::vector< Runner * > mRunners
void register_runner(Runner *r) FL_NO_EXCEPT
Register a runner.
bool has_active_tasks() const FL_NO_EXCEPT
Check if there are any active tasks.
void unregister_runner(Runner *r) FL_NO_EXCEPT
Unregister a runner.
static Executor & instance() FL_NO_EXCEPT
void update_all() FL_NO_EXCEPT
Update all registered runners.
Task executor (singleton) — manages registered runners.
Generic task runner interface.
static Scheduler & instance() FL_NO_EXCEPT
void update() FL_NO_EXCEPT
Task executor — runs registered task runners and manages the run loop.
#define FL_WARN_ONCE(...)
Centralized logging categories for FastLED hardware interfaces and subsystems.
Iterator find(Iterator first, Iterator last, const T &value) FL_NO_EXCEPT
int & await_depth_tls() FL_NO_EXCEPT
Get reference to thread-local await recursion depth.
void yield_system(fl::u32 microseconds) FL_NO_EXCEPT
OS-level yield only: same behavior as run(us, ExecFlags::SYSTEM).
size_t active_tasks() FL_NO_EXCEPT
Get the number of active tasks across all systems.
void run(fl::u32 microseconds, ExecFlags flags) FL_NO_EXCEPT
Run selected task subsystems.
bool has_tasks() FL_NO_EXCEPT
Check if any systems have active tasks.
ExecFlags
Flags controlling which subsystems run() pumps.
u8 u8 fract8 blur_amount FL_NO_EXCEPT
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NO_EXCEPT
fl::u32 micros() FL_NO_EXCEPT
Universal microsecond timer - returns microseconds since system startup.
scope_exit< decay_t< EF > > make_scope_exit(EF &&f)
Factory for C++11/14 (no CTAD).
void yield() FL_NO_EXCEPT
Yield to the platform scheduler.
Base definition for an LED controller.
RAII scope guard — executes a callable on scope exit.
Platform-aware cooperative yield for FastLED.