|
MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
|
Coroutine resumed by more than one clock. More...
#include <Routine.hpp>
Inheritance diagram for MayaFlux::Vruta::CrossRoutine:
Collaboration diagram for MayaFlux::Vruta::CrossRoutine:Public Types | |
| using | promise_type = MayaFlux::Vruta::cross_promise |
Public Member Functions | |
| CrossRoutine (const CrossRoutine &other) | |
| CrossRoutine (CrossRoutine &&other) noexcept | |
| CrossRoutine (std::coroutine_handle< promise_type > h) | |
| bool | force_resume () override |
| Force resume the coroutine, bypassing all checks Used only during shutdown to push coroutines to final_suspend. | |
| bool | get_auto_resume () const override |
| Get auto_resume flag from promise. | |
| DelayContext | get_delay_context () const override |
| Get the active delay context for this routine. | |
| uint64_t | get_next_frame () const override |
| Get next frame execution time (graphics domain) | |
| uint64_t | get_next_sample () const override |
| Get next sample execution time (audio domain) | |
| ProcessingToken | get_processing_token () const override |
| Get the processing token that determines how this routine should be scheduled. | |
| bool | get_should_terminate () const override |
| Get should_terminate flag from promise. | |
| bool | get_sync_to_clock () const override |
| Get sync_to_clock flag from promise. | |
| bool | initialize_state (uint64_t current_context=0U) override |
| Initializes the coroutine's state for execution. | |
| bool | is_active () const override |
| Checks if the coroutine is still active. | |
| uint64_t | next_execution () const override |
| Gets the sample position when this routine should next execute. | |
| CrossRoutine & | operator= (const CrossRoutine &other) |
| CrossRoutine & | operator= (CrossRoutine &&other) noexcept |
| bool | requires_clock_sync () const override |
| Check if the routine should synchronize with a clock. | |
| bool | restart () override |
| Restarts the coroutine from the beginning. | |
| void | set_auto_resume (bool auto_resume) override |
| Set auto_resume flag in promise. | |
| void | set_delay_context (DelayContext context) override |
| Set the active delay context for this routine. | |
| void | set_next_frame (uint64_t next_frame) override |
| Set next frame execution time (graphics domain) | |
| void | set_next_sample (uint64_t next_sample) override |
| Set next sample execution time (audio domain) | |
| void | set_should_terminate (bool should_terminate) override |
| Set should_terminate flag in promise. | |
| bool | try_resume (uint64_t current_context) override |
| Attempts to resume the coroutine if it's ready to execute. | |
| bool | try_resume_with_context (uint64_t current_value, DelayContext context) override |
| Attempts to resume the coroutine with explicit temporal context. | |
| ~CrossRoutine () override | |
Public Member Functions inherited from MayaFlux::Vruta::Routine | |
| template<typename T > | |
| T * | get_state (const std::string &key) |
| Gets a named state value from the coroutine. | |
| template<typename T > | |
| void | set_state (const std::string &key, T value) |
| Sets a named state value in the coroutine. | |
| template<typename... Args> | |
| void | update_params (Args... args) |
| Updates multiple named parameters in the coroutine's state. | |
| virtual | ~Routine ()=default |
| Destructor. | |
Protected Member Functions | |
| void * | get_state_impl_raw (const std::string &key) override |
| void | set_state_impl (const std::string &key, std::any value) override |
Protected Member Functions inherited from MayaFlux::Vruta::Routine | |
| template<typename T > | |
| T * | get_state_impl (const std::string &key) |
| Implementation helper for get_state. | |
| virtual void | update_params_impl () |
| brief Implementation helper for update_params | |
| template<typename T , typename... Args> | |
| void | update_params_impl (const std::string &key, T value, Args... args) |
| Implementation helper for update_params. | |
Private Attributes | |
| std::coroutine_handle< promise_type > | m_handle |
Coroutine resumed by more than one clock.
Sibling to SoundRoutine and GraphicsRoutine. Where those bind to a single clock on a single thread, CrossRoutine lives in the MULTI_RATE task list, which both the sample-clock pump (audio thread) and the frame-clock pump (graphics thread) scan. It suspends on MultiRateDelay, which arms both clocks; the first clock to reach its target resumes the coroutine. A zero count on one clock disarms that clock for the suspension.
Both pumps may reach the gate concurrently. The gate claims the resume with a compare-exchange on the promise's active_delay_context so exactly one thread resumes the handle; the other observes the changed context and backs off. The coroutine body re-establishes the context on its next co_await.
Definition at line 642 of file Routine.hpp.