summaryrefslogtreecommitdiff
path: root/coverage/collector.py
diff options
context:
space:
mode:
author"David R. MacIver" <david@drmaciver.com>2018-05-14 11:32:54 -0400
committer"David R. MacIver" <david@drmaciver.com>2018-05-14 11:32:54 -0400
commit69e172c4fd98100ee67802207c232092200520e7 (patch)
treeb55178571649018b9492ab733200d2509d954382 /coverage/collector.py
parent01235f7d5aa3a83a40dd1c719d9fe7425c2145bb (diff)
downloadpython-coveragepy-git-69e172c4fd98100ee67802207c232092200520e7.tar.gz
Add collector local cache of abs_file
Diffstat (limited to 'coverage/collector.py')
-rw-r--r--coverage/collector.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/coverage/collector.py b/coverage/collector.py
index 0c3ca9c2..d6468378 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))