summaryrefslogtreecommitdiff
path: root/coverage/collector.py
diff options
context:
space:
mode:
Diffstat (limited to 'coverage/collector.py')
-rw-r--r--coverage/collector.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/coverage/collector.py b/coverage/collector.py
index 0c3ca9c2..fa3eaaa4 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -1,5 +1,5 @@
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
-# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
"""Raw data collector for coverage.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,14 @@ class Collector(object):
for tracer in self.tracers:
tracer.data = data
+ def cached_abs_file(self, filename):
+ """A locally cached version of `abs_file`."""
+ 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 +403,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))