diff options
author | David Robillard <d@drobilla.net> | 2018-11-24 13:44:03 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-11-24 13:44:03 +0100 |
commit | a7d83f19b08eb4c6f79a82fe60c2b86db13f4420 (patch) | |
tree | d9b620bfba1e7462df4ddb3f6225cc5216c0ca81 /src/server/Engine.hpp | |
parent | d63edc742cebd685f8a05936682210aa5c1e69a9 (diff) | |
download | ingen-a7d83f19b08eb4c6f79a82fe60c2b86db13f4420.tar.gz ingen-a7d83f19b08eb4c6f79a82fe60c2b86db13f4420.tar.bz2 ingen-a7d83f19b08eb4c6f79a82fe60c2b86db13f4420.zip |
Squashed 'waflib/' changes from 6e726eb1..5ea8f99f
5ea8f99f Improve test output spacing
0e23b29f Raise exception when test suite fails to ensure non-zero exit status
d6de073b Show run time of unit tests
5b655541 Add short configure option for ultra-strict flags
4687ba6d Use gtest-like test output
258903d9 Fix failure count in test group summaries
da07e738 Fix verbose tests with Python 3
git-subtree-dir: waflib
git-subtree-split: 5ea8f99f6e1246079c1fe6bb590c38a53aadd40d
Diffstat (limited to 'src/server/Engine.hpp')
-rw-r--r-- | src/server/Engine.hpp | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/src/server/Engine.hpp b/src/server/Engine.hpp deleted file mode 100644 index f5ba1feb..00000000 --- a/src/server/Engine.hpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - This file is part of Ingen. - Copyright 2007-2017 David Robillard <http://drobilla.net/> - - Ingen is free software: you can redistribute it and/or modify it under the - terms of the GNU Affero General Public License as published by the Free - Software Foundation, either version 3 of the License, or any later version. - - Ingen is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for details. - - You should have received a copy of the GNU Affero General Public License - along with Ingen. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef INGEN_ENGINE_ENGINE_HPP -#define INGEN_ENGINE_ENGINE_HPP - -#include <chrono> -#include <condition_variable> -#include <mutex> -#include <random> - -#include "ingen/Clock.hpp" -#include "ingen/EngineBase.hpp" -#include "ingen/Properties.hpp" -#include "ingen/ingen.h" -#include "ingen/types.hpp" - -#include "Event.hpp" -#include "Load.hpp" - -namespace Raul { -class Maid; -class RingBuffer; -} - -namespace Ingen { - -class AtomReader; -class Interface; -class Log; -class Store; -class World; - -namespace Server { - -class BlockFactory; -class Broadcaster; -class BufferFactory; -class ControlBindings; -class Driver; -class EventWriter; -class GraphImpl; -class LV2Options; -class PostProcessor; -class PreProcessor; -class RunContext; -class SocketListener; -class Task; -class UndoStack; -class Worker; - -/** - The engine which executes the process graph. - - This is a simple class that provides pointers to the various components - that make up the engine implementation. In processes with a local engine, - it can be accessed via the Ingen::World. - - @ingroup engine -*/ -class INGEN_API Engine : public EngineBase -{ -public: - explicit Engine(Ingen::World* world); - virtual ~Engine(); - - Engine(const Engine&) = delete; - Engine& operator=(const Engine&) = delete; - - // EngineBase methods - virtual void init(double sample_rate, uint32_t block_length, size_t seq_size); - virtual bool supports_dynamic_ports() const; - virtual bool activate(); - virtual void deactivate(); - virtual bool pending_events() const; - virtual unsigned run(uint32_t sample_count); - virtual void quit(); - virtual bool main_iteration(); - virtual void register_client(SPtr<Interface> client); - virtual bool unregister_client(SPtr<Interface> client); - - void listen(); - - /** Return a random [0..1] float with uniform distribution */ - float frand() { return _uniform_dist(_rand_engine); } - - void set_driver(SPtr<Driver> driver); - - /** Return the frame time to execute an event that arrived now. - * - * This aims to return a time one cycle from "now", so that events ideally - * have 1 cycle of latency with no jitter. - */ - SampleCount event_time(); - - /** Return the time this cycle began processing in microseconds. - * - * This value is comparable to the value returned by current_time(). - */ - inline uint64_t cycle_start_time(const RunContext& context) const { - return _cycle_start_time; - } - - /** Return the current time in microseconds. */ - uint64_t current_time() const; - - /** Reset the load statistics (when the expected DSP load changes). */ - void reset_load(); - - /** Enqueue an event to be processed (non-realtime threads only). */ - void enqueue_event(Event* ev, Event::Mode mode=Event::Mode::NORMAL); - - /** Process events (process thread only). */ - unsigned process_events(); - - /** Process all events (no RT limits). */ - unsigned process_all_events(); - - Ingen::World* world() const { return _world; } - Log& log() const; - - const SPtr<Interface>& interface() const { return _interface; } - const SPtr<EventWriter>& event_writer() const { return _event_writer; } - const UPtr<AtomReader>& atom_interface() const { return _atom_interface; } - const UPtr<BlockFactory>& block_factory() const { return _block_factory; } - const UPtr<Broadcaster>& broadcaster() const { return _broadcaster; } - const UPtr<BufferFactory>& buffer_factory() const { return _buffer_factory; } - const UPtr<ControlBindings>& control_bindings() const { return _control_bindings; } - const SPtr<Driver>& driver() const { return _driver; } - const UPtr<PostProcessor>& post_processor() const { return _post_processor; } - const UPtr<Raul::Maid>& maid() const { return _maid; } - const UPtr<UndoStack>& undo_stack() const { return _undo_stack; } - const UPtr<UndoStack>& redo_stack() const { return _redo_stack; } - const UPtr<Worker>& worker() const { return _worker; } - const UPtr<Worker>& sync_worker() const { return _sync_worker; } - - GraphImpl* root_graph() const { return _root_graph; } - void set_root_graph(GraphImpl* graph); - - RunContext& run_context() { return *_run_contexts[0]; } - - void flush_events(const std::chrono::milliseconds& sleep_ms); - - void advance(SampleCount nframes); - void locate(FrameTime s, SampleCount nframes); - void emit_notifications(FrameTime end); - bool pending_notifications(); - bool wait_for_tasks(); - void signal_tasks_available(); - Task* steal_task(unsigned start_thread); - - SPtr<Store> store() const; - - SampleRate sample_rate() const; - SampleCount block_length() const; - size_t sequence_size() const; - size_t event_queue_size() const; - - size_t n_threads() const { return _run_contexts.size(); } - bool atomic_bundles() const { return _atomic_bundles; } - bool activated() const { return _activated; } - - Properties load_properties() const; - -private: - Ingen::World* _world; - - SPtr<LV2Options> _options; - UPtr<BufferFactory> _buffer_factory; - UPtr<Raul::Maid> _maid; - SPtr<Driver> _driver; - UPtr<Worker> _worker; - UPtr<Worker> _sync_worker; - UPtr<Broadcaster> _broadcaster; - UPtr<ControlBindings> _control_bindings; - UPtr<BlockFactory> _block_factory; - UPtr<UndoStack> _undo_stack; - UPtr<UndoStack> _redo_stack; - UPtr<PostProcessor> _post_processor; - UPtr<PreProcessor> _pre_processor; - UPtr<SocketListener> _listener; - SPtr<EventWriter> _event_writer; - SPtr<Interface> _interface; - UPtr<AtomReader> _atom_interface; - GraphImpl* _root_graph; - - std::vector<Raul::RingBuffer*> _notifications; - std::vector<RunContext*> _run_contexts; - uint64_t _cycle_start_time; - Load _run_load; - Clock _clock; - - std::mt19937 _rand_engine; - std::uniform_real_distribution<float> _uniform_dist; - - std::condition_variable _tasks_available; - std::mutex _tasks_mutex; - - bool _quit_flag; - bool _reset_load_flag; - bool _atomic_bundles; - bool _activated; -}; - -} // namespace Server -} // namespace Ingen - -#endif // INGEN_ENGINE_ENGINE_HPP |