28#define DT_GUI_THROTTLE_RUNTIME_CONF "processing/gui_throttle_runtime_us"
64 if(task->
source == source)
return task;
77 if(runtime_us <= 0)
return 0;
78 return (guint)
MAX(1, (runtime_us + 999) / 1000);
85 if(runtime_timeout_ms == 0)
return user_timeout_ms;
86 return MIN(user_timeout_ms, runtime_timeout_ms);
95 GQueue ready = G_QUEUE_INIT;
101 while(!g_queue_is_empty(&ready))
108 return G_SOURCE_REMOVE;
121 if(saved_runtime_us > 0)
160 const uint32_t clamped_runtime_us = (uint32_t)
MIN(runtime_us, (gint64)G_MAXUINT32);
188 const int avg_full_runtime_us
205 const int avg_preview_runtime_us
243 if(timeout_ms <= 0)
return 0;
244 return timeout_ms * 1000;
268 task = g_malloc0(
sizeof(*task));
286 if(task->
source != source)
continue;
void dt_atomic_set_int(dt_atomic_int *var, int value)
int dt_atomic_get_int(dt_atomic_int *var)
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
void dt_conf_set_int(const char *name, int val)
int dt_conf_get_int(const char *name)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
static int dt_pthread_mutex_unlock(dt_pthread_mutex_t *mutex) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
static int dt_pthread_mutex_init(dt_pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
static int dt_pthread_mutex_destroy(dt_pthread_mutex_t *mutex)
static int dt_pthread_mutex_lock(dt_pthread_mutex_t *mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
#define DT_GUI_THROTTLE_RUNTIME_CONF
static gboolean _dispatch_pending_tasks(gpointer user_data)
static dt_gui_throttle_state_t _gui_throttle
gint64 dt_gui_throttle_get_timeout_us(void)
void dt_gui_throttle_cancel(gpointer source)
static guint _effective_timeout_ms(void)
static guint _get_user_timeout_ms(void)
void dt_gui_throttle_init(void)
static dt_gui_throttle_task_t * _find_task(gpointer source)
void dt_gui_throttle_record_runtime(const dt_dev_pixelpipe_t *pipe, const gint64 runtime_us)
int dt_gui_throttle_get_runtime_us(void)
void dt_gui_throttle_cleanup(void)
int dt_gui_throttle_get_pipe_runtime_us(const dt_dev_pixelpipe_type_t pipe_type)
static guint _runtime_us_to_ms(const int runtime_us)
guint dt_gui_throttle_get_timeout_ms(void)
void dt_gui_throttle_queue(gpointer source, dt_gui_throttle_callback_t callback, gpointer user_data)
void(* dt_gui_throttle_callback_t)(gpointer user_data)
@ DT_DEV_PIXELPIPE_THUMBNAIL
@ DT_DEV_PIXELPIPE_EXPORT
@ DT_DEV_PIXELPIPE_PREVIEW
unsigned __int64 uint64_t
dt_dev_pixelpipe_type_t type
uint8_t recent_runtime_pos
uint8_t recent_full_runtime_count
dt_pthread_mutex_t runtime_mutex
dt_atomic_int avg_preview_runtime_us
uint8_t recent_preview_runtime_count
uint32_t recent_preview_runtime_us[5]
uint8_t recent_full_runtime_pos
dt_atomic_int avg_full_runtime_us
uint32_t recent_full_runtime_us[5]
uint8_t recent_preview_runtime_pos
uint8_t recent_runtime_count
uint32_t recent_runtime_us[5]
dt_atomic_int avg_runtime_us
dt_gui_throttle_callback_t callback