diff options
author | Mathew Robinson <chasinglogic@gmail.com> | 2019-05-15 17:29:48 (GMT) |
---|---|---|
committer | Mathew Robinson <chasinglogic@gmail.com> | 2019-05-17 17:36:01 (GMT) |
commit | df0db6cecf595a8a8819ffd97e38f9e04de249da (patch) | |
tree | 1e30389ecd8d20ac20f3b3d20af9711261bff5c6 /src/engine | |
parent | 3cd0e6afa59e1a380bb028695f1817b1d951aefb (diff) | |
download | SCons-df0db6cecf595a8a8819ffd97e38f9e04de249da.zip SCons-df0db6cecf595a8a8819ffd97e38f9e04de249da.tar.gz SCons-df0db6cecf595a8a8819ffd97e38f9e04de249da.tar.bz2 |
Add cache hit rate to cache debugging
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/SCons/CacheDir.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/engine/SCons/CacheDir.py b/src/engine/SCons/CacheDir.py index 0a378c2..704b9a5 100644 --- a/src/engine/SCons/CacheDir.py +++ b/src/engine/SCons/CacheDir.py @@ -47,10 +47,12 @@ def CacheRetrieveFunc(target, source, env): t = target[0] fs = t.fs cd = env.get_CacheDir() + cd.requests += 1 cachedir, cachefile = cd.cachepath(t) if not fs.exists(cachefile): cd.CacheDebug('CacheRetrieve(%s): %s not in cache\n', t, cachefile) return 1 + cd.hits += 1 cd.CacheDebug('CacheRetrieve(%s): retrieving from %s\n', t, cachefile) if SCons.Action.execute_actions: if fs.islink(cachefile): @@ -148,6 +150,8 @@ class CacheDir(object): one exists, if not the config file is created and the default config is written, as well as saved in the object. """ + self.requests = 0 + self.hits = 0 self.path = path self.current_cache_debug = None self.debugFP = None @@ -269,6 +273,16 @@ class CacheDir(object): self.current_cache_debug = cache_debug if self.debugFP: self.debugFP.write(fmt % (target, os.path.split(cachefile)[1])) + self.debugFP.write("requests: %d, hits: %d, misses: %d, hit rate: %.2f%%\n" % + (self.requests, self.hits, self.misses, self.hit_ratio)) + + @property + def hit_ratio(self): + return (100.0 * self.hits / self.requests if self.requests > 0 else 100) + + @property + def misses(self): + return self.requests - self.hits def is_enabled(self): return cache_enabled and self.path is not None |