159 if (wm_job->owner ==
owner && wm_job->job_type ==
job_type) {
166 if (wm_job->owner ==
owner) {
193 if (wm_job ==
NULL) {
218 if (wm_job->owner ==
owner) {
220 if ((wm_job->flag &
WM_JOB_PROGRESS) && (wm_job->running || wm_job->suspended)) {
243 float total_progress = 0.0f;
244 float jobs_progress = 0;
247 if (wm_job->threads.first && !wm_job->ready) {
251 total_progress += wm_job->progress;
257 if (jobs_progress > 0) {
312 return wm_job ? wm_job->
stop :
true;
378 wmJob *wm_job = job_v;
381 wm_job->
ready =
true;
389 bool suspend =
false;
400 if (wm_job == test || !wm_job->
running) {
432 printf(
"job suspended: %s\n", test->
name);
464 wm_job->
stop =
false;
465 wm_job->
ready =
false;
486 printf(
"job fails, not initialized\n");
501 const bool was_canceled = wm_job->
stop ||
G.is_break;
502 void (*final_callback)(
void *) = (wm_job->
ready && !was_canceled) ? wm_job->
completed :
504 if (final_callback) {
546 if (update_progress) {
596 void (*
startjob)(
void *,
short int *,
short int *,
float *))
608 if (wm_job->
wt ==
wt) {
618 if (wm_job->
wt ==
wt) {
650 printf(
"job ready but stopped %s\n", wm_job->
name);
653 printf(
"job finished %s\n", wm_job->
name);
658 printf(
"Job '%s' finished in %f seconds\n",
typedef float(TangentPoint)[2]
#define BLI_assert_msg(a, msg)
void BLI_kdtree_nd_() free(KDTree *tree)
#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)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
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)
TicketMutex * BLI_ticket_mutex_alloc(void)
Read Guarded memory(de)allocation.
Platform independent time functions.
void(* wm_jobs_start_callback)(void *custom_data, short *stop, short *do_update, float *progress)
SyclQueue void void size_t num_bytes void
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void update(bNodeTree *ntree)
void SEQ_prefetch_stop_all(void)
wm_jobs_start_callback startjob
void(* completed)(void *)
TicketMutex * main_thread_mutex
double PIL_check_seconds_timer(void)
void WM_event_add_notifier_ex(wmWindowManager *wm, const wmWindow *win, uint type, void *reference)
static void wm_job_end(wmJob *wm_job)
bool WM_jobs_has_running_type(const struct wmWindowManager *wm, int job_type)
static void wm_job_free(wmWindowManager *wm, wmJob *wm_job)
bool WM_jobs_is_running(const wmJob *wm_job)
static void wm_job_main_thread_yield(wmJob *wm_job)
void WM_jobs_kill(wmWindowManager *wm, void *owner, void(*startjob)(void *, short int *, short int *, float *))
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *wm_job)
const char * WM_jobs_name(const wmWindowManager *wm, const void *owner)
void wm_jobs_timer_end(wmWindowManager *wm, wmTimer *wt)
void * WM_jobs_customdata_from_type(wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_kill_type(struct 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_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_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_customdata_get(wmJob *wm_job)
void WM_jobs_kill_all_except(wmWindowManager *wm, const void *owner)
static wmJob * wm_job_find(const wmWindowManager *wm, const void *owner, const int job_type)
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_stop(wmWindowManager *wm, const void *owner, void *startjob)
static void * do_job_thread(void *job_v)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *))
void WM_jobs_timer(wmJob *wm_job, double timestep, unsigned int note, unsigned int endnote)
void WM_job_main_thread_lock_release(wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, int flag, int job_type)
void WM_event_remove_timer(wmWindowManager *wm, wmWindow *UNUSED(win), wmTimer *timer)
void WM_progress_clear(wmWindow *win)
void WM_progress_set(wmWindow *win, float progress)
wmTimer * WM_event_add_timer(wmWindowManager *wm, wmWindow *win, int event_type, double timestep)