/* * Copyright © 2022 Collabora, Ltd. * * Based on Fossilize DB: * Copyright © 2020 Valve Corporation * * SPDX-License-Identifier: MIT */ #ifndef MESA_CACHE_DB_H #define MESA_CACHE_DB_H #include #include #include #include "detect_os.h" #include "simple_mtx.h" #ifdef __cplusplus extern "C" { #endif struct mesa_cache_db_file { FILE *file; char *path; off_t offset; uint64_t uuid; }; struct mesa_cache_db { struct hash_table_u64 *index_db; struct mesa_cache_db_file cache; struct mesa_cache_db_file index; uint64_t max_cache_size; simple_mtx_t flock_mtx; void *mem_ctx; uint64_t uuid; bool alive; }; #if DETECT_OS_WINDOWS == 0 bool mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path); void mesa_cache_db_close(struct mesa_cache_db *db); void mesa_cache_db_set_size_limit(struct mesa_cache_db *db, uint64_t max_cache_size); unsigned int mesa_cache_db_file_entry_size(void); void * mesa_cache_db_read_entry(struct mesa_cache_db *db, const uint8_t *cache_key_160bit, size_t *size); bool mesa_cache_db_entry_write(struct mesa_cache_db *db, const uint8_t *cache_key_160bit, const void *blob, size_t blob_size); bool mesa_cache_db_entry_remove(struct mesa_cache_db *db, const uint8_t *cache_key_160bit); bool mesa_db_wipe_path(const char *cache_path); bool mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size); double mesa_cache_db_eviction_score(struct mesa_cache_db *db); #else static inline bool mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path) { return false; } static inline void mesa_cache_db_close(struct mesa_cache_db *db) { } static inline void mesa_cache_db_set_size_limit(struct mesa_cache_db *db, uint64_t max_cache_size) { } static inline unsigned int mesa_cache_db_file_entry_size(void) { return 0; } static inline void * mesa_cache_db_read_entry(struct mesa_cache_db *db, const uint8_t *cache_key_160bit, size_t *size) { return NULL; } static inline bool mesa_cache_db_entry_write(struct mesa_cache_db *db, const uint8_t *cache_key_160bit, const void *blob, size_t blob_size) { return false; } static inline bool mesa_cache_db_entry_remove(struct mesa_cache_db *db, const uint8_t *cache_key_160bit) { return false; } static inline bool mesa_db_wipe_path(const char *cache_path) { return false; } static inline bool mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size) { return false; } static inline double mesa_cache_db_eviction_score(struct mesa_cache_db *db) { return 0; } #endif /* DETECT_OS_WINDOWS */ #ifdef __cplusplus } #endif #endif /* MESA_CACHE_DB_H */