![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "develop/pixelpipe_cache.h"
#include "common/darktable.h"
#include "common/debug.h"
#include "develop/format.h"
#include "develop/pixelpipe_hb.h"
#include <glib.h>
#include <stdlib.h>
Go to the source code of this file.
Data Structures | |
struct | dt_pixel_cache_entry_t |
struct | _cache_lru_t |
struct | _cache_invalidate_t |
Typedefs | |
typedef struct dt_pixel_cache_entry_t | dt_pixel_cache_entry_t |
typedef struct _cache_lru_t | _cache_lru_t |
typedef struct _cache_invalidate_t | _cache_invalidate_t |
Functions | |
void | _non_thread_safe_cache_ref_count_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, gboolean lock, dt_pixel_cache_entry_t *cache_entry) |
dt_pixel_cache_entry_t * | _non_threadsafe_cache_get_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash) |
dt_pixel_cache_entry_t * | dt_dev_pixelpipe_cache_get_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash) |
Get an internal reference to the cache entry matching hash. If you are going to access this entry more than once, keeping the reference and using it instead of hashes will prevent redundant lookups. | |
size_t | dt_pixel_cache_get_size (dt_pixel_cache_entry_t *cache_entry) |
void | dt_pixel_cache_message (dt_pixel_cache_entry_t *cache_entry, const char *message, gboolean verbose) |
int | _non_thread_safe_cache_remove (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const gboolean force, dt_pixel_cache_entry_t *cache_entry) |
int | dt_dev_pixelpipe_cache_remove (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const gboolean force, dt_pixel_cache_entry_t *cache_entry) |
Arbitrarily remove the cache entry matching hash. Entries having a reference count > 0 (inter-thread locked) or being having their read/write lock locked will be ignored. If force is TRUE, we ignore reference count, but not locks. | |
void | _cache_get_oldest (gpointer key, gpointer value, gpointer user_data) |
static int | _non_thread_safe_pixel_pipe_cache_remove_lru (dt_dev_pixelpipe_cache_t *cache) |
int | dt_dev_pixel_pipe_cache_remove_lru (dt_dev_pixelpipe_cache_t *cache) |
static dt_pixel_cache_entry_t * | dt_pixel_cache_new_entry (const uint64_t hash, const size_t size, const dt_iop_buffer_dsc_t dsc, const char *name, const int id, dt_dev_pixelpipe_cache_t *cache) |
static void | _free_cache_entry (dt_pixel_cache_entry_t *cache_entry) |
dt_dev_pixelpipe_cache_t * | dt_dev_pixelpipe_cache_init (size_t max_memory) |
void | dt_dev_pixelpipe_cache_cleanup (dt_dev_pixelpipe_cache_t *cache) |
int | dt_dev_pixelpipe_cache_get (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const size_t size, const char *name, const int id, void **data, dt_iop_buffer_dsc_t **dsc, dt_pixel_cache_entry_t **entry) |
Get a cache line from the cache. | |
int | dt_dev_pixelpipe_cache_get_existing (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, void **data, dt_iop_buffer_dsc_t **dsc, dt_pixel_cache_entry_t **entry) |
Get an existing cache line from the cache. This is similar to dt_dev_pixelpipe_cache_get , but it does not create a new cache line if it is not found. | |
gboolean | _for_each_remove (gpointer key, gpointer value, gpointer user_data) |
void | dt_dev_pixelpipe_cache_flush (dt_dev_pixelpipe_cache_t *cache, const int id) |
Remove cache lines matching id. Entries locked in read/write or having reference count greater than 0 are not removed. | |
uint64_t | _non_thread_safe_cache_get_hash_data (dt_dev_pixelpipe_cache_t *cache, void *data, dt_pixel_cache_entry_t **entry) |
uint64_t | dt_dev_pixelpipe_cache_get_hash_data (dt_dev_pixelpipe_cache_t *cache, void *data, dt_pixel_cache_entry_t **entry) |
Find the hash of the cache entry holding the buffer data. | |
dt_pixel_cache_entry_t * | dt_dev_pixelpipe_cache_get_entry_from_data (dt_dev_pixelpipe_cache_t *cache, void *data) |
Return a reference to the cache entry holding the data buffer, or NULL if not found. | |
void | dt_dev_pixelpipe_cache_ref_count_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, gboolean lock, dt_pixel_cache_entry_t *cache_entry) |
Increase/Decrease the reference count on the cache line as to prevent LRU item removal. This function should be called within a read/write lock-protected section to avoid changing an entry while or after it is deleted in parallel. | |
void | dt_dev_pixelpipe_cache_wrlock_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, gboolean lock, dt_pixel_cache_entry_t *cache_entry) |
Lock or release the write lock on the entry. | |
void | dt_dev_pixelpipe_cache_rdlock_entry (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, gboolean lock, dt_pixel_cache_entry_t *cache_entry) |
Lock or release the read lock on the entry. | |
void | dt_dev_pixelpipe_cache_flag_auto_destroy (dt_dev_pixelpipe_cache_t *cache, uint64_t hash, dt_pixel_cache_entry_t *cache_entry) |
Flag the cache entry matching hash as "auto_destroy". This is useful for short-lived/disposable cache entries, that won't be needed in the future. These will be freed out of the typical LRU, aged-based garbage collection. The thread that tagged this entry as "auto_destroy" is responsible for freeing it as soon as it is done with it, using dt_dev_pixelpipe_cache_auto_destroy_apply() . If not manually freed this way, the entry will be caught using the generic LRU garbage collection. | |
void | dt_dev_pixel_pipe_cache_auto_destroy_apply (dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const int id, dt_pixel_cache_entry_t *cache_entry) |
void | dt_dev_pixelpipe_cache_print (dt_dev_pixelpipe_cache_t *cache) |
typedef struct _cache_invalidate_t _cache_invalidate_t |
typedef struct _cache_lru_t _cache_lru_t |
typedef struct dt_pixel_cache_entry_t dt_pixel_cache_entry_t |
void _cache_get_oldest | ( | gpointer | key, |
gpointer | value, | ||
gpointer | user_data | ||
) |
References dt_pixel_cache_entry_t::age, _cache_lru_t::cache_entry, dt_atomic_get_int(), dt_pixel_cache_message(), dt_pthread_rwlock_trywrlock, dt_pthread_rwlock_unlock, dt_pixel_cache_entry_t::hash, _cache_lru_t::hash, dt_pixel_cache_entry_t::lock, _cache_lru_t::max_age, dt_pixel_cache_entry_t::refcount, and TRUE.
Referenced by _non_thread_safe_pixel_pipe_cache_remove_lru().
gboolean _for_each_remove | ( | gpointer | key, |
gpointer | value, | ||
gpointer | user_data | ||
) |
|
static |
uint64_t _non_thread_safe_cache_get_hash_data | ( | dt_dev_pixelpipe_cache_t * | cache, |
void * | data, | ||
dt_pixel_cache_entry_t ** | entry | ||
) |
References dt_pixel_cache_entry_t::data, dt_dev_pixelpipe_cache_t::entries, dt_pixel_cache_entry_t::hash, and key.
Referenced by dt_dev_pixelpipe_cache_get_entry_from_data(), and dt_dev_pixelpipe_cache_get_hash_data().
void _non_thread_safe_cache_ref_count_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
gboolean | lock, | ||
dt_pixel_cache_entry_t * | cache_entry | ||
) |
int _non_thread_safe_cache_remove | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
const gboolean | force, | ||
dt_pixel_cache_entry_t * | cache_entry | ||
) |
References _non_threadsafe_cache_get_entry(), dt_dev_pixelpipe_cache_t::current_memory, dt_atomic_get_int(), DT_DEBUG_PIPE, dt_pixel_cache_message(), dt_print(), dt_pthread_rwlock_trywrlock, dt_pthread_rwlock_unlock, dt_dev_pixelpipe_cache_t::entries, dt_pixel_cache_entry_t::lock, dt_pixel_cache_entry_t::refcount, dt_pixel_cache_entry_t::size, and TRUE.
Referenced by _non_thread_safe_pixel_pipe_cache_remove_lru(), and dt_dev_pixelpipe_cache_remove().
|
static |
References _cache_get_oldest(), _non_thread_safe_cache_remove(), _cache_lru_t::cache_entry, DT_DEBUG_PIPE, dt_print(), dt_dev_pixelpipe_cache_t::entries, error(), FALSE, _cache_lru_t::hash, and _cache_lru_t::max_age.
Referenced by dt_dev_pixel_pipe_cache_remove_lru(), and dt_pixel_cache_new_entry().
dt_pixel_cache_entry_t * _non_threadsafe_cache_get_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash | ||
) |
References dt_dev_pixelpipe_cache_t::entries.
Referenced by _non_thread_safe_cache_ref_count_entry(), _non_thread_safe_cache_remove(), dt_dev_pixel_pipe_cache_auto_destroy_apply(), dt_dev_pixelpipe_cache_flag_auto_destroy(), dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_cache_get_entry(), and dt_dev_pixelpipe_cache_get_existing().
void dt_dev_pixel_pipe_cache_auto_destroy_apply | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
const int | id, | ||
dt_pixel_cache_entry_t * | cache_entry | ||
) |
References _non_threadsafe_cache_get_entry(), dt_pixel_cache_entry_t::auto_destroy, dt_dev_pixelpipe_cache_t::current_memory, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_dev_pixelpipe_cache_t::entries, dt_pixel_cache_entry_t::id, dt_dev_pixelpipe_cache_t::lock, and dt_pixel_cache_entry_t::size.
Referenced by dt_dev_pixelpipe_process_rec().
int dt_dev_pixel_pipe_cache_remove_lru | ( | dt_dev_pixelpipe_cache_t * | cache | ) |
remove the least used cache entry
References _non_thread_safe_pixel_pipe_cache_remove_lru(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), error(), and dt_dev_pixelpipe_cache_t::lock.
Referenced by dt_alloc_align().
void dt_dev_pixelpipe_cache_cleanup | ( | dt_dev_pixelpipe_cache_t * | cache | ) |
References dt_pthread_mutex_destroy(), dt_dev_pixelpipe_cache_t::entries, and dt_dev_pixelpipe_cache_t::lock.
Referenced by dt_cleanup().
void dt_dev_pixelpipe_cache_flag_auto_destroy | ( | dt_dev_pixelpipe_cache_t * | cache, |
uint64_t | hash, | ||
struct dt_pixel_cache_entry_t * | entry | ||
) |
Flag the cache entry matching hash as "auto_destroy". This is useful for short-lived/disposable cache entries, that won't be needed in the future. These will be freed out of the typical LRU, aged-based garbage collection. The thread that tagged this entry as "auto_destroy" is responsible for freeing it as soon as it is done with it, using dt_dev_pixelpipe_cache_auto_destroy_apply()
. If not manually freed this way, the entry will be caught using the generic LRU garbage collection.
cache | |
hash |
References _non_threadsafe_cache_get_entry(), dt_pixel_cache_entry_t::auto_destroy, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_dev_pixelpipe_cache_t::lock, and TRUE.
Referenced by dt_dev_pixelpipe_process_rec().
void dt_dev_pixelpipe_cache_flush | ( | dt_dev_pixelpipe_cache_t * | cache, |
const int | id | ||
) |
Remove cache lines matching id. Entries locked in read/write or having reference count greater than 0 are not removed.
cache | |
id | ID of the pipeline owning the cache line, or -1 to remove all lines. |
References _for_each_remove(), dt_dev_pixelpipe_cache_t::current_memory, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_dev_pixelpipe_cache_t::entries, and dt_dev_pixelpipe_cache_t::lock.
Referenced by dt_dev_darkroom_pipeline(), and dt_dev_reprocess_all().
int dt_dev_pixelpipe_cache_get | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
const size_t | size, | ||
const char * | name, | ||
const int | id, | ||
void ** | data, | ||
struct dt_iop_buffer_dsc_t ** | dsc, | ||
struct dt_pixel_cache_entry_t ** | entry | ||
) |
Get a cache line from the cache.
WARNING: This internally increases the reference count, so you have to manually decrease it using dt_dev_pixelpipe_ref_count_entry()
once the cache line content has been consumed or it will never be freed.
WARNING: if the cache line was newly allocated, a write lock is put on straight away. You will have to release it from the same calling thread next, to avoid dead locks.
cache | |
hash | State checksum of the cache line. |
size | Buffer size in bytes. |
name | Name of the cache line (for debugging). |
id | ID of the pipeline owning the cache line. |
data | Pointer to the buffer pointer (returned). |
dsc | Pointer to the buffer descriptor (returned). |
cache_entry | a reference to the cache entry, to be reused later. Can be NULL. The caller doesn't own the data and shouldn't free it. |
References _non_thread_safe_cache_ref_count_entry(), _non_threadsafe_cache_get_entry(), dt_pixel_cache_entry_t::age, darktable, dt_pixel_cache_entry_t::data, dt_pixel_cache_entry_t::dsc, DT_DEBUG_PIPE, dt_dev_pixelpipe_cache_rdlock_entry(), dt_dev_pixelpipe_cache_wrlock_entry(), dt_pixel_cache_message(), dt_pixel_cache_new_entry(), dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, dt_dev_pixelpipe_cache_t::hits, dt_dev_pixelpipe_cache_t::lock, name, darktable_t::pixelpipe_cache, dt_dev_pixelpipe_cache_t::queries, size, and TRUE.
Referenced by _init_base_buffer(), and dt_dev_pixelpipe_process_rec().
dt_pixel_cache_entry_t * dt_dev_pixelpipe_cache_get_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash | ||
) |
Get an internal reference to the cache entry matching hash. If you are going to access this entry more than once, keeping the reference and using it instead of hashes will prevent redundant lookups.
cache | |
hash |
References _non_threadsafe_cache_get_entry(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_dev_pixelpipe_cache_t::lock.
Referenced by dt_dev_pixelpipe_cache_rdlock_entry(), and dt_dev_pixelpipe_cache_wrlock_entry().
dt_pixel_cache_entry_t * dt_dev_pixelpipe_cache_get_entry_from_data | ( | dt_dev_pixelpipe_cache_t * | cache, |
void * | data | ||
) |
Return a reference to the cache entry holding the data buffer, or NULL if not found.
WARNING: this immediately puts a read lock on the entry cache, if found. You will need to manually release it later with dt_dev_pixelpipe_cache_rdlock_entry()
or you will get a deadlock and this entry will never be deleted.
cache | |
data |
References _non_thread_safe_cache_get_hash_data(), dt_pixel_cache_message(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_pthread_rwlock_rdlock, dt_pixel_cache_entry_t::lock, dt_dev_pixelpipe_cache_t::lock, and TRUE.
Referenced by _update_gui_backbuf(), and dt_imageio_export_with_flags().
int dt_dev_pixelpipe_cache_get_existing | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
void ** | data, | ||
struct dt_iop_buffer_dsc_t ** | dsc, | ||
struct dt_pixel_cache_entry_t ** | entry | ||
) |
Get an existing cache line from the cache. This is similar to dt_dev_pixelpipe_cache_get
, but it does not create a new cache line if it is not found.
This internally increases the reference count, so you have to manually decrease it using dt_dev_pixelpipe_ref_count_entry()
once the cache line content has been consumed or it will never be freed.
cache | |
hash | |
data | |
dsc |
References _non_thread_safe_cache_ref_count_entry(), _non_threadsafe_cache_get_entry(), dt_pixel_cache_entry_t::age, darktable, dt_pixel_cache_entry_t::data, dt_pixel_cache_entry_t::dsc, dt_dev_pixelpipe_cache_rdlock_entry(), dt_pixel_cache_message(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), FALSE, dt_dev_pixelpipe_cache_t::hits, dt_dev_pixelpipe_cache_t::lock, darktable_t::pixelpipe_cache, dt_dev_pixelpipe_cache_t::queries, and TRUE.
Referenced by dt_dev_pixelpipe_process_rec().
uint64_t dt_dev_pixelpipe_cache_get_hash_data | ( | dt_dev_pixelpipe_cache_t * | cache, |
void * | data, | ||
struct dt_pixel_cache_entry_t ** | entry | ||
) |
Find the hash of the cache entry holding the buffer data.
cache | |
data | |
cache_entry | a reference to the cache entry, to be reused later. Can be NULL. The caller doesn't own the data and shouldn't free it. |
References _non_thread_safe_cache_get_hash_data(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_dev_pixelpipe_cache_t::lock.
Referenced by dt_dev_pixelpipe_process_rec().
dt_dev_pixelpipe_cache_t * dt_dev_pixelpipe_cache_init | ( | size_t | max_memory | ) |
constructs a new cache with given cache line count (entries) and float buffer entry size in bytes.
[out] | returns | 0 if fail to allocate mem cache. |
References _free_cache_entry(), dt_dev_pixelpipe_cache_t::current_memory, dt_pthread_mutex_init(), dt_dev_pixelpipe_cache_t::entries, dt_dev_pixelpipe_cache_t::hits, dt_dev_pixelpipe_cache_t::lock, dt_dev_pixelpipe_cache_t::max_memory, and dt_dev_pixelpipe_cache_t::queries.
Referenced by dt_init().
void dt_dev_pixelpipe_cache_print | ( | dt_dev_pixelpipe_cache_t * | cache | ) |
print out cache lines/hashes (debug).
References dt_dev_pixelpipe_cache_t::current_memory, darktable, DT_DEBUG_PIPE, dt_print(), dt_dev_pixelpipe_cache_t::entries, dt_dev_pixelpipe_cache_t::hits, dt_dev_pixelpipe_cache_t::max_memory, dt_dev_pixelpipe_cache_t::queries, and darktable_t::unmuted.
Referenced by dt_dev_pixelpipe_process().
void dt_dev_pixelpipe_cache_rdlock_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
gboolean | lock, | ||
struct dt_pixel_cache_entry_t * | entry | ||
) |
Lock or release the read lock on the entry.
cache | |
hash | checksum of the cache entry to fetch. Optional if entry is not NULL. |
lock | TRUE to lock, FALSE to release |
entry | The cache entry object to lock, if a reference is already known. Can be NULL, but then you need to pass a hash. |
References dt_dev_pixelpipe_cache_get_entry(), dt_pixel_cache_message(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, dt_pixel_cache_entry_t::lock, and TRUE.
Referenced by _update_gui_backbuf(), dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_cache_get_existing(), dt_dev_pixelpipe_process_rec(), dt_imageio_export_with_flags(), and pixelpipe_process_on_CPU().
void dt_dev_pixelpipe_cache_ref_count_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
gboolean | lock, | ||
struct dt_pixel_cache_entry_t * | entry | ||
) |
Increase/Decrease the reference count on the cache line as to prevent LRU item removal. This function should be called within a read/write lock-protected section to avoid changing an entry while or after it is deleted in parallel.
WARNING: cache entries whose reference count is greater than 0 will never be deleted from cache.
cache | |
hash | |
lock | TRUE to lock, FALSE to unlock |
References _non_thread_safe_cache_ref_count_entry(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), and dt_dev_pixelpipe_cache_t::lock.
Referenced by _update_gui_backbuf(), dt_dev_pixelpipe_process_rec(), and dt_imageio_export_with_flags().
int dt_dev_pixelpipe_cache_remove | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
const gboolean | force, | ||
struct dt_pixel_cache_entry_t * | entry | ||
) |
Arbitrarily remove the cache entry matching hash. Entries having a reference count > 0 (inter-thread locked) or being having their read/write lock locked will be ignored. If force is TRUE, we ignore reference count, but not locks.
cache | |
hash | |
force |
References _non_thread_safe_cache_remove(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), error(), and dt_dev_pixelpipe_cache_t::lock.
Referenced by _update_gui_backbuf(), and dt_dev_pixelpipe_process_rec().
void dt_dev_pixelpipe_cache_wrlock_entry | ( | dt_dev_pixelpipe_cache_t * | cache, |
const uint64_t | hash, | ||
gboolean | lock, | ||
struct dt_pixel_cache_entry_t * | entry | ||
) |
Lock or release the write lock on the entry.
cache | |
hash | |
lock | TRUE to lock, FALSE to release |
References dt_dev_pixelpipe_cache_get_entry(), dt_pixel_cache_message(), dt_pthread_rwlock_unlock, dt_pthread_rwlock_wrlock, dt_pixel_cache_entry_t::lock, and TRUE.
Referenced by _init_base_buffer(), _sample_all(), dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_process_rec(), and pixelpipe_process_on_CPU().
size_t dt_pixel_cache_get_size | ( | dt_pixel_cache_entry_t * | cache_entry | ) |
References dt_pixel_cache_entry_t::size.
Referenced by dt_pixel_cache_message().
void dt_pixel_cache_message | ( | dt_pixel_cache_entry_t * | cache_entry, |
const char * | message, | ||
gboolean | verbose | ||
) |
References dt_pixel_cache_entry_t::age, darktable, DT_DEBUG_PIPE, DT_DEBUG_VERBOSE, dt_pixel_cache_get_size(), dt_print(), dt_pixel_cache_entry_t::hash, dt_pixel_cache_entry_t::name, and darktable_t::unmuted.
Referenced by _cache_get_oldest(), _free_cache_entry(), _non_thread_safe_cache_ref_count_entry(), _non_thread_safe_cache_remove(), dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_cache_get_entry_from_data(), dt_dev_pixelpipe_cache_get_existing(), dt_dev_pixelpipe_cache_rdlock_entry(), and dt_dev_pixelpipe_cache_wrlock_entry().
|
static |
References _non_thread_safe_pixel_pipe_cache_remove_lru(), dt_pixel_cache_entry_t::age, dt_pixel_cache_entry_t::auto_destroy, dt_dev_pixelpipe_cache_t::current_memory, dt_pixel_cache_entry_t::data, dt_pixel_cache_entry_t::dsc, dt_alloc_align, dt_control_log(), DT_DEBUG_PIPE, dt_get_available_mem(), dt_get_singlebuffer_mem(), dt_print(), dt_pthread_rwlock_init, dt_dev_pixelpipe_cache_t::entries, error(), FALSE, dt_pixel_cache_entry_t::hash, dt_pixel_cache_entry_t::id, dt_pixel_cache_entry_t::lock, MAX, dt_dev_pixelpipe_cache_t::max_memory, MIN, name, dt_pixel_cache_entry_t::name, dt_pixel_cache_entry_t::refcount, size, and dt_pixel_cache_entry_t::size.
Referenced by dt_dev_pixelpipe_cache_get().