@@ -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