@@ -8,6 +8,10 @@ static int initialized;
88static volatile long enabled ;
99static struct hashmap map ;
1010static CRITICAL_SECTION mutex ;
11+ static unsigned int lstat_requests ;
12+ static unsigned int opendir_requests ;
13+ static unsigned int fscache_requests ;
14+ static unsigned int fscache_misses ;
1115static struct trace_key trace_fscache = TRACE_KEY_INIT (FSCACHE );
1216
1317/*
@@ -262,6 +266,8 @@ static void fscache_clear(void)
262266{
263267 hashmap_free (& map , 1 );
264268 hashmap_init (& map , (hashmap_cmp_fn )fsentry_cmp , NULL , 0 );
269+ lstat_requests = opendir_requests = 0 ;
270+ fscache_misses = fscache_requests = 0 ;
265271}
266272
267273/*
@@ -308,6 +314,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
308314 int dir_not_found ;
309315
310316 EnterCriticalSection (& mutex );
317+ fscache_requests ++ ;
311318 /* check if entry is in cache */
312319 fse = fscache_get_wait (key );
313320 if (fse ) {
@@ -370,6 +377,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
370377 }
371378
372379 /* add directory listing to the cache */
380+ fscache_misses ++ ;
373381 fscache_add (fse );
374382
375383 /* lookup file entry if requested (fse already points to directory) */
@@ -407,6 +415,8 @@ int fscache_enable(int enable)
407415 return 0 ;
408416
409417 InitializeCriticalSection (& mutex );
418+ lstat_requests = opendir_requests = 0 ;
419+ fscache_misses = fscache_requests = 0 ;
410420 hashmap_init (& map , (hashmap_cmp_fn ) fsentry_cmp , NULL , 0 );
411421 initialized = 1 ;
412422 }
@@ -423,6 +433,10 @@ int fscache_enable(int enable)
423433 opendir = dirent_opendir ;
424434 lstat = mingw_lstat ;
425435 EnterCriticalSection (& mutex );
436+ trace_printf_key (& trace_fscache , "fscache: lstat %u, opendir %u, "
437+ "total requests/misses %u/%u\n" ,
438+ lstat_requests , opendir_requests ,
439+ fscache_requests , fscache_misses );
426440 fscache_clear ();
427441 LeaveCriticalSection (& mutex );
428442 }
@@ -454,6 +468,7 @@ int fscache_lstat(const char *filename, struct stat *st)
454468 if (!fscache_enabled (filename ))
455469 return mingw_lstat (filename , st );
456470
471+ lstat_requests ++ ;
457472 /* split filename into path + name */
458473 len = strlen (filename );
459474 if (len && is_dir_sep (filename [len - 1 ]))
@@ -534,6 +549,7 @@ DIR *fscache_opendir(const char *dirname)
534549 if (!fscache_enabled (dirname ))
535550 return dirent_opendir (dirname );
536551
552+ opendir_requests ++ ;
537553 /* prepare name (strip trailing '/', replace '.') */
538554 len = strlen (dirname );
539555 if ((len == 1 && dirname [0 ] == '.' ) ||
0 commit comments