186 if (wm_job->owner == owner && wm_job->job_type == job_type) {
193 if (wm_job->owner == owner) {
200 if (wm_job->job_type == job_type) {
220 if (wm_job ==
nullptr) {
225 wm_job->
owner = owner;
251 if (wm_job->owner != owner) {
259 if ((wm_job->flag &
WM_JOB_PROGRESS) && (wm_job->running || wm_job->suspended)) {
280 float total_progress = 0.0f;
281 float jobs_progress = 0;
284 if (wm_job->threads.first && !wm_job->ready) {
288 total_progress += wm_job->worker_status.progress;
294 if (jobs_progress > 0) {
295 float progress = total_progress / jobs_progress;
390 void (*initjob)(
void *),
392 void (*endjob)(
void *))
399 void (*initjob)(
void *),
401 void (*endjob)(
void *),
402 void (*completed)(
void *),
403 void (*canceled)(
void *))
423 wm_job->
ready =
true;
431 bool suspend =
false;
442 if (wm_job == test || !wm_job->
running) {
498 wm_job->
free =
nullptr;
507 wm_job->
ready =
false;
521 if (wm_job->
wt ==
nullptr) {
528 printf(
"job fails, not initialized\n");
544 void (*final_callback)(
void *) = (wm_job->
ready && !was_canceled) ? wm_job->
completed :
546 if (final_callback) {
597 if (update_progress) {
606 while ((wm_job =
static_cast<wmJob *
>(wm->
runtime->jobs.first))) {
617 if (wm_job->
owner != owner) {
628 if (owner && wm_job->
owner != owner) {
641 if (wm_job->
owner == owner) {
652 if (owner && wm_job->
owner != owner) {
666 if (wm_job->
owner == owner) {
717 printf(
"job ready but stopped %s\n", wm_job->
name);
725 printf(
"Job '%s' finished in %f seconds\n",
749 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)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(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)
char * STRNCPY(char(&dst)[N], const char *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)
Compatibility-like things for windows.
void BLI_windows_process_set_qos(QoSMode qos_mode, QoSPrecedence qos_precedence)
Read Guarded memory(de)allocation.
void(*)(void *custom_data, wmJobWorkerStatus *worker_status) wm_jobs_start_callback
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
static void update(bNodeTree *ntree)
wm_jobs_start_callback startjob
void(* completed)(void *)
TicketMutex * main_thread_mutex
wmJobWorkerStatus worker_status
WindowManagerRuntimeHandle * runtime
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)
static void wm_jobs_update_qos(const wmWindowManager *wm)
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)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const wmEventType event_type, const double time_step)
void WM_progress_clear(wmWindow *win)
void WM_progress_set(wmWindow *win, float progress)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)