1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright 2021 Google LLC 3bf215546Sopenharmony_ci * SPDX-License-Identifier: MIT 4bf215546Sopenharmony_ci */ 5bf215546Sopenharmony_ci 6bf215546Sopenharmony_ci#ifndef VN_RENDERER_INTERNAL_H 7bf215546Sopenharmony_ci#define VN_RENDERER_INTERNAL_H 8bf215546Sopenharmony_ci 9bf215546Sopenharmony_ci#include "vn_renderer.h" 10bf215546Sopenharmony_ci 11bf215546Sopenharmony_citypedef void (*vn_renderer_shmem_cache_destroy_func)( 12bf215546Sopenharmony_ci struct vn_renderer *renderer, struct vn_renderer_shmem *shmem); 13bf215546Sopenharmony_ci 14bf215546Sopenharmony_cistruct vn_renderer_shmem_cache { 15bf215546Sopenharmony_ci bool initialized; 16bf215546Sopenharmony_ci 17bf215546Sopenharmony_ci struct vn_renderer *renderer; 18bf215546Sopenharmony_ci vn_renderer_shmem_cache_destroy_func destroy_func; 19bf215546Sopenharmony_ci 20bf215546Sopenharmony_ci simple_mtx_t mutex; 21bf215546Sopenharmony_ci 22bf215546Sopenharmony_ci /* cache shmems up to 2^26 in size (see choose_bucket) */ 23bf215546Sopenharmony_ci struct vn_renderer_shmem_bucket { 24bf215546Sopenharmony_ci struct list_head shmems; 25bf215546Sopenharmony_ci } buckets[27]; 26bf215546Sopenharmony_ci 27bf215546Sopenharmony_ci /* which buckets have shmems */ 28bf215546Sopenharmony_ci uint32_t bucket_mask; 29bf215546Sopenharmony_ci 30bf215546Sopenharmony_ci struct { 31bf215546Sopenharmony_ci uint32_t cache_skip_count; 32bf215546Sopenharmony_ci uint32_t cache_hit_count; 33bf215546Sopenharmony_ci uint32_t cache_miss_count; 34bf215546Sopenharmony_ci } debug; 35bf215546Sopenharmony_ci}; 36bf215546Sopenharmony_ci 37bf215546Sopenharmony_civoid 38bf215546Sopenharmony_civn_renderer_shmem_cache_init( 39bf215546Sopenharmony_ci struct vn_renderer_shmem_cache *cache, 40bf215546Sopenharmony_ci struct vn_renderer *renderer, 41bf215546Sopenharmony_ci vn_renderer_shmem_cache_destroy_func destroy_func); 42bf215546Sopenharmony_ci 43bf215546Sopenharmony_civoid 44bf215546Sopenharmony_civn_renderer_shmem_cache_fini(struct vn_renderer_shmem_cache *cache); 45bf215546Sopenharmony_ci 46bf215546Sopenharmony_cibool 47bf215546Sopenharmony_civn_renderer_shmem_cache_add(struct vn_renderer_shmem_cache *cache, 48bf215546Sopenharmony_ci struct vn_renderer_shmem *shmem); 49bf215546Sopenharmony_ci 50bf215546Sopenharmony_cistruct vn_renderer_shmem * 51bf215546Sopenharmony_civn_renderer_shmem_cache_get(struct vn_renderer_shmem_cache *cache, 52bf215546Sopenharmony_ci size_t size); 53bf215546Sopenharmony_ci 54bf215546Sopenharmony_civoid 55bf215546Sopenharmony_civn_renderer_shmem_cache_debug_dump(struct vn_renderer_shmem_cache *cache); 56bf215546Sopenharmony_ci 57bf215546Sopenharmony_ci#endif /* VN_RENDERER_INTERNAL_H */ 58