mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			53 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 ] * 20
 | 
						|
    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()
 |