26class DspGraphDispatcher final
29 using RunFunctionWithEngineLock = std::function<void (std::function<
void ()>)>;
32 std::unique_ptr<graph::IGraphBuilder> graph_builder,
33 std::vector<graph::IProcessable *> terminal_processables,
35 RunFunctionWithEngineLock run_function_with_engine_lock,
37 std::optional<juce::AudioWorkgroup> workgroup = std::nullopt);
57 units::sample_u64_t remaining_latency_preroll,
58 bool realtime_context,
59 const dsp::TempoMap &tempo_map)
noexcept [[clang::nonblocking]];
73 return process_kickoff_thread_.has_value ()
74 ? current_thread_id.get () == process_kickoff_thread_.value ()
84 static thread_local bool have_result =
false;
87 if (have_result) [[likely]]
92 if (!scheduler_) [[unlikely]]
99 if (scheduler_->contains_thread (current_thread_id.get ()))
119 return scheduler_->get_nodes ().trigger_nodes_;
138 void preprocess_at_start_of_cycle (
140 [[clang::nonblocking]];
143 std::unique_ptr<graph::IGraphBuilder> graph_builder_;
145 std::optional<juce::AudioWorkgroup> workgroup_;
151 RunFunctionWithEngineLock run_function_with_engine_lock_;
156 std::vector<graph::IProcessable *> terminal_processables_;
158 std::unique_ptr<graph::GraphScheduler> scheduler_;
161 units::sample_u32_t max_route_playback_latency_;
171 units::sample_u32_t global_offset_;
174 std::optional<unsigned int> process_kickoff_thread_;
void start_cycle(const dsp::ITransport ¤t_transport_state, dsp::graph::EngineProcessTimeInfo time_nfo, units::sample_u64_t remaining_latency_preroll, bool realtime_context, const dsp::TempoMap &tempo_map) noexcept
Starts a new cycle.