4#include "platforms/time_platform.h"
18 struct TimeProviderState {
20 time_provider_t provider;
23 TimeProviderState& get_time_provider_state()
FL_NO_EXCEPT {
28 static TimeProviderState*
const state =
new TimeProviderState();
33 TimeProviderState&
state = get_time_provider_state();
34 fl::unique_lock<fl::mutex> lock(
state.mutex);
35 if (!
state.provider) {
43void inject_time_provider(
const time_provider_t& provider)
FL_NO_EXCEPT {
44 TimeProviderState&
state = get_time_provider_state();
45 fl::unique_lock<fl::mutex> lock(
state.mutex);
46 state.provider = provider;
50 TimeProviderState&
state = get_time_provider_state();
51 fl::unique_lock<fl::mutex> lock(
state.mutex);
52 state.provider = time_provider_t{};
56MockTimeProvider::MockTimeProvider(fl::u32 initial_time)
FL_NO_EXCEPT
57 : mCurrentTime(initial_time) {
60void MockTimeProvider::advance(fl::u32 milliseconds)
FL_NO_EXCEPT {
64void MockTimeProvider::set_time(fl::u32 milliseconds)
FL_NO_EXCEPT {
68fl::u32 MockTimeProvider::current_time() const
FL_NO_EXCEPT {
72fl::u32 MockTimeProvider::operator()() const
FL_NO_EXCEPT {
81#if FL_CHRONO_HAS_TEST_TIME_PROVIDER
82 fl::u32 injected_millis = 0;
83 if (get_injected_millis(&injected_millis)) {
84 return injected_millis;
89 return fl::platforms::millis();
93#if FL_CHRONO_HAS_TEST_TIME_PROVIDER
94 fl::u32 injected_millis = 0;
95 if (get_injected_millis(&injected_millis)) {
96 return injected_millis * 1000u;
100 return fl::platforms::micros();
117#if FL_CHRONO_HAS_TEST_TIME_PROVIDER
119 Micros64State&
state = get_micros64_state();
120 fl::unique_lock<fl::mutex> lock(
state.mutex);
121 state.accumulated = 0;
122 state.last_micros = 0;
123 state.initialized =
false;
128 Micros64State&
state = get_micros64_state();
129 fl::unique_lock<fl::mutex> lock(
state.mutex);
131 if (!
state.initialized) {
132 state.accumulated = current;
133 state.last_micros = current;
134 state.initialized =
true;
135 return state.accumulated;
137 state.accumulated +=
static_cast<fl::u32
>(current -
state.last_micros);
138 state.last_micros = current;
139 return state.accumulated;
166 Millis64State&
state = get_millis64_state();
167 fl::unique_lock<fl::mutex> lock(
state.mutex);
168 state.accumulated = 0;
169 state.last_millis = 0;
170 state.initialized =
false;
174 Millis64State&
state = get_millis64_state();
176 fl::unique_lock<fl::mutex> lock(
state.mutex);
178 if (!
state.initialized) {
180 state.accumulated = current_millis;
181 state.last_millis = current_millis;
182 state.initialized =
true;
183 return state.accumulated;
188 fl::u32 delta = current_millis -
state.last_millis;
191 state.accumulated += delta;
194 state.last_millis = current_millis;
196 return state.accumulated;
FastLED chrono implementation - duration types for time measurements.
Centralized logging categories for FastLED hardware interfaces and subsystems.
Platform-independent mutex interface.
Millis64State & get_millis64_state() FL_NO_EXCEPT
Micros64State & get_micros64_state() FL_NO_EXCEPT
duration< fl::i64, fl::milli > milliseconds
Milliseconds - duration with period of 1/1,000 seconds.
void millis64_reset() FL_NO_EXCEPT
u8 u8 fract8 blur_amount FL_NO_EXCEPT
constexpr int type_rank< T >::value
fl::u32 millis() FL_NO_EXCEPT
Universal millisecond timer - returns milliseconds since system startup.
fl::u32 micros() FL_NO_EXCEPT
Universal microsecond timer - returns microseconds since system startup.
fl::u64 millis64() FL_NO_EXCEPT
64-bit millisecond timer - returns milliseconds since system startup without wraparound
fl::u64 micros64() FL_NO_EXCEPT
64-bit monotonic microsecond timer.
fl::platforms::mutex mutex
Base definition for an LED controller.
static time_point now() FL_NO_EXCEPT
Returns the current time point.
fl::chrono::time_point< steady_clock > time_point
static time_point now() FL_NO_EXCEPT
Returns the current time point.
fl::chrono::time_point< system_clock > time_point