1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2022 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Based on Fossilize DB:
5*61046927SAndroid Build Coastguard Worker * Copyright © 2020 Valve Corporation
6*61046927SAndroid Build Coastguard Worker *
7*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
8*61046927SAndroid Build Coastguard Worker */
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard Worker #ifndef MESA_CACHE_DB_H
11*61046927SAndroid Build Coastguard Worker #define MESA_CACHE_DB_H
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
14*61046927SAndroid Build Coastguard Worker #include <stdint.h>
15*61046927SAndroid Build Coastguard Worker #include <stdio.h>
16*61046927SAndroid Build Coastguard Worker
17*61046927SAndroid Build Coastguard Worker #include "detect_os.h"
18*61046927SAndroid Build Coastguard Worker #include "simple_mtx.h"
19*61046927SAndroid Build Coastguard Worker
20*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
21*61046927SAndroid Build Coastguard Worker extern "C" {
22*61046927SAndroid Build Coastguard Worker #endif
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker struct mesa_cache_db_file {
25*61046927SAndroid Build Coastguard Worker FILE *file;
26*61046927SAndroid Build Coastguard Worker char *path;
27*61046927SAndroid Build Coastguard Worker off_t offset;
28*61046927SAndroid Build Coastguard Worker uint64_t uuid;
29*61046927SAndroid Build Coastguard Worker };
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker struct mesa_cache_db {
32*61046927SAndroid Build Coastguard Worker struct hash_table_u64 *index_db;
33*61046927SAndroid Build Coastguard Worker struct mesa_cache_db_file cache;
34*61046927SAndroid Build Coastguard Worker struct mesa_cache_db_file index;
35*61046927SAndroid Build Coastguard Worker uint64_t max_cache_size;
36*61046927SAndroid Build Coastguard Worker simple_mtx_t flock_mtx;
37*61046927SAndroid Build Coastguard Worker void *mem_ctx;
38*61046927SAndroid Build Coastguard Worker uint64_t uuid;
39*61046927SAndroid Build Coastguard Worker bool alive;
40*61046927SAndroid Build Coastguard Worker };
41*61046927SAndroid Build Coastguard Worker
42*61046927SAndroid Build Coastguard Worker #if DETECT_OS_WINDOWS == 0
43*61046927SAndroid Build Coastguard Worker bool
44*61046927SAndroid Build Coastguard Worker mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path);
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker void
47*61046927SAndroid Build Coastguard Worker mesa_cache_db_close(struct mesa_cache_db *db);
48*61046927SAndroid Build Coastguard Worker
49*61046927SAndroid Build Coastguard Worker void
50*61046927SAndroid Build Coastguard Worker mesa_cache_db_set_size_limit(struct mesa_cache_db *db,
51*61046927SAndroid Build Coastguard Worker uint64_t max_cache_size);
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker unsigned int
54*61046927SAndroid Build Coastguard Worker mesa_cache_db_file_entry_size(void);
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker void *
57*61046927SAndroid Build Coastguard Worker mesa_cache_db_read_entry(struct mesa_cache_db *db,
58*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit,
59*61046927SAndroid Build Coastguard Worker size_t *size);
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker bool
62*61046927SAndroid Build Coastguard Worker mesa_cache_db_entry_write(struct mesa_cache_db *db,
63*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit,
64*61046927SAndroid Build Coastguard Worker const void *blob, size_t blob_size);
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker bool
67*61046927SAndroid Build Coastguard Worker mesa_cache_db_entry_remove(struct mesa_cache_db *db,
68*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit);
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker bool
71*61046927SAndroid Build Coastguard Worker mesa_db_wipe_path(const char *cache_path);
72*61046927SAndroid Build Coastguard Worker
73*61046927SAndroid Build Coastguard Worker bool
74*61046927SAndroid Build Coastguard Worker mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size);
75*61046927SAndroid Build Coastguard Worker
76*61046927SAndroid Build Coastguard Worker double
77*61046927SAndroid Build Coastguard Worker mesa_cache_db_eviction_score(struct mesa_cache_db *db);
78*61046927SAndroid Build Coastguard Worker #else
79*61046927SAndroid Build Coastguard Worker static inline bool
mesa_cache_db_open(struct mesa_cache_db * db,const char * cache_path)80*61046927SAndroid Build Coastguard Worker mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path)
81*61046927SAndroid Build Coastguard Worker {
82*61046927SAndroid Build Coastguard Worker return false;
83*61046927SAndroid Build Coastguard Worker }
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard Worker static inline void
mesa_cache_db_close(struct mesa_cache_db * db)86*61046927SAndroid Build Coastguard Worker mesa_cache_db_close(struct mesa_cache_db *db)
87*61046927SAndroid Build Coastguard Worker {
88*61046927SAndroid Build Coastguard Worker }
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker static inline void
mesa_cache_db_set_size_limit(struct mesa_cache_db * db,uint64_t max_cache_size)91*61046927SAndroid Build Coastguard Worker mesa_cache_db_set_size_limit(struct mesa_cache_db *db,
92*61046927SAndroid Build Coastguard Worker uint64_t max_cache_size)
93*61046927SAndroid Build Coastguard Worker {
94*61046927SAndroid Build Coastguard Worker }
95*61046927SAndroid Build Coastguard Worker
96*61046927SAndroid Build Coastguard Worker static inline unsigned int
mesa_cache_db_file_entry_size(void)97*61046927SAndroid Build Coastguard Worker mesa_cache_db_file_entry_size(void)
98*61046927SAndroid Build Coastguard Worker {
99*61046927SAndroid Build Coastguard Worker return 0;
100*61046927SAndroid Build Coastguard Worker }
101*61046927SAndroid Build Coastguard Worker
102*61046927SAndroid Build Coastguard Worker static inline void *
mesa_cache_db_read_entry(struct mesa_cache_db * db,const uint8_t * cache_key_160bit,size_t * size)103*61046927SAndroid Build Coastguard Worker mesa_cache_db_read_entry(struct mesa_cache_db *db,
104*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit,
105*61046927SAndroid Build Coastguard Worker size_t *size)
106*61046927SAndroid Build Coastguard Worker {
107*61046927SAndroid Build Coastguard Worker return NULL;
108*61046927SAndroid Build Coastguard Worker }
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker 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)111*61046927SAndroid Build Coastguard Worker mesa_cache_db_entry_write(struct mesa_cache_db *db,
112*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit,
113*61046927SAndroid Build Coastguard Worker const void *blob, size_t blob_size)
114*61046927SAndroid Build Coastguard Worker {
115*61046927SAndroid Build Coastguard Worker return false;
116*61046927SAndroid Build Coastguard Worker }
117*61046927SAndroid Build Coastguard Worker
118*61046927SAndroid Build Coastguard Worker static inline bool
mesa_cache_db_entry_remove(struct mesa_cache_db * db,const uint8_t * cache_key_160bit)119*61046927SAndroid Build Coastguard Worker mesa_cache_db_entry_remove(struct mesa_cache_db *db,
120*61046927SAndroid Build Coastguard Worker const uint8_t *cache_key_160bit)
121*61046927SAndroid Build Coastguard Worker {
122*61046927SAndroid Build Coastguard Worker return false;
123*61046927SAndroid Build Coastguard Worker }
124*61046927SAndroid Build Coastguard Worker
125*61046927SAndroid Build Coastguard Worker static inline bool
mesa_db_wipe_path(const char * cache_path)126*61046927SAndroid Build Coastguard Worker mesa_db_wipe_path(const char *cache_path)
127*61046927SAndroid Build Coastguard Worker {
128*61046927SAndroid Build Coastguard Worker return false;
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker
131*61046927SAndroid Build Coastguard Worker static inline bool
mesa_cache_db_has_space(struct mesa_cache_db * db,size_t blob_size)132*61046927SAndroid Build Coastguard Worker mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size)
133*61046927SAndroid Build Coastguard Worker {
134*61046927SAndroid Build Coastguard Worker return false;
135*61046927SAndroid Build Coastguard Worker }
136*61046927SAndroid Build Coastguard Worker
137*61046927SAndroid Build Coastguard Worker static inline double
mesa_cache_db_eviction_score(struct mesa_cache_db * db)138*61046927SAndroid Build Coastguard Worker mesa_cache_db_eviction_score(struct mesa_cache_db *db)
139*61046927SAndroid Build Coastguard Worker {
140*61046927SAndroid Build Coastguard Worker return 0;
141*61046927SAndroid Build Coastguard Worker }
142*61046927SAndroid Build Coastguard Worker #endif /* DETECT_OS_WINDOWS */
143*61046927SAndroid Build Coastguard Worker
144*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
145*61046927SAndroid Build Coastguard Worker }
146*61046927SAndroid Build Coastguard Worker #endif
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard Worker #endif /* MESA_CACHE_DB_H */
149