diff options
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 |
commit | 9208b873d699beb5a63b94a6791c73ee7accc243 (patch) | |
tree | 0f8787bf6783b1eed0891cfe3c1e1b4eccb142f8 /coverage/collector.py | |
parent | 4c12d97433e40069fa9adb5b44539be6b4451aad (diff) | |
download | python-coveragepy-9208b873d699beb5a63b94a6791c73ee7accc243.tar.gz |
Add collector local cache of abs_file
Diffstat (limited to 'coverage/collector.py')
-rw-r--r-- | coverage/collector.py | 10 |
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)) |