diff options
author | Mark Shannon <mark@hotpy.org> | 2021-12-16 13:40:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-16 13:40:54 +0000 |
commit | 4506bbede1644e985991884964b43afa7ee6f609 (patch) | |
tree | f707d08c9a1adf73fcbc192c3f83a66cd429589a /Tools/scripts/summarize_stats.py | |
parent | 62a8a0c5223f750e22ee381d3cfbdb718cf1cc93 (diff) | |
download | cpython-4506bbede1644e985991884964b43afa7ee6f609.tar.gz cpython-4506bbede1644e985991884964b43afa7ee6f609.zip |
bpo-46072: Document --enable-stats option. (GH-30139)
Diffstat (limited to 'Tools/scripts/summarize_stats.py')
-rw-r--r-- | Tools/scripts/summarize_stats.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Tools/scripts/summarize_stats.py b/Tools/scripts/summarize_stats.py new file mode 100644 index 00000000000..15b1887415e --- /dev/null +++ b/Tools/scripts/summarize_stats.py @@ -0,0 +1,53 @@ +"""Print a summary of specialization stats for all files in the +default stats folders. +""" + +import collections +import os.path + +if os.name == "nt": + DEFAULT_DIR = "c:\\temp\\py_stats\\" +else: + DEFAULT_DIR = "/tmp/py_stats/" + + +TOTAL = "deferred", "hit", "miss", "unquickened" + +def print_stats(name, family_stats): + total = sum(family_stats[kind] for kind in TOTAL) + if total == 0: + return + print(name+":") + for key in sorted(family_stats): + if not key.startswith("specialization"): + print(f"{key:>12}:{family_stats[key]:>12} {100*family_stats[key]/total:0.1f}%") + for key in ("specialization_success", "specialization_failure"): + print(f" {key}:{family_stats[key]:>12}") + total_failures = family_stats["specialization_failure"] + failure_kinds = [ 0 ] * 30 + for key in family_stats: + if not key.startswith("specialization_failure_kind"): + continue + _, index = key[:-1].split("[") + index = int(index) + failure_kinds[index] = family_stats[key] + for index, value in enumerate(failure_kinds): + if not value: + continue + print(f" kind {index:>2}: {value:>8} {100*value/total_failures:0.1f}%") + +def main(): + stats = collections.defaultdict(collections.Counter) + for filename in os.listdir(DEFAULT_DIR): + for line in open(os.path.join(DEFAULT_DIR, filename)): + key, value = line.split(":") + key = key.strip() + family, stat = key.split(".") + value = int(value.strip()) + stats[family][stat] += value + + for name in sorted(stats): + print_stats(name, stats[name]) + +if __name__ == "__main__": + main() |