Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
jobs.h File Reference
#include <glib.h>
#include <inttypes.h>
#include <stddef.h>
+ Include dependency graph for jobs.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define DT_CONTROL_DESCRIPTION_LEN   256
 
#define DT_CTL_WORKER_RESERVED   1
 
#define DT_CTL_WORKER_DARKROOM   0
 

Typedefs

typedef enum dt_job_state_t dt_job_state_t
 
typedef enum dt_job_queue_t dt_job_queue_t
 
typedef struct _dt_job_t dt_job_t
 
typedef int32_t(* dt_job_execute_callback) (dt_job_t *)
 
typedef void(* dt_job_state_change_callback) (dt_job_t *, dt_job_state_t state)
 
typedef void(* dt_job_destroy_callback) (void *data)
 
typedef void(* dt_control_running_jobs_foreach_callback_t) (const char *description, dt_job_queue_t queue, gboolean reserved, void *data)
 

Enumerations

enum  dt_job_state_t {
  DT_JOB_STATE_INITIALIZED = 0 ,
  DT_JOB_STATE_QUEUED ,
  DT_JOB_STATE_RUNNING ,
  DT_JOB_STATE_FINISHED ,
  DT_JOB_STATE_CANCELLED ,
  DT_JOB_STATE_DISCARDED ,
  DT_JOB_STATE_DISPOSED
}
 
enum  dt_job_queue_t {
  DT_JOB_QUEUE_USER_FG = 0 ,
  DT_JOB_QUEUE_SYSTEM_FG = 1 ,
  DT_JOB_QUEUE_USER_BG = 2 ,
  DT_JOB_QUEUE_USER_EXPORT = 3 ,
  DT_JOB_QUEUE_SYSTEM_BG = 4 ,
  DT_JOB_QUEUE_MAX = 5
}
 

Functions

dt_job_t * dt_control_job_create (dt_job_execute_callback execute, const char *msg,...) __attribute__((format(printf
 
dt_job_t void dt_control_job_dispose (dt_job_t *job)
 
void dt_control_job_set_state_callback (dt_job_t *job, dt_job_state_change_callback cb)
 
void dt_control_job_cancel (dt_job_t *job)
 
dt_job_state_t dt_control_job_get_state (dt_job_t *job)
 
void dt_control_job_wait (dt_job_t *job)
 
void dt_control_job_set_params (dt_job_t *job, void *params, dt_job_destroy_callback callback)
 
void dt_control_job_set_params_with_size (dt_job_t *job, void *params, size_t params_size, dt_job_destroy_callback callback)
 
void * dt_control_job_get_params (const dt_job_t *job)
 
void dt_control_job_add_progress (dt_job_t *job, const char *message, gboolean cancellable)
 
void dt_control_job_set_progress_message (dt_job_t *job, const char *message)
 
void dt_control_job_set_progress (dt_job_t *job, double value)
 
double dt_control_job_get_progress (dt_job_t *job)
 
void dt_control_jobs_init (struct dt_control_t *control)
 
void dt_control_jobs_drain (struct dt_control_t *control)
 
void dt_control_jobs_cleanup (struct dt_control_t *control)
 
int32_t dt_control_workers_alive (void)
 
void dt_control_running_jobs_foreach (struct dt_control_t *control, dt_control_running_jobs_foreach_callback_t callback, void *data)
 
int32_t dt_control_queued_jobs_count (struct dt_control_t *control)
 
int dt_control_add_job (struct dt_control_t *control, dt_job_queue_t queue_id, dt_job_t *job)
 
int32_t dt_control_add_job_res (struct dt_control_t *s, dt_job_t *job, int32_t res)
 
int32_t dt_control_get_threadid ()
 
void dt_control_flush_jobs_queue (struct dt_control_t *control, dt_job_queue_t queue_id)
 

Macro Definition Documentation

◆ DT_CONTROL_DESCRIPTION_LEN

#define DT_CONTROL_DESCRIPTION_LEN   256

Definition at line 37 of file jobs.h.

◆ DT_CTL_WORKER_DARKROOM

#define DT_CTL_WORKER_DARKROOM   0

Definition at line 40 of file jobs.h.

◆ DT_CTL_WORKER_RESERVED

#define DT_CTL_WORKER_RESERVED   1

Definition at line 39 of file jobs.h.

Typedef Documentation

◆ dt_control_running_jobs_foreach_callback_t

typedef void(* dt_control_running_jobs_foreach_callback_t) (const char *description, dt_job_queue_t queue, gboolean reserved, void *data)

Called once per running job by dt_control_running_jobs_foreach(): the description given to dt_control_job_create(), the queue the job was added to (meaningless when it went to a reserved worker instead), and whether it did.

Definition at line 114 of file jobs.h.

◆ dt_job_destroy_callback

typedef void(* dt_job_destroy_callback) (void *data)

Definition at line 67 of file jobs.h.

◆ dt_job_execute_callback

typedef int32_t(* dt_job_execute_callback) (dt_job_t *)

Definition at line 65 of file jobs.h.

◆ dt_job_queue_t

◆ dt_job_state_change_callback

typedef void(* dt_job_state_change_callback) (dt_job_t *, dt_job_state_t state)

Definition at line 66 of file jobs.h.

◆ dt_job_state_t

◆ dt_job_t

typedef struct _dt_job_t dt_job_t

Definition at line 63 of file jobs.h.

Enumeration Type Documentation

◆ dt_job_queue_t

Enumerator
DT_JOB_QUEUE_USER_FG 
DT_JOB_QUEUE_SYSTEM_FG 
DT_JOB_QUEUE_USER_BG 
DT_JOB_QUEUE_USER_EXPORT 
DT_JOB_QUEUE_SYSTEM_BG 
DT_JOB_QUEUE_MAX 

Definition at line 53 of file jobs.h.

◆ dt_job_state_t

Enumerator
DT_JOB_STATE_INITIALIZED 
DT_JOB_STATE_QUEUED 
DT_JOB_STATE_RUNNING 
DT_JOB_STATE_FINISHED 
DT_JOB_STATE_CANCELLED 
DT_JOB_STATE_DISCARDED 
DT_JOB_STATE_DISPOSED 

Definition at line 42 of file jobs.h.

Function Documentation

◆ dt_control_add_job()

int dt_control_add_job ( struct dt_control_t *  control,
dt_job_queue_t  queue_id,
dt_job_t *  job 
)

Definition at line 419 of file jobs.c.

References dt_control_t::cond, dt_control_t::cond_mutex, DT_CONTROL_FG_PRIORITY, dt_control_job_dispose(), dt_control_job_equal(), dt_control_job_execute(), dt_control_job_print(), dt_control_job_set_state(), DT_CONTROL_MAX_JOBS, DT_DEBUG_CONTROL, DT_JOB_QUEUE_MAX, DT_JOB_QUEUE_SYSTEM_BG, DT_JOB_QUEUE_SYSTEM_FG, DT_JOB_QUEUE_USER_BG, DT_JOB_QUEUE_USER_EXPORT, DT_JOB_STATE_DISCARDED, DT_JOB_STATE_QUEUED, dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), IS_NULL_PTR, dt_control_t::job, k, dt_control_t::num_threads, _dt_job_t::priority, _dt_job_t::queue, dt_control_t::queue_length, dt_control_t::queue_mutex, dt_control_t::queues, dt_control_t::running, and _dt_job_t::wait_mutex.

Referenced by _act_prerender(), _create_background_layer_from_input(), _enqueue_surface_fetch(), _folder_survey_scan(), _load_for_image(), _preload_image_cache_with_max_size(), _print_button_clicked(), _schedule_main_recompute(), _thumbtable_dnd_scan_folders_and_import(), dt_control_copy_images(), dt_control_crawler_run_in_background(), dt_control_datetime(), dt_control_delete_image(), dt_control_delete_images(), dt_control_duplicate_images(), dt_control_export(), dt_control_flip_images(), dt_control_get_selected_files(), dt_control_gpx_apply(), dt_control_import(), dt_control_merge_hdr(), dt_control_monochrome_images(), dt_control_move_images(), dt_control_refresh_exif(), dt_control_remove_images(), dt_control_reset_local_copy_images(), dt_control_save_xmp(), dt_control_save_xmps(), dt_control_save_xmps_forced(), dt_control_set_local_copy_images(), dt_dev_write_history(), dt_film_import(), dt_init(), dt_printers_discovery(), and dt_thumbnail_get_image_buffer().

◆ dt_control_add_job_res()

◆ dt_control_flush_jobs_queue()

void dt_control_flush_jobs_queue ( struct dt_control_t *  control,
dt_job_queue_t  queue_id 
)

◆ dt_control_get_threadid()

int32_t dt_control_get_threadid ( )

◆ dt_control_job_add_progress()

◆ dt_control_job_cancel()

void dt_control_job_cancel ( dt_job_t *  job)

◆ dt_control_job_create()

dt_job_t * dt_control_job_create ( dt_job_execute_callback  execute,
const char *  msg,
  ... 
)

create a new initialized job

◆ dt_control_job_dispose()

◆ dt_control_job_get_params()

◆ dt_control_job_get_progress()

double dt_control_job_get_progress ( dt_job_t *  job)

Definition at line 707 of file jobs.c.

References dt_control_progress_get_progress(), IS_NULL_PTR, and _dt_job_t::progress.

◆ dt_control_job_get_state()

◆ dt_control_job_set_params()

◆ dt_control_job_set_params_with_size()

void dt_control_job_set_params_with_size ( dt_job_t *  job,
void *  params,
size_t  params_size,
dt_job_destroy_callback  callback 
)

set job params (with size params_size) and a callback to destroy those params. NOTE: in most cases you want dt_control_job_set_params()

Definition at line 123 of file jobs.c.

References dt_control_job_get_state(), DT_JOB_STATE_INITIALIZED, IS_NULL_PTR, _dt_job_t::params, params, _dt_job_t::params_destroy, _dt_job_t::params_size, and params_size().

Referenced by _enqueue_surface_fetch().

◆ dt_control_job_set_progress()

◆ dt_control_job_set_progress_message()

◆ dt_control_job_set_state_callback()

void dt_control_job_set_state_callback ( dt_job_t *  job,
dt_job_state_change_callback  cb 
)

setup a state callback for job.

Definition at line 168 of file jobs.c.

References dt_control_job_get_state(), DT_JOB_STATE_INITIALIZED, and _dt_job_t::state_changed_cb.

Referenced by _load_for_image(), and dt_thumbnail_get_image_buffer().

◆ dt_control_job_wait()

void dt_control_job_wait ( dt_job_t *  job)

◆ dt_control_jobs_cleanup()

void dt_control_jobs_cleanup ( struct dt_control_t *  control)

Definition at line 771 of file jobs.c.

References dt_control_jobs_drain(), dt_free, dt_control_t::job, and dt_control_t::thread.

Referenced by dt_control_cleanup().

◆ dt_control_jobs_drain()

◆ dt_control_jobs_init()

◆ dt_control_queued_jobs_count()

int32_t dt_control_queued_jobs_count ( struct dt_control_t *  control)

How many jobs wait for a worker: those of the queues, and the one a reserved worker has not taken yet. Once dt_control_running() is false, none of them will run.

Definition at line 571 of file jobs.c.

References DT_CTL_WORKER_RESERVED, DT_JOB_QUEUE_MAX, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), i, IS_NULL_PTR, dt_control_t::job_res, k, dt_control_t::new_res, dt_control_t::queue_length, dt_control_t::queue_mutex, and dt_control_t::res_mutex.

Referenced by _closing_details_update(), and _closing_nothing_pending().

◆ dt_control_running_jobs_foreach()

void dt_control_running_jobs_foreach ( struct dt_control_t *  control,
dt_control_running_jobs_foreach_callback_t  callback,
void *  data 
)

Report every job a worker is running. The queued ones are not reported.

The callback runs under the scheduler's mutexes: it must not call back into it, and should return quickly.

Definition at line 549 of file jobs.c.

References _job_res_running, _dt_job_t::description, DT_CTL_WORKER_RESERVED, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, IS_NULL_PTR, dt_control_t::job, k, dt_control_t::num_threads, _dt_job_t::queue, dt_control_t::queue_mutex, dt_control_t::res_mutex, and TRUE.

Referenced by _closing_details_update(), and _closing_running_jobs().

◆ dt_control_workers_alive()

int32_t dt_control_workers_alive ( void  )

Worker threads – pool, reserved and kicker – that have started and not returned yet.

Once dt_control_running() is false, a worker returns as soon as the job it is running does: from then on this only falls, and it is the number of jobs still running. At 0 the joins of dt_control_shutdown() do not block.

Definition at line 544 of file jobs.c.

References _workers_alive.

Referenced by _closing_poll(), _closing_refresh(), and dt_gui_closing_wait().