727 if not os.path.exists(scriptpath): |
727 if not os.path.exists(scriptpath): |
728 fp.write(b'error: missing %s\n' % scriptpath) |
728 fp.write(b'error: missing %s\n' % scriptpath) |
729 fp.write(b'get it here: https://github.com/brendangregg/FlameGraph\n') |
729 fp.write(b'get it here: https://github.com/brendangregg/FlameGraph\n') |
730 return |
730 return |
731 |
731 |
732 fd, path = pycompat.mkstemp() |
|
733 |
|
734 file = open(path, "w+") |
|
735 |
|
736 lines = {} |
732 lines = {} |
737 for sample in data.samples: |
733 for sample in data.samples: |
738 sites = [s.function for s in sample.stack] |
734 sites = [s.function for s in sample.stack] |
739 sites.reverse() |
735 sites.reverse() |
740 line = ';'.join(sites) |
736 line = ';'.join(sites) |
741 if line in lines: |
737 if line in lines: |
742 lines[line] = lines[line] + 1 |
738 lines[line] = lines[line] + 1 |
743 else: |
739 else: |
744 lines[line] = 1 |
740 lines[line] = 1 |
745 |
741 |
746 for line, count in lines.iteritems(): |
742 fd, path = pycompat.mkstemp() |
747 file.write("%s %d\n" % (line, count)) |
743 |
748 |
744 with open(path, "w+") as file: |
749 file.close() |
745 for line, count in lines.iteritems(): |
|
746 file.write("%s %d\n" % (line, count)) |
750 |
747 |
751 if outputfile is None: |
748 if outputfile is None: |
752 outputfile = '~/flamegraph.svg' |
749 outputfile = '~/flamegraph.svg' |
753 |
750 |
754 os.system("perl ~/flamegraph.pl %s > %s" % (path, outputfile)) |
751 os.system("perl ~/flamegraph.pl %s > %s" % (path, outputfile)) |