summaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorMathew Robinson <chasinglogic@gmail.com>2019-05-15 17:29:48 (GMT)
committerMathew Robinson <chasinglogic@gmail.com>2019-05-17 17:36:01 (GMT)
commitdf0db6cecf595a8a8819ffd97e38f9e04de249da (patch)
tree1e30389ecd8d20ac20f3b3d20af9711261bff5c6 /src/engine
parent3cd0e6afa59e1a380bb028695f1817b1d951aefb (diff)
downloadSCons-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.py14
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