summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid R. MacIver" <david@drmaciver.com>2018-05-14 11:32:54 -0400
committerDavid R. MacIver" <david@drmaciver.com>2018-05-14 11:32:54 -0400
commit9208b873d699beb5a63b94a6791c73ee7accc243 (patch)
tree0f8787bf6783b1eed0891cfe3c1e1b4eccb142f8
parent4c12d97433e40069fa9adb5b44539be6b4451aad (diff)
downloadpython-coveragepy-9208b873d699beb5a63b94a6791c73ee7accc243.tar.gz
Add collector local cache of abs_file
-rw-r--r--coverage/collector.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/coverage/collector.py b/coverage/collector.py
index 0c3ca9c..d646837 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -103,6 +103,7 @@ class Collector(object):
self.origin = short_stack()
self.concur_id_func = None
+ self.abs_file_cache = {}
# We can handle a few concurrency options here, but only one at a time.
these_concurrencies = self.SUPPORTED_CONCURRENCIES.intersection(concurrency)
@@ -369,6 +370,13 @@ class Collector(object):
for tracer in self.tracers:
tracer.data = data
+ def cached_abs_file(self, filename):
+ key = (type(filename), filename)
+ try:
+ return self.abs_file_cache[key]
+ except KeyError:
+ return self.abs_file_cache.setdefault(key, abs_file(filename))
+
def save_data(self, covdata):
"""Save the collected data to a `CoverageData`.
@@ -394,7 +402,7 @@ class Collector(object):
else:
raise runtime_err # pylint: disable=raising-bad-type
- return dict((abs_file(k), v) for k, v in items)
+ return dict((self.cached_abs_file(k), v) for k, v in items)
if self.branch:
covdata.add_arcs(abs_file_dict(self.data))