Blender  V3.3
Classes | Functions
wm_jobs.c File Reference
#include <string.h>
#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "SEQ_prefetch.h"
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
#include "wm_event_types.h"
#include "PIL_time.h"

Go to the source code of this file.

Classes

struct  wmJob
 

Functions

void WM_job_main_thread_lock_acquire (wmJob *wm_job)
 
void WM_job_main_thread_lock_release (wmJob *wm_job)
 
static void wm_job_main_thread_yield (wmJob *wm_job)
 
static wmJobwm_job_find (const wmWindowManager *wm, const void *owner, const int job_type)
 
wmJobWM_jobs_get (wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, int flag, int job_type)
 
bool WM_jobs_test (const wmWindowManager *wm, const void *owner, int job_type)
 
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)
 
const char * WM_jobs_name (const wmWindowManager *wm, const void *owner)
 
voidWM_jobs_customdata_from_type (wmWindowManager *wm, const void *owner, int job_type)
 
bool WM_jobs_is_running (const wmJob *wm_job)
 
bool WM_jobs_is_stopped (const wmWindowManager *wm, const void *owner)
 
voidWM_jobs_customdata_get (wmJob *wm_job)
 
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_jobs_delay_start (wmJob *wm_job, double delay_time)
 
void WM_jobs_callbacks (wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
 
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 *))
 
static voiddo_job_thread (void *job_v)
 
static void wm_jobs_test_suspend_stop (wmWindowManager *wm, wmJob *test)
 
void WM_jobs_start (wmWindowManager *wm, wmJob *wm_job)
 
static void wm_job_end (wmJob *wm_job)
 
static void wm_job_free (wmWindowManager *wm, wmJob *wm_job)
 
static void wm_jobs_kill_job (wmWindowManager *wm, wmJob *wm_job)
 
void WM_jobs_kill_all (wmWindowManager *wm)
 
void WM_jobs_kill_all_except (wmWindowManager *wm, const void *owner)
 
void WM_jobs_kill_type (struct wmWindowManager *wm, const void *owner, int job_type)
 
void WM_jobs_stop (wmWindowManager *wm, const void *owner, void *startjob)
 
void WM_jobs_kill (wmWindowManager *wm, void *owner, void(*startjob)(void *, short int *, short int *, float *))
 
void wm_jobs_timer_end (wmWindowManager *wm, wmTimer *wt)
 
void wm_jobs_timer (wmWindowManager *wm, wmTimer *wt)
 
bool WM_jobs_has_running (const wmWindowManager *wm)
 
bool WM_jobs_has_running_type (const struct wmWindowManager *wm, int job_type)
 

Detailed Description

Threaded job manager (high level job access).

Definition in file wm_jobs.c.

Function Documentation

◆ do_job_thread()

static void* do_job_thread ( void job_v)
static

◆ wm_job_end()

static void wm_job_end ( wmJob wm_job)
static

◆ wm_job_find()

static wmJob* wm_job_find ( const wmWindowManager wm,
const void owner,
const int  job_type 
)
static

Finds if type or owner, compare for it, otherwise any matching job.

Definition at line 155 of file wm_jobs.c.

References wmJob::job_type, wmWindowManager::jobs, LISTBASE_FOREACH, NULL, and wmJob::owner.

Referenced by WM_jobs_customdata_from_type(), WM_jobs_get(), WM_jobs_is_stopped(), WM_jobs_name(), WM_jobs_progress(), and WM_jobs_starttime().

◆ wm_job_free()

static void wm_job_free ( wmWindowManager wm,
wmJob wm_job 
)
static

◆ WM_job_main_thread_lock_acquire()

void WM_job_main_thread_lock_acquire ( wmJob wm_job)

Definition at line 134 of file wm_jobs.c.

References BLI_ticket_mutex_lock(), and wmJob::main_thread_mutex.

Referenced by WM_jobs_get(), wm_jobs_kill_job(), and wm_jobs_timer().

◆ WM_job_main_thread_lock_release()

void WM_job_main_thread_lock_release ( wmJob wm_job)

Definition at line 139 of file wm_jobs.c.

References BLI_ticket_mutex_unlock(), and wmJob::main_thread_mutex.

Referenced by wm_job_free(), wm_jobs_kill_job(), and wm_jobs_timer().

◆ wm_job_main_thread_yield()

static void wm_job_main_thread_yield ( wmJob wm_job)
static

Definition at line 144 of file wm_jobs.c.

References BLI_ticket_mutex_lock(), BLI_ticket_mutex_unlock(), and wmJob::main_thread_mutex.

Referenced by wm_jobs_timer().

◆ WM_jobs_callbacks()

void WM_jobs_callbacks ( wmJob wm_job,
wm_jobs_start_callback  startjob,
void(*)(void *)  initjob,
void(*)(void *)  update,
void(*)(void *)  endjob 
)

◆ WM_jobs_callbacks_ex()

void WM_jobs_callbacks_ex ( wmJob wm_job,
wm_jobs_start_callback  startjob,
void(*)(void *)  initjob,
void(*)(void *)  update,
void(*)(void *)  endjob,
void(*)(void *)  completed,
void(*)(void *)  canceled 
)

◆ WM_jobs_customdata_from_type()

void* WM_jobs_customdata_from_type ( wmWindowManager wm,
const void owner,
int  job_type 
)

◆ WM_jobs_customdata_get()

void* WM_jobs_customdata_get ( wmJob wm_job)

◆ WM_jobs_customdata_set()

void WM_jobs_customdata_set ( wmJob wm_job,
void customdata,
void(*)(void *)  free 
)

◆ WM_jobs_delay_start()

void WM_jobs_delay_start ( wmJob wm_job,
double  delay_time 
)

◆ WM_jobs_get()

wmJob* WM_jobs_get ( struct wmWindowManager wm,
struct wmWindow win,
const void owner,
const char *  name,
int  flag,
int  job_type 
)

◆ WM_jobs_has_running()

bool WM_jobs_has_running ( const wmWindowManager wm)

Definition at line 699 of file wm_jobs.c.

References wmWindowManager::jobs, LISTBASE_FOREACH, and wmJob::running.

◆ WM_jobs_has_running_type()

bool WM_jobs_has_running_type ( const struct wmWindowManager wm,
int  job_type 
)

Definition at line 710 of file wm_jobs.c.

References wmJob::job_type, wmWindowManager::jobs, LISTBASE_FOREACH, and wmJob::running.

Referenced by bpy_app_is_job_running().

◆ WM_jobs_is_running()

bool WM_jobs_is_running ( const wmJob wm_job)

◆ WM_jobs_is_stopped()

bool WM_jobs_is_stopped ( const wmWindowManager wm,
const void owner 
)

Definition at line 309 of file wm_jobs.c.

References wmJob::owner, wmJob::stop, wm_job_find(), and WM_JOB_TYPE_ANY.

Referenced by uiTemplateRunningJobs().

◆ WM_jobs_kill()

void WM_jobs_kill ( struct wmWindowManager wm,
void owner,
void(*)(void *, short int *, short int *, float *)  startjob 
)

Actually terminate thread and job timer.

Definition at line 594 of file wm_jobs.c.

References wmWindowManager::jobs, LISTBASE_FOREACH_MUTABLE, wmJob::owner, wmJob::startjob, and wm_jobs_kill_job().

Referenced by ED_preview_kill_jobs().

◆ WM_jobs_kill_all()

void WM_jobs_kill_all ( struct wmWindowManager wm)

Wait until every job ended.

Definition at line 551 of file wm_jobs.c.

References ListBase::first, wmWindowManager::jobs, SEQ_prefetch_stop_all(), and wm_jobs_kill_job().

Referenced by ed_undo_step_pre(), WM_exit_ex(), and wm_window_match_init().

◆ WM_jobs_kill_all_except()

void WM_jobs_kill_all_except ( struct wmWindowManager wm,
const void owner 
)

Wait until every job ended, except for one owner (used in undo to keep screen job alive).

Definition at line 563 of file wm_jobs.c.

References wmWindowManager::jobs, LISTBASE_FOREACH_MUTABLE, wmJob::owner, and wm_jobs_kill_job().

Referenced by screen_opengl_render_init(), and screen_render_invoke().

◆ wm_jobs_kill_job()

static void wm_jobs_kill_job ( wmWindowManager wm,
wmJob wm_job 
)
static

◆ WM_jobs_kill_type()

void WM_jobs_kill_type ( struct wmWindowManager wm,
const void owner,
int  job_type 
)

◆ WM_jobs_name()

const char* WM_jobs_name ( const wmWindowManager wm,
const void owner 
)

Definition at line 282 of file wm_jobs.c.

References wmJob::name, NULL, wmJob::owner, wm_job_find(), and WM_JOB_TYPE_ANY.

Referenced by uiTemplateRunningJobs().

◆ WM_jobs_progress()

float WM_jobs_progress ( const wmWindowManager wm,
const void owner 
)

◆ WM_jobs_start()

void WM_jobs_start ( struct wmWindowManager wm,
struct wmJob wm_job 
)

◆ WM_jobs_starttime()

double WM_jobs_starttime ( const wmWindowManager wm,
const void owner 
)

◆ WM_jobs_stop()

void WM_jobs_stop ( struct wmWindowManager wm,
const void owner,
void startjob 
)

Signal job(s) from this owner or callback to stop, timer is required to get handled.

Definition at line 583 of file wm_jobs.c.

References wmWindowManager::jobs, LISTBASE_FOREACH, wmJob::owner, wmJob::running, wmJob::startjob, and wmJob::stop.

Referenced by do_running_jobs(), and sequencer_thumbnail_start_job_if_necessary().

◆ WM_jobs_test()

bool WM_jobs_test ( const wmWindowManager wm,
const void owner,
int  job_type 
)

◆ wm_jobs_test_suspend_stop()

static void wm_jobs_test_suspend_stop ( wmWindowManager wm,
wmJob test 
)
static

◆ WM_jobs_timer()

void WM_jobs_timer ( wmJob wm_job,
double  timestep,
unsigned int  note,
unsigned int  endnote 
)

◆ wm_jobs_timer()

void wm_jobs_timer ( wmWindowManager wm,
wmTimer wt 
)

◆ wm_jobs_timer_end()

void wm_jobs_timer_end ( wmWindowManager wm,
wmTimer wt 
)

Kill job entirely, also removes timer itself.

Definition at line 605 of file wm_jobs.c.

References wmWindowManager::jobs, LISTBASE_FOREACH, wm_jobs_kill_job(), and wmJob::wt.

Referenced by wm_window_free().

◆ wm_jobs_update_progress_bars()

static void wm_jobs_update_progress_bars ( wmWindowManager wm)
static