Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: tools/ll_prof.py

Issue 7039040: ll_prof: Output tick percentage by symbol/library. (Closed)
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2010 the V8 project authors. All rights reserved. 3 # Copyright 2010 the V8 project authors. All rights reserved.
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 start_address = int(match.group(1), 16) 773 start_address = int(match.group(1), 16)
774 end_address = start_address 774 end_address = start_address
775 name = match.group(2) 775 name = match.group(2)
776 if code: 776 if code:
777 code.end_address = start_address 777 code.end_address = start_address
778 code_map.Add(code, 16) 778 code_map.Add(code, 16)
779 code = Code(name, start_address, end_address, "kernel", 0) 779 code = Code(name, start_address, end_address, "kernel", 0)
780 return True 780 return True
781 781
782 782
783 def PrintReport(code_map, library_repo, arch, options): 783 def PrintReport(code_map, library_repo, arch, ticks, options):
784 print "Ticks per symbol:" 784 print "Ticks per symbol:"
785 used_code = [code for code in code_map.UsedCode()] 785 used_code = [code for code in code_map.UsedCode()]
786 used_code.sort(key=lambda x: x.self_ticks, reverse=True) 786 used_code.sort(key=lambda x: x.self_ticks, reverse=True)
787 for i, code in enumerate(used_code): 787 for i, code in enumerate(used_code):
788 print "%10d %s [%s]" % (code.self_ticks, code.FullName(), code.origin) 788 code_ticks = code.self_ticks
789 print "%10d %5.1f%% %s [%s]" % (code_ticks, 100. * code_ticks / ticks,
790 code.FullName(), code.origin)
789 if options.disasm_all or i < options.disasm_top: 791 if options.disasm_all or i < options.disasm_top:
790 code.PrintAnnotated(arch, options) 792 code.PrintAnnotated(arch, options)
791 print 793 print
792 print "Ticks per library:" 794 print "Ticks per library:"
793 mmap_infos = [m for m in library_repo.infos] 795 mmap_infos = [m for m in library_repo.infos]
794 mmap_infos.sort(key=lambda m: m.ticks, reverse=True) 796 mmap_infos.sort(key=lambda m: m.ticks, reverse=True)
795 for mmap_info in mmap_infos: 797 for mmap_info in mmap_infos:
796 print "%10d %s" % (mmap_info.ticks, mmap_info.unique_name) 798 mmap_ticks = mmap_info.ticks
799 print "%10d %5.1f%% %s" % (mmap_ticks, 100. * mmap_ticks / ticks,
800 mmap_info.unique_name)
797 801
798 802
799 def PrintDot(code_map, options): 803 def PrintDot(code_map, options):
800 print "digraph G {" 804 print "digraph G {"
801 for code in code_map.UsedCode(): 805 for code in code_map.UsedCode():
802 if code.self_ticks < 10: 806 if code.self_ticks < 10:
803 continue 807 continue
804 print "n%d [shape=box,label=\"%s\"];" % (code.id, code.name) 808 print "n%d [shape=box,label=\"%s\"];" % (code.id, code.name)
805 if code.callee_ticks: 809 if code.callee_ticks:
806 for callee, ticks in code.callee_ticks.iteritems(): 810 for callee, ticks in code.callee_ticks.iteritems():
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 snapshot_name_map = snapshot_log_reader.ReadNameMap() 875 snapshot_name_map = snapshot_log_reader.ReadNameMap()
872 876
873 # Initialize the log reader. 877 # Initialize the log reader.
874 code_map = CodeMap() 878 code_map = CodeMap()
875 log_reader = LogReader(log_name=options.log + ".ll", 879 log_reader = LogReader(log_name=options.log + ".ll",
876 code_map=code_map, 880 code_map=code_map,
877 snapshot_pos_to_name=snapshot_name_map) 881 snapshot_pos_to_name=snapshot_name_map)
878 if not options.quiet: 882 if not options.quiet:
879 print "Generated code architecture: %s" % log_reader.arch 883 print "Generated code architecture: %s" % log_reader.arch
880 print 884 print
885 sys.stdout.flush()
881 886
882 # Process the code and trace logs. 887 # Process the code and trace logs.
883 library_repo = LibraryRepo() 888 library_repo = LibraryRepo()
884 log_reader.ReadUpToGC() 889 log_reader.ReadUpToGC()
885 trace_reader = TraceReader(options.trace) 890 trace_reader = TraceReader(options.trace)
886 while True: 891 while True:
887 header, offset = trace_reader.ReadEventHeader() 892 header, offset = trace_reader.ReadEventHeader()
888 if not header: 893 if not header:
889 break 894 break
890 events += 1 895 events += 1
(...skipping 21 matching lines...) Expand all
912 caller_code = code_map.Find(ip) 917 caller_code = code_map.Find(ip)
913 if caller_code: 918 if caller_code:
914 if code: 919 if code:
915 caller_code.CalleeTick(code) 920 caller_code.CalleeTick(code)
916 code = caller_code 921 code = caller_code
917 sample_time += time.time() - start 922 sample_time += time.time() - start
918 923
919 if options.dot: 924 if options.dot:
920 PrintDot(code_map, options) 925 PrintDot(code_map, options)
921 else: 926 else:
922 PrintReport(code_map, library_repo, log_reader.arch, options) 927 PrintReport(code_map, library_repo, log_reader.arch, ticks, options)
923 928
924 if not options.quiet: 929 if not options.quiet:
925 print 930 print
926 print "Stats:" 931 print "Stats:"
927 print "%10d total trace events" % events 932 print "%10d total trace events" % events
928 print "%10d total ticks" % ticks 933 print "%10d total ticks" % ticks
929 print "%10d ticks not in symbols" % missed_ticks 934 print "%10d ticks not in symbols" % missed_ticks
930 print "%10d unaccounted ticks" % really_missed_ticks 935 print "%10d unaccounted ticks" % really_missed_ticks
931 print "%10d total symbols" % len([c for c in code_map.AllCode()]) 936 print "%10d total symbols" % len([c for c in code_map.AllCode()])
932 print "%10d used symbols" % len([c for c in code_map.UsedCode()]) 937 print "%10d used symbols" % len([c for c in code_map.UsedCode()])
933 print "%9.2fs library processing time" % mmap_time 938 print "%9.2fs library processing time" % mmap_time
934 print "%9.2fs tick processing time" % sample_time 939 print "%9.2fs tick processing time" % sample_time
935 940
936 log_reader.Dispose() 941 log_reader.Dispose()
937 trace_reader.Dispose() 942 trace_reader.Dispose()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698