37 # include <tbb/blocked_range.h>
38 # include <tbb/task_arena.h>
39 # include <tbb/task_group.h>
88 other.taskdata =
nullptr;
89 other.free_taskdata =
false;
90 other.freedata =
nullptr;
93 #if defined(WITH_TBB) && TBB_INTERFACE_VERSION_MAJOR < 10
104 ((
Task &)other).free_taskdata =
false;
130 class TBBTaskGroup :
public tbb::task_group {
134 # if TBB_INTERFACE_VERSION_MAJOR >= 12
142 my_context.set_priority(tbb::priority_low);
145 my_context.set_priority(tbb::priority_normal);
212 new (task_mem)
Task(std::move(
task));
218 std::atomic_thread_fence(std::memory_order_release);
274 return tbb::is_current_task_group_canceling();
320 new (task_mem)
Task(std::move(
task));
481 Task task(
pool, run, taskdata, free_taskdata, freedata);
537 BLI_assert(
"BLI_task_pool_canceled: Control flow should not come here!");
void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) ATTR_NONNULL()
void * BLI_mempool_iterstep(BLI_mempool_iter *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int totelem, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_mempool_alloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
void BLI_mempool_clear(BLI_mempool *pool) ATTR_NONNULL(1)
int BLI_task_scheduler_num_threads(void)
void(* TaskFreeFunction)(TaskPool *__restrict pool, void *taskdata)
void BLI_thread_queue_push(ThreadQueue *queue, void *work)
void BLI_mutex_end(ThreadMutex *mutex)
void BLI_threadpool_remove(struct ListBase *threadbase, void *callerdata)
void BLI_threadpool_init(struct ListBase *threadbase, void *(*do_thread)(void *), int tot)
void BLI_mutex_init(ThreadMutex *mutex)
void BLI_thread_queue_free(ThreadQueue *queue)
void BLI_threadpool_end(struct ListBase *threadbase)
void BLI_thread_queue_nowait(ThreadQueue *queue)
void BLI_thread_queue_wait_finish(ThreadQueue *queue)
void BLI_threadpool_clear(struct ListBase *threadbase)
int BLI_available_threads(struct ListBase *threadbase)
void * BLI_thread_queue_pop(ThreadQueue *queue)
void BLI_threadpool_insert(struct ListBase *threadbase, void *callerdata)
ThreadQueue * BLI_thread_queue_init(void)
pthread_mutex_t ThreadMutex
These structs are the foundation for all linked lists in the library system.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
Task & operator=(const Task &other)=delete
Task & operator=(Task &&other)=delete
Task(const Task &other)=delete
TaskFreeFunction freedata
Task(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
struct blender::compositor::@172::@174 task
ThreadQueue * background_queue
volatile bool is_suspended
tbb::task_group tbb_group
ListBase background_threads
volatile bool background_is_canceling
BLI_mempool * suspended_mempool
static void tbb_task_pool_create(TaskPool *pool, TaskPriority priority)
TaskPool * BLI_task_pool_create_background(void *userdata, TaskPriority priority)
static void tbb_task_pool_run(TaskPool *pool, Task &&task)
static bool background_task_pool_canceled(TaskPool *pool)
static bool tbb_task_pool_canceled(TaskPool *pool)
static void tbb_task_pool_cancel(TaskPool *pool)
static void * background_task_run(void *userdata)
static void background_task_pool_run(TaskPool *pool, Task &&task)
static void background_task_pool_work_and_wait(TaskPool *pool)
void * BLI_task_pool_user_data(TaskPool *pool)
bool BLI_task_pool_current_canceled(TaskPool *pool)
void BLI_task_pool_work_and_wait(TaskPool *pool)
void BLI_task_pool_cancel(TaskPool *pool)
TaskPool * BLI_task_pool_create_background_serial(void *userdata, TaskPriority priority)
static void background_task_pool_free(TaskPool *pool)
static void tbb_task_pool_work_and_wait(TaskPool *pool)
ThreadMutex * BLI_task_pool_user_mutex(TaskPool *pool)
TaskPool * BLI_task_pool_create(void *userdata, TaskPriority priority)
static void background_task_pool_create(TaskPool *pool)
static void tbb_task_pool_free(TaskPool *pool)
TaskPool * BLI_task_pool_create_no_threads(void *userdata)
TaskPool * BLI_task_pool_create_suspended(void *userdata, TaskPriority priority)
static void background_task_pool_cancel(TaskPool *pool)
void BLI_task_pool_free(TaskPool *pool)
@ TASK_POOL_TBB_SUSPENDED
@ TASK_POOL_BACKGROUND_SERIAL
static TaskPool * task_pool_create_ex(void *userdata, TaskPoolType type, TaskPriority priority)
void BLI_task_pool_push(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
function< void(void)> TaskRunFunction