17 # include <tbb/flow_graph.h>
25 std::vector<std::unique_ptr<TaskNode>>
nodes;
27 #ifdef WITH_CXX_GUARDEDALLOC
28 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
UNUSED(
input))
81 return tbb::flow::continue_msg();
89 successor->run_serial();
93 #ifdef WITH_CXX_GUARDEDALLOC
94 MEM_CXX_CLASS_ALLOC_FUNCS(
"task_graph:TaskNode")
111 task_graph->tbb_graph.wait_for_all();
123 task_graph->
nodes.push_back(std::unique_ptr<TaskNode>(task_node));
131 return task_node->tbb_node.try_put(tbb::flow::continue_msg());
143 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.
ccl_global KernelShaderEvalInput * input
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_edge_create(struct TaskNode *from_node, struct TaskNode *to_node)
bool BLI_task_graph_node_push_work(struct TaskNode *task_node)
void BLI_task_graph_work_and_wait(TaskGraph *task_graph)
struct TaskNode * BLI_task_graph_node_create(struct TaskGraph *task_graph, TaskGraphNodeRunFunction run, void *user_data, TaskGraphNodeFreeFunction free_func)
void BLI_task_graph_free(TaskGraph *task_graph)