mirror of https://github.com/python/cpython
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
"""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()
|