19# include <tbb/flow_graph.h>
25 tbb::flow::graph tbb_graph;
27 std::vector<std::unique_ptr<TaskNode>>
nodes;
29 MEM_CXX_CLASS_ALLOC_FUNCS(
"task_graph:TaskGraph")
36 tbb::flow::continue_node<tbb::flow::continue_msg> tbb_node;
54 tbb_node(task_graph->tbb_graph,
56 [&](const tbb::flow::continue_msg
input) { run(
input); }),
78 tbb::flow::continue_msg run(
const tbb::flow::continue_msg )
81 return tbb::flow::continue_msg();
89 successor->run_serial();
93 MEM_CXX_CLASS_ALLOC_FUNCS(
"task_graph:TaskNode")
109 task_graph->tbb_graph.wait_for_all();
121 task_graph->
nodes.push_back(std::unique_ptr<TaskNode>(task_node));
129 return task_node->tbb_node.try_put(tbb::flow::continue_msg());
141 tbb::flow::make_edge(from_node->tbb_node, to_node->tbb_node);
int BLI_task_scheduler_num_threads(void)
void(* TaskGraphNodeFreeFunction)(void *task_data)
void(* TaskGraphNodeRunFunction)(void *__restrict task_data)
Read Guarded memory(de)allocation.
static PyObject * free_func(PyObject *, PyObject *value)
std::vector< std::unique_ptr< TaskNode > > nodes
TaskNode(TaskGraph *task_graph, TaskGraphNodeRunFunction run_func, void *task_data, TaskGraphNodeFreeFunction free_func)
TaskNode(const TaskNode &other)=delete
std::vector< TaskNode * > successors
TaskGraphNodeFreeFunction free_func
TaskNode & operator=(const TaskNode &other)=delete
TaskGraphNodeRunFunction run_func
TaskGraph * BLI_task_graph_create()
void BLI_task_graph_work_and_wait(TaskGraph *task_graph)
bool BLI_task_graph_node_push_work(TaskNode *task_node)
void BLI_task_graph_free(TaskGraph *task_graph)
TaskNode * BLI_task_graph_node_create(TaskGraph *task_graph, TaskGraphNodeRunFunction run, void *user_data, TaskGraphNodeFreeFunction free_func)
void BLI_task_graph_edge_create(TaskNode *from_node, TaskNode *to_node)