- #!/usr/bin/env python 
-   
- from __future__ import print_function 
-   
- desc = '''Generate statistics about optimization records from the YAML files 
- generated with -fsave-optimization-record and -fdiagnostics-show-hotness. 
-   
- The tools requires PyYAML and Pygments Python packages.''' 
-   
- import optrecord 
- import argparse 
- import operator 
- from collections import defaultdict 
- from multiprocessing import cpu_count, Pool 
-   
- try: 
-     from guppy import hpy 
-     hp = hpy() 
- except ImportError: 
-     print("Memory consumption not shown because guppy is not installed") 
-     hp = None 
-   
- if __name__ == '__main__': 
-     parser = argparse.ArgumentParser(description=desc) 
-     parser.add_argument( 
-         'yaml_dirs_or_files', 
-         nargs='+', 
-         help='List of optimization record files or directories searched ' 
-              'for optimization record files.') 
-     parser.add_argument( 
-         '--jobs', 
-         '-j', 
-         default=None, 
-         type=int, 
-         help='Max job count (defaults to %(default)s, the current CPU count)') 
-     parser.add_argument( 
-         '--no-progress-indicator', 
-         '-n', 
-         action='store_true', 
-         default=False, 
-         help='Do not display any indicator of how many YAML files were read.') 
-     args = parser.parse_args() 
-   
-     print_progress = not args.no_progress_indicator 
-   
-     files = optrecord.find_opt_files(*args.yaml_dirs_or_files) 
-     if not files: 
-         parser.error("No *.opt.yaml files found") 
-         sys.exit(1) 
-   
-     all_remarks, file_remarks, _ = optrecord.gather_results( 
-         files, args.jobs, print_progress) 
-     if print_progress: 
-         print('\n') 
-   
-     bypass = defaultdict(int) 
-     byname = defaultdict(int) 
-     for r in optrecord.itervalues(all_remarks): 
-         bypass[r.Pass] += 1 
-         byname[r.Pass + "/" + r.Name] += 1 
-   
-     total = len(all_remarks) 
-     print("{:24s} {:10d}".format("Total number of remarks", total)) 
-     if hp: 
-         h = hp.heap() 
-         print("{:24s} {:10d}".format("Memory per remark", 
-                                      h.size / len(all_remarks))) 
-     print('\n') 
-   
-     print("Top 10 remarks by pass:") 
-     for (passname, count) in sorted(bypass.items(), key=operator.itemgetter(1), 
-                                     reverse=True)[:10]: 
-         print("  {:30s} {:2.0f}%". format(passname, count * 100. / total)) 
-   
-     print("\nTop 10 remarks:") 
-     for (name, count) in sorted(byname.items(), key=operator.itemgetter(1), 
-                                 reverse=True)[:10]: 
-         print("  {:30s} {:2.0f}%". format(name, count * 100. / total)) 
-