Lines Matching refs:cache

26 static void cache_drop_internal_no_lock(lv_cache_t * cache, const void * key, void * user_data);
27 static bool cache_evict_one_internal_no_lock(lv_cache_t * cache, void * user_data);
28 static lv_cache_entry_t * cache_add_internal_no_lock(lv_cache_t * cache, const void * key, void * u…
50 lv_cache_t * cache = cache_class->alloc_cb(); in lv_cache_create() local
51 LV_ASSERT_MALLOC(cache); in lv_cache_create()
53 cache->clz = cache_class; in lv_cache_create()
54 cache->node_size = node_size; in lv_cache_create()
55 cache->max_size = max_size; in lv_cache_create()
56 cache->size = 0; in lv_cache_create()
57 cache->ops = ops; in lv_cache_create()
59 if(cache->clz->init_cb(cache) == false) { in lv_cache_create()
61 lv_free(cache); in lv_cache_create()
65 lv_mutex_init(&cache->lock); in lv_cache_create()
67 return cache; in lv_cache_create()
70 void lv_cache_destroy(lv_cache_t * cache, void * user_data) in lv_cache_destroy() argument
72 LV_ASSERT_NULL(cache); in lv_cache_destroy()
74 lv_mutex_lock(&cache->lock); in lv_cache_destroy()
75 cache->clz->destroy_cb(cache, user_data); in lv_cache_destroy()
76 lv_mutex_unlock(&cache->lock); in lv_cache_destroy()
77 lv_mutex_delete(&cache->lock); in lv_cache_destroy()
78 lv_free(cache); in lv_cache_destroy()
81 lv_cache_entry_t * lv_cache_acquire(lv_cache_t * cache, const void * key, void * user_data) in lv_cache_acquire() argument
83 LV_ASSERT_NULL(cache); in lv_cache_acquire()
88 lv_mutex_lock(&cache->lock); in lv_cache_acquire()
90 if(cache->size == 0) { in lv_cache_acquire()
91 lv_mutex_unlock(&cache->lock); in lv_cache_acquire()
97 lv_cache_entry_t * entry = cache->clz->get_cb(cache, key, user_data); in lv_cache_acquire()
101 lv_mutex_unlock(&cache->lock); in lv_cache_acquire()
106 void lv_cache_release(lv_cache_t * cache, lv_cache_entry_t * entry, void * user_data) in lv_cache_release() argument
112 lv_mutex_lock(&cache->lock); in lv_cache_release()
116 cache->ops.free_cb(lv_cache_entry_get_data(entry), user_data); in lv_cache_release()
119 lv_mutex_unlock(&cache->lock); in lv_cache_release()
123 lv_cache_entry_t * lv_cache_add(lv_cache_t * cache, const void * key, void * user_data) in lv_cache_add() argument
125 LV_ASSERT_NULL(cache); in lv_cache_add()
130 lv_mutex_lock(&cache->lock); in lv_cache_add()
131 if(cache->max_size == 0) { in lv_cache_add()
132 lv_mutex_unlock(&cache->lock); in lv_cache_add()
138 lv_cache_entry_t * entry = cache_add_internal_no_lock(cache, key, user_data); in lv_cache_add()
142 lv_mutex_unlock(&cache->lock); in lv_cache_add()
147 lv_cache_entry_t * lv_cache_acquire_or_create(lv_cache_t * cache, const void * key, void * user_dat… in lv_cache_acquire_or_create() argument
149 LV_ASSERT_NULL(cache); in lv_cache_acquire_or_create()
154 lv_mutex_lock(&cache->lock); in lv_cache_acquire_or_create()
157 if(cache->size != 0) { in lv_cache_acquire_or_create()
158 entry = cache->clz->get_cb(cache, key, user_data); in lv_cache_acquire_or_create()
161 lv_mutex_unlock(&cache->lock); in lv_cache_acquire_or_create()
168 if(cache->max_size == 0) { in lv_cache_acquire_or_create()
169 lv_mutex_unlock(&cache->lock); in lv_cache_acquire_or_create()
175 entry = cache_add_internal_no_lock(cache, key, user_data); in lv_cache_acquire_or_create()
177 lv_mutex_unlock(&cache->lock); in lv_cache_acquire_or_create()
182 bool create_res = cache->ops.create_cb(lv_cache_entry_get_data(entry), user_data); in lv_cache_acquire_or_create()
184 cache->clz->remove_cb(cache, entry, user_data); in lv_cache_acquire_or_create()
191 lv_mutex_unlock(&cache->lock); in lv_cache_acquire_or_create()
196 void lv_cache_reserve(lv_cache_t * cache, uint32_t reserved_size, void * user_data) in lv_cache_reserve() argument
198 LV_ASSERT_NULL(cache); in lv_cache_reserve()
202 …for(lv_cache_reserve_cond_res_t reserve_cond_res = cache->clz->reserve_cond_cb(cache, NULL, reserv… in lv_cache_reserve()
204 reserve_cond_res = cache->clz->reserve_cond_cb(cache, NULL, reserved_size, user_data)) in lv_cache_reserve()
205 cache_evict_one_internal_no_lock(cache, user_data); in lv_cache_reserve()
209 void lv_cache_drop(lv_cache_t * cache, const void * key, void * user_data) in lv_cache_drop() argument
211 LV_ASSERT_NULL(cache); in lv_cache_drop()
216 lv_mutex_lock(&cache->lock); in lv_cache_drop()
217 cache_drop_internal_no_lock(cache, key, user_data); in lv_cache_drop()
218 lv_mutex_unlock(&cache->lock); in lv_cache_drop()
222 bool lv_cache_evict_one(lv_cache_t * cache, void * user_data) in lv_cache_evict_one() argument
224 LV_ASSERT_NULL(cache); in lv_cache_evict_one()
228 lv_mutex_lock(&cache->lock); in lv_cache_evict_one()
229 bool res = cache_evict_one_internal_no_lock(cache, user_data); in lv_cache_evict_one()
230 lv_mutex_unlock(&cache->lock); in lv_cache_evict_one()
235 void lv_cache_drop_all(lv_cache_t * cache, void * user_data) in lv_cache_drop_all() argument
237 LV_ASSERT_NULL(cache); in lv_cache_drop_all()
241 lv_mutex_lock(&cache->lock); in lv_cache_drop_all()
242 cache->clz->drop_all_cb(cache, user_data); in lv_cache_drop_all()
243 lv_mutex_unlock(&cache->lock); in lv_cache_drop_all()
248 void lv_cache_set_max_size(lv_cache_t * cache, size_t max_size, void * user_data) in lv_cache_set_max_size() argument
251 cache->max_size = max_size; in lv_cache_set_max_size()
253 size_t lv_cache_get_max_size(lv_cache_t * cache, void * user_data) in lv_cache_get_max_size() argument
256 return cache->max_size; in lv_cache_get_max_size()
258 size_t lv_cache_get_size(lv_cache_t * cache, void * user_data) in lv_cache_get_size() argument
261 return cache->size; in lv_cache_get_size()
263 size_t lv_cache_get_free_size(lv_cache_t * cache, void * user_data) in lv_cache_get_free_size() argument
266 return cache->max_size - cache->size; in lv_cache_get_free_size()
268 bool lv_cache_is_enabled(lv_cache_t * cache) in lv_cache_is_enabled() argument
270 return cache->max_size > 0; in lv_cache_is_enabled()
272 void lv_cache_set_compare_cb(lv_cache_t * cache, lv_cache_compare_cb_t compare_cb, void * user_data) in lv_cache_set_compare_cb() argument
275 cache->ops.compare_cb = compare_cb; in lv_cache_set_compare_cb()
277 void lv_cache_set_create_cb(lv_cache_t * cache, lv_cache_create_cb_t alloc_cb, void * user_data) in lv_cache_set_create_cb() argument
280 cache->ops.create_cb = alloc_cb; in lv_cache_set_create_cb()
282 void lv_cache_set_free_cb(lv_cache_t * cache, lv_cache_free_cb_t free_cb, void * user_data) in lv_cache_set_free_cb() argument
285 cache->ops.free_cb = free_cb; in lv_cache_set_free_cb()
287 void lv_cache_set_name(lv_cache_t * cache, const char * name) in lv_cache_set_name() argument
289 if(cache == NULL) return; in lv_cache_set_name()
290 cache->name = name; in lv_cache_set_name()
292 const char * lv_cache_get_name(lv_cache_t * cache) in lv_cache_get_name() argument
294 return cache->name; in lv_cache_get_name()
297 lv_iter_t * lv_cache_iter_create(lv_cache_t * cache) in lv_cache_iter_create() argument
299 LV_ASSERT_NULL(cache); in lv_cache_iter_create()
300 if(cache == NULL || cache->clz->iter_create_cb == NULL) return NULL; in lv_cache_iter_create()
301 return cache->clz->iter_create_cb(cache); in lv_cache_iter_create()
308 static void cache_drop_internal_no_lock(lv_cache_t * cache, const void * key, void * user_data) in cache_drop_internal_no_lock() argument
310 lv_cache_entry_t * entry = cache->clz->get_cb(cache, key, user_data); in cache_drop_internal_no_lock()
316 cache->clz->remove_cb(cache, entry, user_data); in cache_drop_internal_no_lock()
317 cache->ops.free_cb(lv_cache_entry_get_data(entry), user_data); in cache_drop_internal_no_lock()
322 cache->clz->remove_cb(cache, entry, user_data); in cache_drop_internal_no_lock()
326 static bool cache_evict_one_internal_no_lock(lv_cache_t * cache, void * user_data) in cache_evict_one_internal_no_lock() argument
328 lv_cache_entry_t * victim = cache->clz->get_victim_cb(cache, user_data); in cache_evict_one_internal_no_lock()
335 cache->clz->remove_cb(cache, victim, user_data); in cache_evict_one_internal_no_lock()
336 cache->ops.free_cb(lv_cache_entry_get_data(victim), user_data); in cache_evict_one_internal_no_lock()
341 static lv_cache_entry_t * cache_add_internal_no_lock(lv_cache_t * cache, const void * key, void * u… in cache_add_internal_no_lock() argument
343 …lv_cache_reserve_cond_res_t reserve_cond_res = cache->clz->reserve_cond_cb(cache, key, 0, user_dat… in cache_add_internal_no_lock()
345 … LV_LOG_ERROR("data %p is too large that exceeds max size (%" LV_PRIu32 ")", key, cache->max_size); in cache_add_internal_no_lock()
350 reserve_cond_res = cache->clz->reserve_cond_cb(cache, key, 0, user_data)) in cache_add_internal_no_lock()
351 if(cache_evict_one_internal_no_lock(cache, user_data) == false) in cache_add_internal_no_lock()
354 lv_cache_entry_t * entry = cache->clz->add_cb(cache, key, user_data); in cache_add_internal_no_lock()