MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Vruta::CrossRoutine Class Reference

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.
 
CrossRoutineoperator= (const CrossRoutine &other)
 
CrossRoutineoperator= (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_typem_handle
 

Detailed Description

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.


The documentation for this class was generated from the following files: