aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Tools/scripts/summarize_stats.py
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2021-12-16 13:40:54 +0000
committerGitHub <noreply@github.com>2021-12-16 13:40:54 +0000
commit4506bbede1644e985991884964b43afa7ee6f609 (patch)
treef707d08c9a1adf73fcbc192c3f83a66cd429589a /Tools/scripts/summarize_stats.py
parent62a8a0c5223f750e22ee381d3cfbdb718cf1cc93 (diff)
downloadcpython-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.py53
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()