mercurial/lsprofcalltree.py
changeset 40195 720355c7b7c9
parent 40194 1ae0faa14797
child 43076 2372284d9457
equal deleted inserted replaced
40194:1ae0faa14797 40195:720355c7b7c9
    10 of the GNU General Public License, incorporated herein by reference.
    10 of the GNU General Public License, incorporated herein by reference.
    11 """
    11 """
    12 
    12 
    13 from __future__ import absolute_import
    13 from __future__ import absolute_import
    14 
    14 
       
    15 from . import (
       
    16     pycompat,
       
    17 )
       
    18 
    15 def label(code):
    19 def label(code):
    16     if isinstance(code, str):
    20     if isinstance(code, str):
    17         return '~' + code    # built-in functions ('~' sorts at the end)
    21         # built-in functions ('~' sorts at the end)
       
    22         return '~' + pycompat.sysbytes(code)
    18     else:
    23     else:
    19         return '%s %s:%d' % (code.co_name,
    24         return '%s %s:%d' % (pycompat.sysbytes(code.co_name),
    20                              code.co_filename,
    25                              pycompat.sysbytes(code.co_filename),
    21                              code.co_firstlineno)
    26                              code.co_firstlineno)
    22 
    27 
    23 class KCacheGrind(object):
    28 class KCacheGrind(object):
    24     def __init__(self, profiler):
    29     def __init__(self, profiler):
    25         self.data = profiler.getstats()
    30         self.data = profiler.getstats()
    44 
    49 
    45         code = entry.code
    50         code = entry.code
    46         if isinstance(code, str):
    51         if isinstance(code, str):
    47             out_file.write(b'fi=~\n')
    52             out_file.write(b'fi=~\n')
    48         else:
    53         else:
    49             out_file.write(b'fi=%s\n' % code.co_filename)
    54             out_file.write(b'fi=%s\n' % pycompat.sysbytes(code.co_filename))
    50 
    55 
    51         out_file.write(b'fn=%s\n' % label(code))
    56         out_file.write(b'fn=%s\n' % label(code))
    52 
    57 
    53         inlinetime = int(entry.inlinetime * 1000)
    58         inlinetime = int(entry.inlinetime * 1000)
    54         if isinstance(code, str):
    59         if isinstance(code, str):
    78         out_file.write(b'cfn=%s\n' % label(code))
    83         out_file.write(b'cfn=%s\n' % label(code))
    79         if isinstance(code, str):
    84         if isinstance(code, str):
    80             out_file.write(b'cfi=~\n')
    85             out_file.write(b'cfi=~\n')
    81             out_file.write(b'calls=%d 0\n' % subentry.callcount)
    86             out_file.write(b'calls=%d 0\n' % subentry.callcount)
    82         else:
    87         else:
    83             out_file.write(b'cfi=%s\n' % code.co_filename)
    88             out_file.write(b'cfi=%s\n' % pycompat.sysbytes(code.co_filename))
    84             out_file.write(b'calls=%d %d\n' % (
    89             out_file.write(b'calls=%d %d\n' % (
    85                 subentry.callcount, code.co_firstlineno))
    90                 subentry.callcount, code.co_firstlineno))
    86 
    91 
    87         totaltime = int(subentry.totaltime * 1000)
    92         totaltime = int(subentry.totaltime * 1000)
    88         out_file.write(b'%d %d\n' % (lineno, totaltime))
    93         out_file.write(b'%d %d\n' % (lineno, totaltime))