mercurial/statprof.py
changeset 48913 f254fc73d956
parent 48875 6000f5b25c9b
child 48935 2cce2fa5bcf7
equal deleted inserted replaced
48912:a0674e916fb6 48913:f254fc73d956
   571     for stat in stats:
   571     for stat in stats:
   572         grouped[stat.site.filename() + b":" + stat.site.function].append(stat)
   572         grouped[stat.site.filename() + b":" + stat.site.function].append(stat)
   573 
   573 
   574     # compute sums for each function
   574     # compute sums for each function
   575     functiondata = []
   575     functiondata = []
   576     for fname, sitestats in pycompat.iteritems(grouped):
   576     for fname, sitestats in grouped.items():
   577         total_cum_sec = 0
   577         total_cum_sec = 0
   578         total_self_sec = 0
   578         total_self_sec = 0
   579         total_percent = 0
   579         total_percent = 0
   580         for stat in sitestats:
   580         for stat in sitestats:
   581             total_cum_sec += stat.totalseconds()
   581             total_cum_sec += stat.totalseconds()
   650                 if site in children:
   650                 if site in children:
   651                     children[site] = children[site] + 1
   651                     children[site] = children[site] + 1
   652                 else:
   652                 else:
   653                     children[site] = 1
   653                     children[site] = 1
   654 
   654 
   655     parents = [(parent, count) for parent, count in pycompat.iteritems(parents)]
   655     parents = [(parent, count) for parent, count in parents.items()]
   656     parents.sort(reverse=True, key=lambda x: x[1])
   656     parents.sort(reverse=True, key=lambda x: x[1])
   657     for parent, count in parents:
   657     for parent, count in parents:
   658         fp.write(
   658         fp.write(
   659             b'%6.2f%%   %s:%s   line %s: %s\n'
   659             b'%6.2f%%   %s:%s   line %s: %s\n'
   660             % (
   660             % (
   694             total_self_sec,
   694             total_self_sec,
   695             total_self_percent,
   695             total_self_percent,
   696         )
   696         )
   697     )
   697     )
   698 
   698 
   699     children = [(child, count) for child, count in pycompat.iteritems(children)]
   699     children = [(child, count) for child, count in children.items()]
   700     children.sort(reverse=True, key=lambda x: x[1])
   700     children.sort(reverse=True, key=lambda x: x[1])
   701     for child, count in children:
   701     for child, count in children:
   702         fp.write(
   702         fp.write(
   703             b'        %6.2f%%   line %s: %s\n'
   703             b'        %6.2f%%   line %s: %s\n'
   704             % (
   704             % (
   825             lines[line] = 1
   825             lines[line] = 1
   826 
   826 
   827     fd, path = pycompat.mkstemp()
   827     fd, path = pycompat.mkstemp()
   828 
   828 
   829     with open(path, b"w+") as file:
   829     with open(path, b"w+") as file:
   830         for line, count in pycompat.iteritems(lines):
   830         for line, count in lines.items():
   831             file.write(b"%s %d\n" % (line, count))
   831             file.write(b"%s %d\n" % (line, count))
   832 
   832 
   833     if outputfile is None:
   833     if outputfile is None:
   834         outputfile = b'~/flamegraph.svg'
   834         outputfile = b'~/flamegraph.svg'
   835 
   835