diff options
Diffstat (limited to 'src/server/CompiledGraph.cpp')
-rw-r--r-- | src/server/CompiledGraph.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/server/CompiledGraph.cpp b/src/server/CompiledGraph.cpp index 32302174..fbc7ab26 100644 --- a/src/server/CompiledGraph.cpp +++ b/src/server/CompiledGraph.cpp @@ -17,6 +17,8 @@ #include <algorithm> #include <unordered_set> +#include <boost/variant/get.hpp> + #include "ingen/ColorContext.hpp" #include "ingen/Configuration.hpp" #include "ingen/Log.hpp" @@ -111,7 +113,7 @@ check_feedback(const BlockImpl* root, BlockImpl* node) } static void -compile_block(BlockImpl* n, Task& task, BlockSet& k) +compile_block(BlockImpl* n, ParTask& task, BlockSet& k) { switch (n->get_mark()) { case BlockImpl::Mark::UNVISITED: { @@ -119,7 +121,7 @@ compile_block(BlockImpl* n, Task& task, BlockSet& k) if (has_provider_with_fan_out(n)) { // Provider shared by other dependants, enqueue providers for later // Prepends n to current task: (... n ...) - task.emplace_front(n); + task.emplace_front(SingleTask{n}); for (auto p : n->providers()) { check_feedback(n, p); if (num_unvisited_dependants(p) == 0) { @@ -129,13 +131,15 @@ compile_block(BlockImpl* n, Task& task, BlockSet& k) } else { // All providers have only this dependant // Runs node after parallel providers: (... (seq (par p...) n) ...) - task.emplace_front(Task::Mode::SEQUENTIAL); - task.front().emplace_front(n); + SeqTask seq; + seq.emplace_front(SingleTask{n}); - task.front().emplace_front(Task::Mode::PARALLEL); + ParTask par; for (auto p : n->providers()) { - compile_block(p, task.front().front(), k); + compile_block(p, par, k); } + seq.emplace_front(std::move(par)); + task.emplace_front(std::move(seq)); } break; } @@ -149,7 +153,7 @@ compile_block(BlockImpl* n, Task& task, BlockSet& k) } CompiledGraph::CompiledGraph(GraphImpl& graph) - : _master(std::unique_ptr<Task>(new Task(Task::Mode::SEQUENTIAL))) + : _master(std::unique_ptr<Task>(new Task(SeqTask()))) { ThreadManager::assert_thread(THREAD_PRE_PROCESS); @@ -169,16 +173,17 @@ CompiledGraph::CompiledGraph(GraphImpl& graph) while (!blocks.empty()) { BlockSet predecessors; - _master->emplace_front(Task::Mode::PARALLEL); + ParTask par; for (auto b : blocks) { assert(num_unvisited_dependants(b) == 0); - compile_block(b, _master->front(), predecessors); + compile_block(b, par, predecessors); } + boost::get<SeqTask>(_master.get())->emplace_front(std::move(par)); blocks = std::move(predecessors); } - _master = Task::simplify(std::move(_master)); + _master = simplify(std::move(_master)); } MPtr<CompiledGraph> compile(Raul::Maid& maid, GraphImpl& graph) @@ -190,7 +195,7 @@ MPtr<CompiledGraph> compile(Raul::Maid& maid, GraphImpl& graph) Log& log = graph.engine().log(); auto sink = [&log](const std::string& s) { log.trace(s); }; sink(graph.path() + " =>\n "); - result->master().dump(sink, 2, true); + //result->master().dump(sink, 2, true); sink("\n"); } |