136 if opts is None: |
136 if opts is None: |
137 opts = {} |
137 opts = {} |
138 # redirect all to stderr |
138 # redirect all to stderr |
139 ui = ui.copy() |
139 ui = ui.copy() |
140 ui.fout = ui.ferr |
140 ui.fout = ui.ferr |
|
141 |
141 # get a formatter |
142 # get a formatter |
142 fm = ui.formatter('perf', opts) |
143 uiformatter = getattr(ui, 'formatter', None) |
|
144 if uiformatter: |
|
145 fm = uiformatter('perf', opts) |
|
146 else: |
|
147 # for "historical portability": |
|
148 # define formatter locally, because ui.formatter has been |
|
149 # available since 2.2 (or ae5f92e154d3) |
|
150 from mercurial import node |
|
151 class defaultformatter(object): |
|
152 """Minimized composition of baseformatter and plainformatter |
|
153 """ |
|
154 def __init__(self, ui, topic, opts): |
|
155 self._ui = ui |
|
156 if ui.debugflag: |
|
157 self.hexfunc = node.hex |
|
158 else: |
|
159 self.hexfunc = node.short |
|
160 def __nonzero__(self): |
|
161 return False |
|
162 def startitem(self): |
|
163 pass |
|
164 def data(self, **data): |
|
165 pass |
|
166 def write(self, fields, deftext, *fielddata, **opts): |
|
167 self._ui.write(deftext % fielddata, **opts) |
|
168 def condwrite(self, cond, fields, deftext, *fielddata, **opts): |
|
169 if cond: |
|
170 self._ui.write(deftext % fielddata, **opts) |
|
171 def plain(self, text, **opts): |
|
172 self._ui.write(text, **opts) |
|
173 def end(self): |
|
174 pass |
|
175 fm = defaultformatter(ui, 'perf', opts) |
|
176 |
143 # stub function, runs code only once instead of in a loop |
177 # stub function, runs code only once instead of in a loop |
144 # experimental config: perf.stub |
178 # experimental config: perf.stub |
145 if ui.configbool("perf", "stub"): |
179 if ui.configbool("perf", "stub"): |
146 return functools.partial(stub_timer, fm), fm |
180 return functools.partial(stub_timer, fm), fm |
147 return functools.partial(_timer, fm), fm |
181 return functools.partial(_timer, fm), fm |