164 if (wm_job->owner == owner && wm_job->job_type == job_type) {
171 if (wm_job->owner == owner) {
178 if (wm_job->job_type == job_type) {
198 if (wm_job ==
nullptr) {
203 wm_job->
owner = owner;
227 if (wm_job->owner != owner) {
235 if ((wm_job->flag &
WM_JOB_PROGRESS) && (wm_job->running || wm_job->suspended)) {
256 float total_progress = 0.0f;
257 float jobs_progress = 0;
260 if (wm_job->threads.first && !wm_job->ready) {
264 total_progress += wm_job->worker_status.progress;
270 if (jobs_progress > 0) {
271 float progress = total_progress /
float(jobs_progress);
366 void (*initjob)(
void *),
368 void (*endjob)(
void *))
375 void (*initjob)(
void *),
377 void (*endjob)(
void *),
378 void (*completed)(
void *),
379 void (*canceled)(
void *))
399 wm_job->
ready =
true;
407 bool suspend =
false;
418 if (wm_job == test || !wm_job->
running) {
474 wm_job->
free =
nullptr;
483 wm_job->
ready =
false;
497 if (wm_job->
wt ==
nullptr) {
504 printf(
"job fails, not initialized\n");
520 void (*final_callback)(
void *) = (wm_job->
ready && !was_canceled) ? wm_job->
completed :
522 if (final_callback) {
571 if (update_progress) {
591 if (wm_job->
owner != owner) {
602 if (owner && wm_job->
owner != owner) {
615 if (wm_job->
owner == owner) {
626 if (owner && wm_job->
owner != owner) {
640 if (wm_job->
owner == owner) {
691 printf(
"job ready but stopped %s\n", wm_job->
name);
699 printf(
"Job '%s' finished in %f seconds\n",
723 wm_job->
wt =
nullptr;
void BKE_reports_free(ReportList *reports)
void BKE_report_print_level_set(ReportList *reports, eReportType level)
void BKE_reports_init(ReportList *reports, int flag)
#define BLI_assert_msg(a, msg)
void BLI_kdtree_nd_ free(KDTree *tree)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define STRNCPY(dst, src)
TicketMutex * BLI_ticket_mutex_alloc(void)
void BLI_ticket_mutex_unlock(TicketMutex *ticket)
void BLI_threadpool_init(struct ListBase *threadbase, void *(*do_thread)(void *), int tot)
void BLI_threadpool_end(struct ListBase *threadbase)
void BLI_ticket_mutex_lock(TicketMutex *ticket)
void BLI_ticket_mutex_free(TicketMutex *ticket)
int BLI_thread_is_main(void)
void BLI_threadpool_insert(struct ListBase *threadbase, void *callerdata)
Platform independent time functions.
double BLI_time_now_seconds(void)
Read Guarded memory(de)allocation.
void(*)(void *custom_data, wmJobWorkerStatus *worker_status) wm_jobs_start_callback
draw_view in_light_buf[] float
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void update(bNodeTree *ntree)
void SEQ_prefetch_stop_all()
wm_jobs_start_callback startjob
void(* completed)(void *)
TicketMutex * main_thread_mutex
wmJobWorkerStatus worker_status
void WM_event_add_notifier_ex(wmWindowManager *wm, const wmWindow *win, uint type, void *reference)
void WM_reports_from_reports_move(wmWindowManager *wm, ReportList *reports)
static void wm_jobs_reports_update(wmWindowManager *wm, wmJob *wm_job)
bool WM_jobs_has_running_type(const wmWindowManager *wm, int job_type)
static void wm_job_free(wmWindowManager *wm, wmJob *wm_job)
void WM_jobs_kill_all_from_owner(wmWindowManager *wm, const void *owner)
bool WM_jobs_is_running(const wmJob *wm_job)
static void wm_job_main_thread_yield(wmJob *wm_job)
void WM_jobs_stop_type(wmWindowManager *wm, const void *owner, eWM_JobType job_type)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_stop_all_from_owner(wmWindowManager *wm, const void *owner)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
const char * WM_jobs_name(const wmWindowManager *wm, const void *owner)
static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *wm_job)
void wm_jobs_timer_end(wmWindowManager *wm, wmTimer *wt)
void WM_jobs_kill_type(wmWindowManager *wm, const void *owner, int job_type)
bool WM_jobs_has_running(const wmWindowManager *wm)
bool WM_jobs_is_stopped(const wmWindowManager *wm, const void *owner)
static void wm_jobs_test_suspend_stop(wmWindowManager *wm, wmJob *test)
void * WM_jobs_customdata_get(wmJob *wm_job)
void WM_jobs_kill_all(wmWindowManager *wm)
void WM_jobs_delay_start(wmJob *wm_job, double delay_time)
float WM_jobs_progress(const wmWindowManager *wm, const void *owner)
static void wm_job_end(wmWindowManager *wm, wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
static void wm_jobs_update_progress_bars(wmWindowManager *wm)
double WM_jobs_starttime(const wmWindowManager *wm, const void *owner)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
void wm_jobs_timer(wmWindowManager *wm, wmTimer *wt)
void WM_jobs_callbacks_ex(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *), void(*completed)(void *), void(*canceled)(void *))
void WM_jobs_kill_all_except(wmWindowManager *wm, const void *owner)
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void WM_job_main_thread_lock_acquire(wmJob *wm_job)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
void WM_job_main_thread_lock_release(wmJob *wm_job)
static wmJob * wm_job_find(const wmWindowManager *wm, const void *owner, const eWM_JobType job_type)
static void * do_job_thread(void *job_v)
void * WM_jobs_customdata_from_type(wmWindowManager *wm, const void *owner, int job_type)
void WM_progress_clear(wmWindow *win)
void WM_progress_set(wmWindow *win, float progress)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)