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);
64 units::sample_u64_t remaining_latency_preroll,
65 bool realtime_context,
66 const dsp::TempoMap &tempo_map)
noexcept [[clang::nonblocking]];
80 return process_kickoff_thread_.has_value ()
81 ? current_thread_id.get () == process_kickoff_thread_.value ()
91 static thread_local bool have_result =
false;
94 if (have_result) [[likely]]
99 if (!scheduler_) [[unlikely]]
106 if (scheduler_->contains_thread (current_thread_id.get ()))
126 return scheduler_->get_nodes ().trigger_nodes_;
145 void preprocess_at_start_of_cycle (
147 [[clang::nonblocking]];
150 std::unique_ptr<graph::IGraphBuilder> graph_builder_;
152 std::optional<juce::AudioWorkgroup> workgroup_;
158 RunFunctionWithEngineLock run_function_with_engine_lock_;
163 std::vector<graph::IProcessable *> terminal_processables_;
165 std::unique_ptr<graph::GraphScheduler> scheduler_;
168 units::sample_u32_t max_route_playback_latency_;
178 units::sample_u32_t global_offset_;
181 std::optional<unsigned int> process_kickoff_thread_;
void start_cycle(const dsp::ITransport ¤t_transport_state, dsp::graph::ProcessBlockInfo time_nfo, units::sample_u64_t remaining_latency_preroll, bool realtime_context, const dsp::TempoMap &tempo_map) noexcept
Starts a new cycle.