Lines Matching refs:cache

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