@@ -8,6 +8,10 @@ static int initialized;
8
8
static volatile long enabled ;
9
9
static struct hashmap map ;
10
10
static 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 ;
11
15
static struct trace_key trace_fscache = TRACE_KEY_INIT (FSCACHE );
12
16
13
17
/*
@@ -262,6 +266,8 @@ static void fscache_clear(void)
262
266
{
263
267
hashmap_clear_and_free (& map , struct fsentry , ent );
264
268
hashmap_init (& map , (hashmap_cmp_fn )fsentry_cmp , NULL , 0 );
269
+ lstat_requests = opendir_requests = 0 ;
270
+ fscache_misses = fscache_requests = 0 ;
265
271
}
266
272
267
273
/*
@@ -308,6 +314,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
308
314
int dir_not_found ;
309
315
310
316
EnterCriticalSection (& mutex );
317
+ fscache_requests ++ ;
311
318
/* check if entry is in cache */
312
319
fse = fscache_get_wait (key );
313
320
if (fse ) {
@@ -371,6 +378,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
371
378
}
372
379
373
380
/* add directory listing to the cache */
381
+ fscache_misses ++ ;
374
382
fscache_add (fse );
375
383
376
384
/* lookup file entry if requested (fse already points to directory) */
@@ -408,6 +416,8 @@ int fscache_enable(int enable)
408
416
return 0 ;
409
417
410
418
InitializeCriticalSection (& mutex );
419
+ lstat_requests = opendir_requests = 0 ;
420
+ fscache_misses = fscache_requests = 0 ;
411
421
hashmap_init (& map , (hashmap_cmp_fn ) fsentry_cmp , NULL , 0 );
412
422
initialized = 1 ;
413
423
}
@@ -424,6 +434,10 @@ int fscache_enable(int enable)
424
434
opendir = dirent_opendir ;
425
435
lstat = mingw_lstat ;
426
436
EnterCriticalSection (& mutex );
437
+ trace_printf_key (& trace_fscache , "fscache: lstat %u, opendir %u, "
438
+ "total requests/misses %u/%u\n" ,
439
+ lstat_requests , opendir_requests ,
440
+ fscache_requests , fscache_misses );
427
441
fscache_clear ();
428
442
LeaveCriticalSection (& mutex );
429
443
}
@@ -456,6 +470,7 @@ int fscache_lstat(const char *filename, struct stat *st)
456
470
if (!fscache_enabled (filename ))
457
471
return mingw_lstat (filename , st );
458
472
473
+ lstat_requests ++ ;
459
474
/* split filename into path + name */
460
475
len = strlen (filename );
461
476
if (len && is_dir_sep (filename [len - 1 ]))
@@ -537,6 +552,7 @@ DIR *fscache_opendir(const char *dirname)
537
552
if (!fscache_enabled (dirname ))
538
553
return dirent_opendir (dirname );
539
554
555
+ opendir_requests ++ ;
540
556
/* prepare name (strip trailing '/', replace '.') */
541
557
len = strlen (dirname );
542
558
if ((len == 1 && dirname [0 ] == '.' ) ||
0 commit comments