Show More
@@ -11,6 +11,7 | |||||
11 | import sys |
|
11 | import sys | |
12 | import os |
|
12 | import os | |
13 | import re |
|
13 | import re | |
|
14 | import math | |||
14 | from subprocess import check_call, Popen, CalledProcessError, STDOUT, PIPE |
|
15 | from subprocess import check_call, Popen, CalledProcessError, STDOUT, PIPE | |
15 | # cannot use argparse, python 2.7 only |
|
16 | # cannot use argparse, python 2.7 only | |
16 | from optparse import OptionParser |
|
17 | from optparse import OptionParser | |
@@ -103,10 +104,55 def idxwidth(nbidx): | |||||
103 | idxwidth = 1 |
|
104 | idxwidth = 1 | |
104 | return idxwidth |
|
105 | return idxwidth | |
105 |
|
106 | |||
106 | def printresult(idx, data, maxidx, verbose=False): |
|
107 | def getfactor(main, other, field, sensitivity=0.05): | |
|
108 | """return the relative factor between values for 'field' in main and other | |||
|
109 | ||||
|
110 | Return None if the factor is insignicant (less than <sensitivity> | |||
|
111 | variation).""" | |||
|
112 | factor = 1 | |||
|
113 | if main is not None: | |||
|
114 | factor = other[field] / main[field] | |||
|
115 | low, high = 1 - sensitivity, 1 + sensitivity | |||
|
116 | if (low < factor < high): | |||
|
117 | return None | |||
|
118 | return factor | |||
|
119 | ||||
|
120 | def formatfactor(factor): | |||
|
121 | """format a factor into a 4 char string | |||
|
122 | ||||
|
123 | 22% | |||
|
124 | 156% | |||
|
125 | x2.4 | |||
|
126 | x23 | |||
|
127 | x789 | |||
|
128 | x1e4 | |||
|
129 | x5x7 | |||
|
130 | ||||
|
131 | """ | |||
|
132 | if factor is None: | |||
|
133 | return ' ' | |||
|
134 | elif factor < 2: | |||
|
135 | return '%3i%%' % (factor * 100) | |||
|
136 | elif factor < 10: | |||
|
137 | return 'x%3.1f' % factor | |||
|
138 | elif factor < 1000: | |||
|
139 | return '%4s' % ('x%i' % factor) | |||
|
140 | else: | |||
|
141 | order = int(math.log(factor)) + 1 | |||
|
142 | while 1 < math.log(factor): | |||
|
143 | factor //= 0 | |||
|
144 | return 'x%ix%i' % (factor, order) | |||
|
145 | ||||
|
146 | _marker = object() | |||
|
147 | def printresult(idx, data, maxidx, verbose=False, reference=_marker): | |||
107 | """print a line of result to stdout""" |
|
148 | """print a line of result to stdout""" | |
108 | mask = '%%0%ii) %%s' % idxwidth(maxidx) |
|
149 | mask = '%%0%ii) %%s' % idxwidth(maxidx) | |
109 | out = ['%10.6f' % data['wall']] |
|
150 | out = ['%10.6f' % data['wall']] | |
|
151 | if reference is not _marker: | |||
|
152 | factor = None | |||
|
153 | if reference is not None: | |||
|
154 | factor = getfactor(reference, data, 'wall') | |||
|
155 | out.append(formatfactor(factor)) | |||
110 | if verbose: |
|
156 | if verbose: | |
111 | out.append('%10.6f' % data['comb']) |
|
157 | out.append('%10.6f' % data['comb']) | |
112 | out.append('%10.6f' % data['user']) |
|
158 | out.append('%10.6f' % data['user']) | |
@@ -114,9 +160,11 def printresult(idx, data, maxidx, verbo | |||||
114 | out.append('%6d' % data['count']) |
|
160 | out.append('%6d' % data['count']) | |
115 | print mask % (idx, ' '.join(out)) |
|
161 | print mask % (idx, ' '.join(out)) | |
116 |
|
162 | |||
117 | def printheader(maxidx, verbose=False): |
|
163 | def printheader(maxidx, verbose=False, relative=False): | |
118 | header = [' ' * (idxwidth(maxidx) + 1), |
|
164 | header = [' ' * (idxwidth(maxidx) + 1), | |
119 | ' %-8s' % 'time'] |
|
165 | ' %-8s' % 'time'] | |
|
166 | if relative: | |||
|
167 | header.append(' ') | |||
120 | if verbose: |
|
168 | if verbose: | |
121 | header.append(' %-8s' % 'comb') |
|
169 | header.append(' %-8s' % 'comb') | |
122 | header.append(' %-8s' % 'user') |
|
170 | header.append(' %-8s' % 'user') | |
@@ -208,7 +256,10 print | |||||
208 | for ridx, rset in enumerate(revsets): |
|
256 | for ridx, rset in enumerate(revsets): | |
209 |
|
257 | |||
210 | print "revset #%i: %s" % (ridx, rset) |
|
258 | print "revset #%i: %s" % (ridx, rset) | |
211 | printheader(len(results), verbose=options.verbose) |
|
259 | printheader(len(results), verbose=options.verbose, relative=True) | |
|
260 | ref = None | |||
212 | for idx, data in enumerate(results): |
|
261 | for idx, data in enumerate(results): | |
213 |
printresult(idx, data[ridx], len(results), verbose=options.verbose |
|
262 | printresult(idx, data[ridx], len(results), verbose=options.verbose, | |
|
263 | reference=ref) | |||
|
264 | ref = data[ridx] | |||
214 |
|
265 |
General Comments 0
You need to be logged in to leave comments.
Login now