5#if defined(__EMSCRIPTEN__)
8 extern "C" uint32_t millis();
9#elif defined(ESP32) || defined(ESP8266)
15#elif defined(FASTLED_ARM)
18#elif defined(FASTLED_STUB_IMPL)
21 extern "C" uint32_t millis();
22#elif defined(FASTLED_TESTING) || defined(__linux__) || defined(__APPLE__) || defined(_WIN32)
29 static const auto start_time = std::chrono::steady_clock::now();
53 time_provider_t& get_time_provider() {
54 static time_provider_t provider;
59void inject_time_provider(
const time_provider_t& provider) {
60 fl::lock_guard<fl::mutex> lock(get_time_mutex());
61 get_time_provider() = provider;
64void clear_time_provider() {
65 fl::lock_guard<fl::mutex> lock(get_time_mutex());
66 get_time_provider() = time_provider_t{};
70MockTimeProvider::MockTimeProvider(fl::u32 initial_time)
71 : mCurrentTime(initial_time) {
74void MockTimeProvider::advance(fl::u32 milliseconds) {
75 mCurrentTime += milliseconds;
78void MockTimeProvider::set_time(fl::u32 milliseconds) {
79 mCurrentTime = milliseconds;
82fl::u32 MockTimeProvider::current_time()
const {
86fl::u32 MockTimeProvider::operator()()
const {
99#if defined(__EMSCRIPTEN__)
101 return static_cast<fl::u32
>(millis());
103#elif defined(ESP32) || defined(ESP8266)
105 return static_cast<fl::u32
>(millis());
107#elif defined(__AVR__)
109 return static_cast<fl::u32
>(millis());
111#elif defined(FASTLED_ARM)
113 return static_cast<fl::u32
>(millis());
115#elif defined(FASTLED_STUB_IMPL)
117 return static_cast<fl::u32
>(millis());
119#elif defined(FASTLED_TESTING) || defined(__linux__) || defined(__APPLE__) || defined(_WIN32)
121 auto current_time = std::chrono::steady_clock::now();
122 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(current_time - start_time);
123 return static_cast<fl::u32
>(elapsed.count());
127 return static_cast<fl::u32
>(millis());
137#ifdef FASTLED_TESTING
141 const auto& provider = get_time_provider();
149 return get_platform_time();
#define FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS
#define FL_DISABLE_WARNING_PUSH
#define FL_DISABLE_WARNING_POP
Universal timing functions for FastLED.
fl::u32 get_platform_time()
Get platform-specific time in milliseconds This function contains all platform-specific timing code.
fl::u32 time()
Universal millisecond timer - returns milliseconds since system startup.