27class DspGraphDispatcher final
30 using RunFunctionWithEngineLock = std::function<void (std::function<
void ()>)>;
33 std::unique_ptr<graph::IGraphBuilder> graph_builder,
34 std::vector<graph::IProcessable *> terminal_processables,
36 RunFunctionWithEngineLock run_function_with_engine_lock,
38 std::optional<juce::AudioWorkgroup> workgroup = std::nullopt);
59 bool realtime_context,
60 const dsp::TempoMap &tempo_map)
noexcept [[clang::nonblocking]];
74 return process_kickoff_thread_.has_value ()
75 ? current_thread_id.get () == process_kickoff_thread_.value ()
85 static thread_local bool have_result =
false;
88 if (have_result) [[likely]]
93 if (!scheduler_) [[unlikely]]
100 if (scheduler_->contains_thread (current_thread_id.get ()))
120 return scheduler_->get_nodes ().trigger_nodes_;
141 [[clang::nonblocking]];
144 std::unique_ptr<graph::IGraphBuilder> graph_builder_;
146 std::optional<juce::AudioWorkgroup> workgroup_;
152 RunFunctionWithEngineLock run_function_with_engine_lock_;
157 std::vector<graph::IProcessable *> terminal_processables_;
159 std::unique_ptr<graph::GraphScheduler> scheduler_;
162 nframes_t max_route_playback_latency_ = 0;
175 std::optional<unsigned int> process_kickoff_thread_;
void start_cycle(const dsp::ITransport ¤t_transport_state, EngineProcessTimeInfo time_nfo, nframes_t remaining_latency_preroll, bool realtime_context, const dsp::TempoMap &tempo_map) noexcept
Starts a new cycle.