comparison mercurial/lsprofcalltree.py @ 40194:1ae0faa14797

py3: use write() instead of print() Because print() expects str and we want to write bytes. There should be no functional changes as part of this. Differential Revision: https://phab.mercurial-scm.org/D5011
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 12 Oct 2018 18:26:10 +0200
parents 5a988b3c9645
children 720355c7b7c9
comparison
equal deleted inserted replaced
40193:b25fbe7e494e 40194:1ae0faa14797
8 8
9 This software may be used and distributed according to the terms 9 This software may be used and distributed according to the terms
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, print_function 13 from __future__ import absolute_import
14 14
15 def label(code): 15 def label(code):
16 if isinstance(code, str): 16 if isinstance(code, str):
17 return '~' + code # built-in functions ('~' sorts at the end) 17 return '~' + code # built-in functions ('~' sorts at the end)
18 else: 18 else:
25 self.data = profiler.getstats() 25 self.data = profiler.getstats()
26 self.out_file = None 26 self.out_file = None
27 27
28 def output(self, out_file): 28 def output(self, out_file):
29 self.out_file = out_file 29 self.out_file = out_file
30 print('events: Ticks', file=out_file) 30 out_file.write(b'events: Ticks\n')
31 self._print_summary() 31 self._print_summary()
32 for entry in self.data: 32 for entry in self.data:
33 self._entry(entry) 33 self._entry(entry)
34 34
35 def _print_summary(self): 35 def _print_summary(self):
36 max_cost = 0 36 max_cost = 0
37 for entry in self.data: 37 for entry in self.data:
38 totaltime = int(entry.totaltime * 1000) 38 totaltime = int(entry.totaltime * 1000)
39 max_cost = max(max_cost, totaltime) 39 max_cost = max(max_cost, totaltime)
40 print('summary: %d' % max_cost, file=self.out_file) 40 self.out_file.write(b'summary: %d\n' % max_cost)
41 41
42 def _entry(self, entry): 42 def _entry(self, entry):
43 out_file = self.out_file 43 out_file = self.out_file
44 44
45 code = entry.code 45 code = entry.code
46 if isinstance(code, str): 46 if isinstance(code, str):
47 print('fi=~', file=out_file) 47 out_file.write(b'fi=~\n')
48 else: 48 else:
49 print('fi=%s' % code.co_filename, file=out_file) 49 out_file.write(b'fi=%s\n' % code.co_filename)
50 print('fn=%s' % label(code), file=out_file) 50
51 out_file.write(b'fn=%s\n' % label(code))
51 52
52 inlinetime = int(entry.inlinetime * 1000) 53 inlinetime = int(entry.inlinetime * 1000)
53 if isinstance(code, str): 54 if isinstance(code, str):
54 print('0 ', inlinetime, file=out_file) 55 out_file.write(b'0 %d\n' % inlinetime)
55 else: 56 else:
56 print('%d %d' % (code.co_firstlineno, inlinetime), file=out_file) 57 out_file.write(b'%d %d\n' % (code.co_firstlineno, inlinetime))
57 58
58 # recursive calls are counted in entry.calls 59 # recursive calls are counted in entry.calls
59 if entry.calls: 60 if entry.calls:
60 calls = entry.calls 61 calls = entry.calls
61 else: 62 else:
66 else: 67 else:
67 lineno = code.co_firstlineno 68 lineno = code.co_firstlineno
68 69
69 for subentry in calls: 70 for subentry in calls:
70 self._subentry(lineno, subentry) 71 self._subentry(lineno, subentry)
71 print(file=out_file) 72
73 out_file.write(b'\n')
72 74
73 def _subentry(self, lineno, subentry): 75 def _subentry(self, lineno, subentry):
74 out_file = self.out_file 76 out_file = self.out_file
75 code = subentry.code 77 code = subentry.code
76 print('cfn=%s' % label(code), file=out_file) 78 out_file.write(b'cfn=%s\n' % label(code))
77 if isinstance(code, str): 79 if isinstance(code, str):
78 print('cfi=~', file=out_file) 80 out_file.write(b'cfi=~\n')
79 print('calls=%d 0' % subentry.callcount, file=out_file) 81 out_file.write(b'calls=%d 0\n' % subentry.callcount)
80 else: 82 else:
81 print('cfi=%s' % code.co_filename, file=out_file) 83 out_file.write(b'cfi=%s\n' % code.co_filename)
82 print('calls=%d %d' % ( 84 out_file.write(b'calls=%d %d\n' % (
83 subentry.callcount, code.co_firstlineno), file=out_file) 85 subentry.callcount, code.co_firstlineno))
84 86
85 totaltime = int(subentry.totaltime * 1000) 87 totaltime = int(subentry.totaltime * 1000)
86 print('%d %d' % (lineno, totaltime), file=out_file) 88 out_file.write(b'%d %d\n' % (lineno, totaltime))