@@ -44,24 +44,27 @@ pub struct ModFileCacher {
4444mut :
4545 cache map [string ]ModFileAndFolder
4646 // folder_files caches os.ls(key)
47- folder_files map [string ][]string
47+ folder_files map [string ][]string
48+ hits int
49+ misses int
50+ get_files_hits int
51+ get_files_misses int
4852}
4953
5054pub fn new_mod_file_cacher () & ModFileCacher {
5155 return & ModFileCacher{}
5256}
5357
58+ @[if debug_mod_file_cacher ? ]
5459pub fn (mcache &ModFileCacher) debug () {
55- $if debug {
56- eprintln ('ModFileCacher DUMP:' )
57- eprintln (' ModFileCacher.cache:' )
58- for k, v in mcache.cache {
59- eprintln (' K: ${k :- 32 s } | V: "${v .vmod_file :32 s }" | "${v .vmod_folder :32 s }" ' )
60- }
61- eprintln (' ModFileCacher.folder_files:' )
62- for k, v in mcache.folder_files {
63- eprintln (' K: ${k :- 32 s } | V: ${v .str ()}' )
64- }
60+ eprintln ('ModFileCacher hits: ${mcache .hits }, misses: ${mcache .misses } | get_files_hits: ${mcache .get_files_hits } | get_files_misses: ${mcache .get_files_misses }' )
61+ eprintln (' ModFileCacher.cache.len: ${mcache .cache .len }' )
62+ for k, v in mcache.cache {
63+ eprintln (' K: ${k :- 42 s } | v.mod: ${v .vmod_file :- 42 s } | folder: `${v .vmod_folder }`' )
64+ }
65+ eprintln (' ModFileCacher.folder_files:' )
66+ for k, v in mcache.folder_files {
67+ eprintln (' K: ${k :- 42 s } | folder_files: ${v }' )
6568 }
6669}
6770
@@ -72,12 +75,14 @@ pub fn (mut mcache ModFileCacher) get_by_file(vfile string) ModFileAndFolder {
7275pub fn (mut mcache ModFileCacher) get_by_folder (vfolder string ) ModFileAndFolder {
7376 mfolder := os.real_path (vfolder)
7477 if mfolder in mcache.cache {
78+ mcache.hits++
7579 return mcache.cache[mfolder]
7680 }
7781 traversed_folders , res := mcache.traverse (mfolder)
7882 for tfolder in traversed_folders {
7983 mcache.add (tfolder, res)
8084 }
85+ mcache.misses++
8186 return res
8287}
8388
@@ -97,6 +102,7 @@ fn (mut mcache ModFileCacher) traverse(mfolder string) ([]string, ModFileAndFold
97102 break
98103 }
99104 if cfolder in mcache.cache {
105+ mcache.hits++
100106 res := mcache.cache[cfolder]
101107 if res.vmod_file.len == 0 {
102108 mcache.mark_folders_as_vmod_free (folders_so_far)
@@ -154,8 +160,10 @@ fn (mcache &ModFileCacher) check_for_stop(files []string) bool {
154160
155161fn (mut mcache ModFileCacher) get_files (cfolder string ) []string {
156162 if cfolder in mcache.folder_files {
163+ mcache.get_files_hits++
157164 return mcache.folder_files[cfolder]
158165 }
166+ mcache.get_files_misses++
159167 mut files := []string {}
160168 if os.exists (cfolder) && os.is_dir (cfolder) {
161169 if listing := os.ls (cfolder) {
0 commit comments