summaryrefslogtreecommitdiffstats
path: root/src/server/events
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2023-09-22 11:13:12 -0400
committerDavid Robillard <d@drobilla.net>2023-09-22 11:27:06 -0400
commit97f5ecf41bccbc6339a18c649cd7bfcd84b18312 (patch)
treeae717b716d76d30846ad1d8eb46967866ab6a140 /src/server/events
parent3192ce81f9f87e4e56393dd539c95185c7ef306d (diff)
downloadingen-97f5ecf41bccbc6339a18c649cd7bfcd84b18312.tar.gz
ingen-97f5ecf41bccbc6339a18c649cd7bfcd84b18312.tar.bz2
ingen-97f5ecf41bccbc6339a18c649cd7bfcd84b18312.zip
Use a regular unique_ptr for compiled graphs
Since these are always swapped by events which already have the ability to delete things after execution (by deleting them along with the event itself after processing), we can avoid the complexity and overhead of Raul::managed_ptr here by swapping the old graph for the new, retaining the owning reference to the old CompiledGraph in the event.
Diffstat (limited to 'src/server/events')
-rw-r--r--src/server/events/Connect.cpp4
-rw-r--r--src/server/events/Connect.hpp2
-rw-r--r--src/server/events/Copy.cpp5
-rw-r--r--src/server/events/Copy.hpp3
-rw-r--r--src/server/events/CreateBlock.cpp6
-rw-r--r--src/server/events/CreateBlock.hpp3
-rw-r--r--src/server/events/CreateGraph.cpp6
-rw-r--r--src/server/events/CreateGraph.hpp3
-rw-r--r--src/server/events/Delete.cpp6
-rw-r--r--src/server/events/Delete.hpp2
-rw-r--r--src/server/events/Delta.cpp5
-rw-r--r--src/server/events/Delta.hpp3
-rw-r--r--src/server/events/Disconnect.cpp5
-rw-r--r--src/server/events/Disconnect.hpp2
-rw-r--r--src/server/events/DisconnectAll.cpp5
-rw-r--r--src/server/events/DisconnectAll.hpp3
-rw-r--r--src/server/events/Mark.cpp4
-rw-r--r--src/server/events/Mark.hpp9
18 files changed, 33 insertions, 43 deletions
diff --git a/src/server/events/Connect.cpp b/src/server/events/Connect.cpp
index 115d3e9c..e1854ef2 100644
--- a/src/server/events/Connect.cpp
+++ b/src/server/events/Connect.cpp
@@ -132,7 +132,7 @@ Connect::pre_process(PreProcessContext& ctx)
head_block->providers().insert(tail_block);
if (ctx.must_compile(*_graph)) {
- if (!(_compiled_graph = compile(*_engine.maid(), *_graph))) {
+ if (!(_compiled_graph = compile(*_graph))) {
head_block->providers().erase(tail_block);
tail_block->dependants().erase(head_block);
return Event::pre_process_done(Status::COMPILATION_FAILED);
@@ -165,7 +165,7 @@ Connect::execute(RunContext& ctx)
}
_head->connect_buffers();
if (_compiled_graph) {
- _graph->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph = _graph->swap_compiled_graph(std::move(_compiled_graph));
}
}
}
diff --git a/src/server/events/Connect.hpp b/src/server/events/Connect.hpp
index a735b68c..4224f109 100644
--- a/src/server/events/Connect.hpp
+++ b/src/server/events/Connect.hpp
@@ -66,7 +66,7 @@ private:
const ingen::Connect _msg;
GraphImpl* _graph{nullptr};
InputPort* _head{nullptr};
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
std::shared_ptr<ArcImpl> _arc;
raul::managed_ptr<PortImpl::Voices> _voices;
Properties _tail_remove;
diff --git a/src/server/events/Copy.cpp b/src/server/events/Copy.cpp
index 24e7b339..4219cef2 100644
--- a/src/server/events/Copy.cpp
+++ b/src/server/events/Copy.cpp
@@ -136,7 +136,7 @@ Copy::engine_to_engine(PreProcessContext& ctx)
_engine.store()->add(_block);
// Compile graph with new block added for insertion in audio thread
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *_parent);
+ _compiled_graph = ctx.maybe_compile(*_parent);
return Event::pre_process_done(Status::SUCCESS);
}
@@ -207,7 +207,8 @@ void
Copy::execute(RunContext&)
{
if (_block && _compiled_graph) {
- _parent->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph =
+ _parent->swap_compiled_graph(std::move(_compiled_graph));
}
}
diff --git a/src/server/events/Copy.hpp b/src/server/events/Copy.hpp
index 8460140a..744a61c2 100644
--- a/src/server/events/Copy.hpp
+++ b/src/server/events/Copy.hpp
@@ -21,7 +21,6 @@
#include "types.hpp"
#include "ingen/Message.hpp"
-#include "raul/Maid.hpp"
#include <memory>
@@ -67,7 +66,7 @@ private:
std::shared_ptr<BlockImpl> _old_block{nullptr};
GraphImpl* _parent{nullptr};
BlockImpl* _block{nullptr};
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
};
} // namespace events
diff --git a/src/server/events/CreateBlock.cpp b/src/server/events/CreateBlock.cpp
index aa4cb1c0..7f50411c 100644
--- a/src/server/events/CreateBlock.cpp
+++ b/src/server/events/CreateBlock.cpp
@@ -40,7 +40,6 @@
#include "ingen/URIs.hpp"
#include "ingen/World.hpp"
#include "ingen/paths.hpp"
-#include "raul/Maid.hpp"
#include "raul/Path.hpp"
#include "raul/Symbol.hpp"
@@ -169,7 +168,7 @@ CreateBlock::pre_process(PreProcessContext& ctx)
/* Compile graph with new block added for insertion in audio thread
TODO: Since the block is not connected at this point, a full compilation
could be avoided and the block simply appended. */
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *_graph);
+ _compiled_graph = ctx.maybe_compile(*_graph);
_update.put_block(_block);
@@ -180,7 +179,8 @@ void
CreateBlock::execute(RunContext&)
{
if (_status == Status::SUCCESS && _compiled_graph) {
- _graph->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph =
+ _graph->swap_compiled_graph(std::move(_compiled_graph));
}
}
diff --git a/src/server/events/CreateBlock.hpp b/src/server/events/CreateBlock.hpp
index 2a7a60ab..e8a49ea0 100644
--- a/src/server/events/CreateBlock.hpp
+++ b/src/server/events/CreateBlock.hpp
@@ -21,7 +21,6 @@
#include "Event.hpp"
#include "types.hpp"
-#include "raul/Maid.hpp"
#include "raul/Path.hpp"
#include <cstdint>
@@ -70,7 +69,7 @@ private:
ClientUpdate _update;
GraphImpl* _graph{nullptr};
BlockImpl* _block{nullptr};
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
};
} // namespace events
diff --git a/src/server/events/CreateGraph.cpp b/src/server/events/CreateGraph.cpp
index 8864c1df..7a8a973d 100644
--- a/src/server/events/CreateGraph.cpp
+++ b/src/server/events/CreateGraph.cpp
@@ -35,7 +35,6 @@
#include "ingen/URIs.hpp"
#include "ingen/World.hpp"
#include "ingen/paths.hpp"
-#include "raul/Maid.hpp"
#include "raul/Path.hpp"
#include "raul/Symbol.hpp"
@@ -192,7 +191,7 @@ CreateGraph::pre_process(PreProcessContext& ctx)
if (_parent->enabled()) {
_graph->enable();
}
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *_parent);
+ _compiled_graph = ctx.maybe_compile(*_parent);
}
_graph->activate(*_engine.buffer_factory());
@@ -219,7 +218,8 @@ CreateGraph::execute(RunContext& ctx)
if (_graph) {
if (_parent) {
if (_compiled_graph) {
- _parent->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph =
+ _parent->swap_compiled_graph(std::move(_compiled_graph));
}
} else {
_engine.set_root_graph(_graph);
diff --git a/src/server/events/CreateGraph.hpp b/src/server/events/CreateGraph.hpp
index 7fc005ad..b083ae8c 100644
--- a/src/server/events/CreateGraph.hpp
+++ b/src/server/events/CreateGraph.hpp
@@ -22,7 +22,6 @@
#include "types.hpp"
#include "ingen/Properties.hpp"
-#include "raul/Maid.hpp"
#include "raul/Path.hpp"
#include <cstdint>
@@ -74,7 +73,7 @@ private:
ClientUpdate _update;
GraphImpl* _graph{nullptr};
GraphImpl* _parent{nullptr};
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
std::list<std::unique_ptr<Event>> _child_events;
};
diff --git a/src/server/events/Delete.cpp b/src/server/events/Delete.cpp
index 192b0584..62653752 100644
--- a/src/server/events/Delete.cpp
+++ b/src/server/events/Delete.cpp
@@ -113,14 +113,14 @@ Delete::pre_process(PreProcessContext& ctx)
_disconnect_event =
std::make_unique<DisconnectAll>(_engine, parent, _block.get());
_disconnect_event->pre_process(ctx);
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *parent);
+ _compiled_graph = ctx.maybe_compile(*parent);
} else if (_port) {
parent->remove_port(*_port);
_disconnect_event =
std::make_unique<DisconnectAll>(_engine, parent, _port.get());
_disconnect_event->pre_process(ctx);
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *parent);
+ _compiled_graph = ctx.maybe_compile(*parent);
if (parent->enabled()) {
_ports_array = parent->build_ports_array(*_engine.maid());
assert(_ports_array->size() == parent->num_ports_non_rt());
@@ -182,7 +182,7 @@ Delete::execute(RunContext& ctx)
}
if (parent && _compiled_graph) {
- parent->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph = parent->swap_compiled_graph(std::move(_compiled_graph));
}
}
diff --git a/src/server/events/Delete.hpp b/src/server/events/Delete.hpp
index 840b8415..c17066a2 100644
--- a/src/server/events/Delete.hpp
+++ b/src/server/events/Delete.hpp
@@ -80,7 +80,7 @@ private:
std::shared_ptr<DuplexPort> _port; ///< Non-null iff a port
EnginePort* _engine_port{nullptr};
raul::managed_ptr<GraphImpl::Ports> _ports_array; ///< New (external) ports for Graph
- raul::managed_ptr<CompiledGraph> _compiled_graph; ///< Graph's new process order
+ std::unique_ptr<CompiledGraph> _compiled_graph; ///< Graph's new process order
std::unique_ptr<DisconnectAll> _disconnect_event;
Store::Objects _removed_objects;
IndexChanges _port_index_changes;
diff --git a/src/server/events/Delta.cpp b/src/server/events/Delta.cpp
index 1c972f1d..11a0b0ff 100644
--- a/src/server/events/Delta.cpp
+++ b/src/server/events/Delta.cpp
@@ -45,7 +45,6 @@
#include "ingen/World.hpp"
#include "ingen/paths.hpp"
#include "lilv/lilv.h"
-#include "raul/Maid.hpp"
#include "raul/Path.hpp"
#include <algorithm>
@@ -397,7 +396,7 @@ Delta::pre_process(PreProcessContext& ctx)
op = SpecialType::ENABLE;
// FIXME: defer until all other data has been processed
if (value.get<int32_t>() && !_graph->enabled()) {
- if (!(_compiled_graph = compile(*_engine.maid(), *_graph))) {
+ if (!(_compiled_graph = compile(*_graph))) {
_status = Status::COMPILATION_FAILED;
}
}
@@ -516,7 +515,7 @@ Delta::execute(RunContext& ctx)
if (_graph) {
if (value.get<int32_t>()) {
if (_compiled_graph) {
- _graph->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph = _graph->swap_compiled_graph(std::move(_compiled_graph));
}
_graph->enable();
} else {
diff --git a/src/server/events/Delta.hpp b/src/server/events/Delta.hpp
index 35357a26..ca28b05a 100644
--- a/src/server/events/Delta.hpp
+++ b/src/server/events/Delta.hpp
@@ -27,7 +27,6 @@
#include "ingen/Properties.hpp"
#include "ingen/Resource.hpp"
#include "ingen/URI.hpp"
-#include "raul/Maid.hpp"
#include <cstdint>
#include <memory>
@@ -117,7 +116,7 @@ private:
ClientUpdate _update;
ingen::Resource* _object{nullptr};
GraphImpl* _graph{nullptr};
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
ControlBindings::Binding* _binding{nullptr};
StatePtr _state;
Resource::Graph _context;
diff --git a/src/server/events/Disconnect.cpp b/src/server/events/Disconnect.cpp
index 4b4bbfe9..e0db262a 100644
--- a/src/server/events/Disconnect.cpp
+++ b/src/server/events/Disconnect.cpp
@@ -171,7 +171,7 @@ Disconnect::pre_process(PreProcessContext& ctx)
dynamic_cast<PortImpl*>(tail),
dynamic_cast<InputPort*>(head));
- _compiled_graph = ctx.maybe_compile(*_engine.maid(), *_graph);
+ _compiled_graph = ctx.maybe_compile(*_graph);
return Event::pre_process_done(Status::SUCCESS);
}
@@ -208,7 +208,8 @@ Disconnect::execute(RunContext& ctx)
if (_status == Status::SUCCESS) {
if (_impl->execute(ctx, true)) {
if (_compiled_graph) {
- _graph->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph =
+ _graph->swap_compiled_graph(std::move(_compiled_graph));
}
} else {
_status = Status::NOT_FOUND;
diff --git a/src/server/events/Disconnect.hpp b/src/server/events/Disconnect.hpp
index 71ad4204..ad3d07b0 100644
--- a/src/server/events/Disconnect.hpp
+++ b/src/server/events/Disconnect.hpp
@@ -83,7 +83,7 @@ private:
const ingen::Disconnect _msg;
GraphImpl* _graph{nullptr};
std::unique_ptr<Impl> _impl;
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
};
} // namespace events
diff --git a/src/server/events/DisconnectAll.cpp b/src/server/events/DisconnectAll.cpp
index 296d6ddd..5f0e9a5e 100644
--- a/src/server/events/DisconnectAll.cpp
+++ b/src/server/events/DisconnectAll.cpp
@@ -32,7 +32,6 @@
#include "ingen/Node.hpp"
#include "ingen/Status.hpp"
#include "ingen/Store.hpp"
-#include "raul/Maid.hpp"
#include <memory>
#include <mutex>
@@ -130,7 +129,7 @@ DisconnectAll::pre_process(PreProcessContext& ctx)
}
if (!_deleting && ctx.must_compile(*_parent)) {
- if (!(_compiled_graph = compile(*_engine.maid(), *_parent))) {
+ if (!(_compiled_graph = compile(*_parent))) {
return Event::pre_process_done(Status::COMPILATION_FAILED);
}
}
@@ -149,7 +148,7 @@ DisconnectAll::execute(RunContext& ctx)
}
if (_compiled_graph) {
- _parent->set_compiled_graph(std::move(_compiled_graph));
+ _compiled_graph = _parent->swap_compiled_graph(std::move(_compiled_graph));
}
}
diff --git a/src/server/events/DisconnectAll.hpp b/src/server/events/DisconnectAll.hpp
index 70da5dd6..aeb180de 100644
--- a/src/server/events/DisconnectAll.hpp
+++ b/src/server/events/DisconnectAll.hpp
@@ -22,7 +22,6 @@
#include "types.hpp"
#include "ingen/Message.hpp"
-#include "raul/Maid.hpp"
#include <list>
#include <memory>
@@ -79,7 +78,7 @@ private:
BlockImpl* _block;
PortImpl* _port;
Impls _impls;
- raul::managed_ptr<CompiledGraph> _compiled_graph;
+ std::unique_ptr<CompiledGraph> _compiled_graph;
bool _deleting;
};
diff --git a/src/server/events/Mark.cpp b/src/server/events/Mark.cpp
index 97acdbbb..87bc1035 100644
--- a/src/server/events/Mark.cpp
+++ b/src/server/events/Mark.cpp
@@ -84,7 +84,7 @@ Mark::pre_process(PreProcessContext& ctx)
ctx.set_in_bundle(false);
if (!ctx.dirty_graphs().empty()) {
for (GraphImpl* g : ctx.dirty_graphs()) {
- auto cg = compile(*_engine.maid(), *g);
+ auto cg = compile(*g);
if (cg) {
_compiled_graphs.emplace(g, std::move(cg));
}
@@ -101,7 +101,7 @@ void
Mark::execute(RunContext&)
{
for (auto& g : _compiled_graphs) {
- g.first->set_compiled_graph(std::move(g.second));
+ g.second = g.first->swap_compiled_graph(std::move(g.second));
}
}
diff --git a/src/server/events/Mark.hpp b/src/server/events/Mark.hpp
index ea130eda..db3d6ff6 100644
--- a/src/server/events/Mark.hpp
+++ b/src/server/events/Mark.hpp
@@ -20,10 +20,6 @@
#include "Event.hpp"
#include "types.hpp"
-// IWYU pragma: no_include "CompiledGraph.hpp"
-
-#include "raul/Maid.hpp"
-
#include <map>
#include <memory>
@@ -35,7 +31,7 @@ struct BundleEnd;
namespace server {
-class CompiledGraph; // IWYU pragma: keep
+class CompiledGraph;
class Engine;
class GraphImpl;
class PreProcessContext;
@@ -75,8 +71,7 @@ public:
private:
enum class Type { BUNDLE_BEGIN, BUNDLE_END };
- using CompiledGraphs =
- std::map<GraphImpl*, raul::managed_ptr<CompiledGraph>>;
+ using CompiledGraphs = std::map<GraphImpl*, std::unique_ptr<CompiledGraph>>;
CompiledGraphs _compiled_graphs;
Type _type;