/* * Copyright 2021 Google LLC * SPDX-License-Identifier: MIT */ #ifndef VN_RENDERER_INTERNAL_H #define VN_RENDERER_INTERNAL_H #include "vn_renderer.h" typedef void (*vn_renderer_shmem_cache_destroy_func)( struct vn_renderer *renderer, struct vn_renderer_shmem *shmem); struct vn_renderer_shmem_cache { bool initialized; struct vn_renderer *renderer; vn_renderer_shmem_cache_destroy_func destroy_func; simple_mtx_t mutex; /* cache shmems up to 2^26 in size (see choose_bucket) */ struct vn_renderer_shmem_bucket { struct list_head shmems; } buckets[27]; /* which buckets have shmems */ uint32_t bucket_mask; struct { uint32_t cache_skip_count; uint32_t cache_hit_count; uint32_t cache_miss_count; } debug; }; void vn_renderer_shmem_cache_init( struct vn_renderer_shmem_cache *cache, struct vn_renderer *renderer, vn_renderer_shmem_cache_destroy_func destroy_func); void vn_renderer_shmem_cache_fini(struct vn_renderer_shmem_cache *cache); bool vn_renderer_shmem_cache_add(struct vn_renderer_shmem_cache *cache, struct vn_renderer_shmem *shmem); struct vn_renderer_shmem * vn_renderer_shmem_cache_get(struct vn_renderer_shmem_cache *cache, size_t size); void vn_renderer_shmem_cache_debug_dump(struct vn_renderer_shmem_cache *cache); #endif /* VN_RENDERER_INTERNAL_H */