Lines Matching full:cache
12 vn_renderer_shmem_cache_init(struct vn_renderer_shmem_cache *cache, in vn_renderer_shmem_cache_init() argument
16 /* cache->bucket_mask is 32-bit and u_bit_scan is used */ in vn_renderer_shmem_cache_init()
17 static_assert(ARRAY_SIZE(cache->buckets) <= 32, ""); in vn_renderer_shmem_cache_init()
19 cache->renderer = renderer; in vn_renderer_shmem_cache_init()
20 cache->destroy_func = destroy_func; in vn_renderer_shmem_cache_init()
22 simple_mtx_init(&cache->mutex, mtx_plain); in vn_renderer_shmem_cache_init()
24 for (uint32_t i = 0; i < ARRAY_SIZE(cache->buckets); i++) { in vn_renderer_shmem_cache_init()
25 struct vn_renderer_shmem_bucket *bucket = &cache->buckets[i]; in vn_renderer_shmem_cache_init()
29 cache->initialized = true; in vn_renderer_shmem_cache_init()
33 vn_renderer_shmem_cache_fini(struct vn_renderer_shmem_cache *cache) in vn_renderer_shmem_cache_fini() argument
35 if (!cache->initialized) in vn_renderer_shmem_cache_fini()
38 while (cache->bucket_mask) { in vn_renderer_shmem_cache_fini()
39 const int idx = u_bit_scan(&cache->bucket_mask); in vn_renderer_shmem_cache_fini()
40 struct vn_renderer_shmem_bucket *bucket = &cache->buckets[idx]; in vn_renderer_shmem_cache_fini()
44 cache->destroy_func(cache->renderer, shmem); in vn_renderer_shmem_cache_fini()
47 simple_mtx_destroy(&cache->mutex); in vn_renderer_shmem_cache_fini()
51 choose_bucket(struct vn_renderer_shmem_cache *cache, in choose_bucket() argument
60 if (unlikely(idx >= ARRAY_SIZE(cache->buckets))) in choose_bucket()
64 return &cache->buckets[idx]; in choose_bucket()
69 struct vn_renderer_shmem_cache *cache, int64_t now) in vn_renderer_shmem_cache_remove_expired_locked() argument
71 uint32_t bucket_mask = cache->bucket_mask; in vn_renderer_shmem_cache_remove_expired_locked()
74 struct vn_renderer_shmem_bucket *bucket = &cache->buckets[idx]; in vn_renderer_shmem_cache_remove_expired_locked()
88 cache->destroy_func(cache->renderer, shmem); in vn_renderer_shmem_cache_remove_expired_locked()
94 vn_renderer_shmem_cache_add(struct vn_renderer_shmem_cache *cache, in vn_renderer_shmem_cache_add() argument
101 choose_bucket(cache, shmem->mmap_size, &idx); in vn_renderer_shmem_cache_add()
108 simple_mtx_lock(&cache->mutex); in vn_renderer_shmem_cache_add()
110 vn_renderer_shmem_cache_remove_expired_locked(cache, now); in vn_renderer_shmem_cache_add()
113 cache->bucket_mask |= 1 << idx; in vn_renderer_shmem_cache_add()
115 simple_mtx_unlock(&cache->mutex); in vn_renderer_shmem_cache_add()
121 vn_renderer_shmem_cache_get(struct vn_renderer_shmem_cache *cache, in vn_renderer_shmem_cache_get() argument
125 struct vn_renderer_shmem_bucket *bucket = choose_bucket(cache, size, &idx); in vn_renderer_shmem_cache_get()
127 VN_TRACE_SCOPE("shmem cache skip"); in vn_renderer_shmem_cache_get()
128 simple_mtx_lock(&cache->mutex); in vn_renderer_shmem_cache_get()
129 cache->debug.cache_skip_count++; in vn_renderer_shmem_cache_get()
130 simple_mtx_unlock(&cache->mutex); in vn_renderer_shmem_cache_get()
136 simple_mtx_lock(&cache->mutex); in vn_renderer_shmem_cache_get()
137 if (cache->bucket_mask & (1 << idx)) { in vn_renderer_shmem_cache_get()
144 cache->bucket_mask &= ~(1 << idx); in vn_renderer_shmem_cache_get()
146 cache->debug.cache_hit_count++; in vn_renderer_shmem_cache_get()
148 VN_TRACE_SCOPE("shmem cache miss"); in vn_renderer_shmem_cache_get()
149 cache->debug.cache_miss_count++; in vn_renderer_shmem_cache_get()
151 simple_mtx_unlock(&cache->mutex); in vn_renderer_shmem_cache_get()
158 vn_renderer_shmem_cache_debug_dump(struct vn_renderer_shmem_cache *cache) in vn_renderer_shmem_cache_debug_dump() argument
160 simple_mtx_lock(&cache->mutex); in vn_renderer_shmem_cache_debug_dump()
162 vn_log(NULL, "dumping shmem cache"); in vn_renderer_shmem_cache_debug_dump()
163 vn_log(NULL, " cache skip: %d", cache->debug.cache_skip_count); in vn_renderer_shmem_cache_debug_dump()
164 vn_log(NULL, " cache hit: %d", cache->debug.cache_hit_count); in vn_renderer_shmem_cache_debug_dump()
165 vn_log(NULL, " cache miss: %d", cache->debug.cache_miss_count); in vn_renderer_shmem_cache_debug_dump()
167 uint32_t bucket_mask = cache->bucket_mask; in vn_renderer_shmem_cache_debug_dump()
170 const struct vn_renderer_shmem_bucket *bucket = &cache->buckets[idx]; in vn_renderer_shmem_cache_debug_dump()
179 simple_mtx_unlock(&cache->mutex); in vn_renderer_shmem_cache_debug_dump()