Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
pixelpipe_cache_alloc.h File Reference
#include "system/macros.h"
#include "system/mem_alloc.h"
#include "system/openmp.h"
+ Include dependency graph for pixelpipe_cache_alloc.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define dt_pixelpipe_cache_alloc_align_cache(size, id)    dt_pixelpipe_cache_alloc_align_cache_impl((size), (id), __FILE__ ":" DT_STRINGIFY(__LINE__))
 
#define dt_pixelpipe_cache_alloc_align(size, pipe)    dt_pixelpipe_cache_alloc_align_cache((size), (pipe)->type)
 
#define dt_pixelpipe_cache_alloc_align_float(pixels, pipe)    ((float *)dt_pixelpipe_cache_alloc_align((size_t)(pixels) * sizeof(float), (pipe)))
 
#define dt_pixelpipe_cache_alloc_align_float_cache(pixels, id)    ((float *)dt_pixelpipe_cache_alloc_align_cache((size_t)(pixels) * sizeof(float), (id)))
 
#define dt_pixelpipe_cache_alloc_align_int(count, pipe)    ((int *)dt_pixelpipe_cache_alloc_align((size_t)(count) * sizeof(int), (pipe)))
 
#define dt_pixelpipe_cache_alloc_align_int_cache(count, id)    ((int *)dt_pixelpipe_cache_alloc_align_cache((size_t)(count) * sizeof(int), (id)))
 
#define dt_pixelpipe_cache_alloc_align_double_cache(count, id)    ((double *)dt_pixelpipe_cache_alloc_align_cache((size_t)(count) * sizeof(double), (id)))
 
#define dt_pixelpipe_cache_alloc_align_double(count, pipe)    ((double *)dt_pixelpipe_cache_alloc_align((size_t)(count) * sizeof(double), (pipe)))
 
#define dt_pixelpipe_cache_free_align(mem)    dt_pixelpipe_cache_free_align_cache((void **)&(mem), __FILE__ ":" DT_STRINGIFY(__LINE__));
 
#define dt_pixelpipe_cache_alloc_perthread(n, objsize, padded_size)    ((void *)dt_pixelpipe_cache_alloc_perthread_impl((n), (objsize), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))
 
#define dt_pixelpipe_cache_calloc_perthread(n, objsize, padded_size)    ((void *)dt_pixelpipe_cache_calloc_perthread_impl((n), (objsize), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))
 
#define dt_pixelpipe_cache_alloc_perthread_float(n, padded_size)    ((float *)dt_pixelpipe_cache_alloc_perthread_float_impl((n), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))
 
#define dt_get_perthread(buf, padsize)   DT_IS_ALIGNED((buf) + ((padsize) * dt_get_thread_num()))
 
#define dt_get_bythread(buf, padsize, tnum)   DT_IS_ALIGNED((buf) + ((padsize) * (tnum)))
 

Functions

voiddt_pixelpipe_cache_alloc_align_cache_impl (size_t size, int id, const char *name)
 Allocate aligned memory tracked by the pixelpipe cache. This allows LRU cache entries to be evicted if needed to make room.
 
void dt_pixelpipe_cache_free_align_cache (void **mem, const char *message)
 Free aligned memory allocated with dt_pixelpipe_cache_alloc_align_cache.
 
static voiddt_pixelpipe_cache_alloc_perthread_impl (const size_t n, const size_t objsize, size_t *padded_size, const char *message)
 
static voiddt_pixelpipe_cache_calloc_perthread_impl (const size_t n, const size_t objsize, size_t *padded_size, const char *message)
 
static float * dt_pixelpipe_cache_alloc_perthread_float_impl (const size_t n, size_t *padded_size, const char *message)
 

Macro Definition Documentation

◆ dt_get_bythread

#define dt_get_bythread (   buf,
  padsize,
  tnum 
)    DT_IS_ALIGNED((buf) + ((padsize) * (tnum)))

Definition at line 156 of file pixelpipe_cache_alloc.h.

◆ dt_get_perthread

#define dt_get_perthread (   buf,
  padsize 
)    DT_IS_ALIGNED((buf) + ((padsize) * dt_get_thread_num()))

Definition at line 153 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align

#define dt_pixelpipe_cache_alloc_align (   size,
  pipe 
)     dt_pixelpipe_cache_alloc_align_cache((size), (pipe)->type)

Definition at line 67 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_cache

#define dt_pixelpipe_cache_alloc_align_cache (   size,
  id 
)     dt_pixelpipe_cache_alloc_align_cache_impl((size), (id), __FILE__ ":" DT_STRINGIFY(__LINE__))

Definition at line 63 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_double

#define dt_pixelpipe_cache_alloc_align_double (   count,
  pipe 
)     ((double *)dt_pixelpipe_cache_alloc_align((size_t)(count) * sizeof(double), (pipe)))

Definition at line 100 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_double_cache

#define dt_pixelpipe_cache_alloc_align_double_cache (   count,
  id 
)     ((double *)dt_pixelpipe_cache_alloc_align_cache((size_t)(count) * sizeof(double), (id)))

Definition at line 95 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_float

#define dt_pixelpipe_cache_alloc_align_float (   pixels,
  pipe 
)     ((float *)dt_pixelpipe_cache_alloc_align((size_t)(pixels) * sizeof(float), (pipe)))

Definition at line 72 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_float_cache

#define dt_pixelpipe_cache_alloc_align_float_cache (   pixels,
  id 
)     ((float *)dt_pixelpipe_cache_alloc_align_cache((size_t)(pixels) * sizeof(float), (id)))

Definition at line 77 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_int

#define dt_pixelpipe_cache_alloc_align_int (   count,
  pipe 
)     ((int *)dt_pixelpipe_cache_alloc_align((size_t)(count) * sizeof(int), (pipe)))

Definition at line 82 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_align_int_cache

#define dt_pixelpipe_cache_alloc_align_int_cache (   count,
  id 
)     ((int *)dt_pixelpipe_cache_alloc_align_cache((size_t)(count) * sizeof(int), (id)))

Definition at line 90 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_perthread

#define dt_pixelpipe_cache_alloc_perthread (   n,
  objsize,
  padded_size 
)     ((void *)dt_pixelpipe_cache_alloc_perthread_impl((n), (objsize), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))

Definition at line 124 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_alloc_perthread_float

#define dt_pixelpipe_cache_alloc_perthread_float (   n,
  padded_size 
)     ((float *)dt_pixelpipe_cache_alloc_perthread_float_impl((n), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))

Definition at line 148 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_calloc_perthread

#define dt_pixelpipe_cache_calloc_perthread (   n,
  objsize,
  padded_size 
)     ((void *)dt_pixelpipe_cache_calloc_perthread_impl((n), (objsize), (padded_size), __FILE__ ":" DT_STRINGIFY(__LINE__)))

Definition at line 137 of file pixelpipe_cache_alloc.h.

◆ dt_pixelpipe_cache_free_align

#define dt_pixelpipe_cache_free_align (   mem)     dt_pixelpipe_cache_free_align_cache((void **)&(mem), __FILE__ ":" DT_STRINGIFY(__LINE__));

Definition at line 104 of file pixelpipe_cache_alloc.h.

Function Documentation

◆ dt_pixelpipe_cache_alloc_align_cache_impl()

void * dt_pixelpipe_cache_alloc_align_cache_impl ( size_t  size,
int  id,
const char *  name 
)

Allocate aligned memory tracked by the pixelpipe cache. This allows LRU cache entries to be evicted if needed to make room.

Parameters
cachePixelpipe cache to manage.
sizeBuffer size in bytes.
idPipeline type owning the buffer.
nameHuman-readable name.
Returns
void* Pointer to the allocated buffer, or NULL on failure.

Definition at line 1919 of file pixelpipe_cache.c.

References _arena_alloc_with_defrag(), _free_space_to_alloc(), _log_arena_allocation_failure(), _non_thread_safe_cache_ref_count_entry(), _pixelpipe_cache, dt_pixel_cache_entry_t::age, dt_dev_pixelpipe_cache_t::arena, dt_pixel_cache_entry_t::data, dt_cache_arena_free(), DT_CACHELINE_BYTES, dt_pixel_cache_new_entry(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), error(), dt_pixel_cache_entry_t::external_alloc, dt_dev_pixelpipe_cache_t::external_entries, FALSE, IS_NULL_PTR, L, dt_dev_pixelpipe_cache_t::lock, name, size, and TRUE.

Referenced by dt_drawlayer_cache_alloc_temp_buffer(), and dt_pixelpipe_cache_alloc_perthread_impl().

◆ dt_pixelpipe_cache_alloc_perthread_float_impl()

static float * dt_pixelpipe_cache_alloc_perthread_float_impl ( const size_t  n,
size_t *  padded_size,
const char *  message 
)
inlinestatic

Definition at line 142 of file pixelpipe_cache_alloc.h.

References dt_pixelpipe_cache_alloc_perthread_impl(), L, and n.

◆ dt_pixelpipe_cache_alloc_perthread_impl()

static void * dt_pixelpipe_cache_alloc_perthread_impl ( const size_t  n,
const size_t  objsize,
size_t *  padded_size,
const char *  message 
)
inlinestatic

◆ dt_pixelpipe_cache_calloc_perthread_impl()

static void * dt_pixelpipe_cache_calloc_perthread_impl ( const size_t  n,
const size_t  objsize,
size_t *  padded_size,
const char *  message 
)
inlinestatic

◆ dt_pixelpipe_cache_free_align_cache()

void dt_pixelpipe_cache_free_align_cache ( void **  mem,
const char *  message 
)

Free aligned memory allocated with dt_pixelpipe_cache_alloc_align_cache.

Parameters
cachePixelpipe cache to manage.
memPointer to the buffer pointer. Set to NULL on successful free.

Definition at line 1968 of file pixelpipe_cache.c.

References _non_thread_safe_cache_ref_count_entry(), _non_threadsafe_cache_get_entry(), _pixelpipe_cache, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_pixel_cache_entry_t::external_alloc, dt_dev_pixelpipe_cache_t::external_entries, FALSE, dt_pixel_cache_entry_t::hash, IS_NULL_PTR, L, and dt_dev_pixelpipe_cache_t::lock.

Referenced by dt_drawlayer_cache_free_temp_buffer(), and dt_drawlayer_cache_patch_clear().