Skip to content

Commit

Permalink
Merge pull request git-for-windows#1910 from benpeart/fscache_statist…
Browse files Browse the repository at this point in the history
…ics-gfw

fscache: add fscache hit statistics
  • Loading branch information
dscho committed Nov 25, 2024
2 parents ac3350d + 43f88c4 commit 0454a46
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions compat/win32/fscache.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ static int initialized;
static volatile long enabled;
static struct hashmap map;
static CRITICAL_SECTION mutex;
static unsigned int lstat_requests;
static unsigned int opendir_requests;
static unsigned int fscache_requests;
static unsigned int fscache_misses;
static struct trace_key trace_fscache = TRACE_KEY_INIT(FSCACHE);

/*
Expand Down Expand Up @@ -265,6 +269,8 @@ static void fscache_clear(void)
{
hashmap_clear_and_free(&map, struct fsentry, ent);
hashmap_init(&map, (hashmap_cmp_fn)fsentry_cmp, NULL, 0);
lstat_requests = opendir_requests = 0;
fscache_misses = fscache_requests = 0;
}

/*
Expand Down Expand Up @@ -311,6 +317,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
int dir_not_found;

EnterCriticalSection(&mutex);
fscache_requests++;
/* check if entry is in cache */
fse = fscache_get_wait(key);
if (fse) {
Expand Down Expand Up @@ -374,6 +381,7 @@ static struct fsentry *fscache_get(struct fsentry *key)
}

/* add directory listing to the cache */
fscache_misses++;
fscache_add(fse);

/* lookup file entry if requested (fse already points to directory) */
Expand Down Expand Up @@ -411,6 +419,8 @@ int fscache_enable(int enable)
return 0;

InitializeCriticalSection(&mutex);
lstat_requests = opendir_requests = 0;
fscache_misses = fscache_requests = 0;
hashmap_init(&map, (hashmap_cmp_fn) fsentry_cmp, NULL, 0);
initialized = 1;
}
Expand All @@ -427,6 +437,10 @@ int fscache_enable(int enable)
opendir = dirent_opendir;
lstat = mingw_lstat;
EnterCriticalSection(&mutex);
trace_printf_key(&trace_fscache, "fscache: lstat %u, opendir %u, "
"total requests/misses %u/%u\n",
lstat_requests, opendir_requests,
fscache_requests, fscache_misses);
fscache_clear();
LeaveCriticalSection(&mutex);
}
Expand Down Expand Up @@ -459,6 +473,7 @@ int fscache_lstat(const char *filename, struct stat *st)
if (!fscache_enabled(filename))
return mingw_lstat(filename, st);

lstat_requests++;
/* split filename into path + name */
len = strlen(filename);
if (len && is_dir_sep(filename[len - 1]))
Expand Down Expand Up @@ -540,6 +555,7 @@ DIR *fscache_opendir(const char *dirname)
if (!fscache_enabled(dirname))
return dirent_opendir(dirname);

opendir_requests++;
/* prepare name (strip trailing '/', replace '.') */
len = strlen(dirname);
if ((len == 1 && dirname[0] == '.') ||
Expand Down

0 comments on commit 0454a46

Please sign in to comment.