adds flag for choosing bench representative algorithm.
git-svn-id: http://skia.googlecode.com/svn/trunk@5113 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
63258865c4
commit
8734816c3f
@ -28,6 +28,8 @@ def usage():
|
||||
print '-r <revision>[:<revision>] the revisions to show.'
|
||||
print ' Negative <revision> is taken as offset from most recent revision.'
|
||||
print '-s <setting>[=<value>] a setting to show (alpha, scalar, etc).'
|
||||
print '-m <representative> use "avg", "min", or "med" for bench value.'
|
||||
print ' They correspond to average, minimum and median of bench iters.'
|
||||
print '-t <time> the time to show (w, c, g, etc).'
|
||||
print '-x <int> the desired width of the svg.'
|
||||
print '-y <int> the desired height of the svg.'
|
||||
@ -88,7 +90,8 @@ def get_latest_revision(directory):
|
||||
else:
|
||||
return latest_revision_found
|
||||
|
||||
def parse_dir(directory, default_settings, oldest_revision, newest_revision):
|
||||
def parse_dir(directory, default_settings, oldest_revision, newest_revision,
|
||||
rep):
|
||||
"""Parses bench data from files like bench_r<revision>_<scalar>.
|
||||
|
||||
(str, {str, str}, Number, Number) -> {int:[BenchDataPoints]}"""
|
||||
@ -110,7 +113,7 @@ def parse_dir(directory, default_settings, oldest_revision, newest_revision):
|
||||
revision_data_points[revision] = []
|
||||
default_settings['scalar'] = scalar_type
|
||||
revision_data_points[revision].extend(
|
||||
bench_util.parse(default_settings, file_handle))
|
||||
bench_util.parse(default_settings, file_handle, rep))
|
||||
file_handle.close()
|
||||
return revision_data_points
|
||||
|
||||
@ -267,7 +270,7 @@ def main():
|
||||
|
||||
try:
|
||||
opts, _ = getopt.getopt(sys.argv[1:]
|
||||
, "b:c:d:f:l:o:r:s:t:x:y:"
|
||||
, "b:c:d:f:l:m:o:r:s:t:x:y:"
|
||||
, "default-setting=")
|
||||
except getopt.GetoptError, err:
|
||||
print str(err)
|
||||
@ -278,6 +281,7 @@ def main():
|
||||
config_of_interest = None
|
||||
bench_of_interest = None
|
||||
time_of_interest = None
|
||||
rep = "avg" # bench representative calculation algorithm
|
||||
revision_range = '0:'
|
||||
regression_range = '0:'
|
||||
latest_revision = None
|
||||
@ -323,6 +327,10 @@ def main():
|
||||
regression_range = value
|
||||
elif option == "-l":
|
||||
title = value
|
||||
elif option == "-m":
|
||||
rep = value
|
||||
if rep not in ["avg", "min", "med"]:
|
||||
raise Exception("Invalid -m representative: %s" % rep)
|
||||
elif option == "-o":
|
||||
redirect_stdout(value)
|
||||
elif option == "-r":
|
||||
@ -355,7 +363,8 @@ def main():
|
||||
unfiltered_revision_data_points = parse_dir(directory
|
||||
, default_settings
|
||||
, oldest_revision
|
||||
, newest_revision)
|
||||
, newest_revision
|
||||
, rep)
|
||||
|
||||
# Filter out any data points that are utterly bogus... make sure to report
|
||||
# that we did so later!
|
||||
|
@ -45,10 +45,11 @@ class _ExtremeType(object):
|
||||
Max = _ExtremeType(1, "Max")
|
||||
Min = _ExtremeType(-1, "Min")
|
||||
|
||||
def parse(settings, lines):
|
||||
def parse(settings, lines, representative='avg'):
|
||||
"""Parses bench output into a useful data structure.
|
||||
|
||||
({str:str}, __iter__ -> str) -> [BenchDataPoint]"""
|
||||
({str:str}, __iter__ -> str) -> [BenchDataPoint]
|
||||
representative is one of 'avg', 'min', 'med' (average, mean, median)."""
|
||||
|
||||
benches = []
|
||||
current_bench = None
|
||||
@ -84,12 +85,26 @@ def parse(settings, lines):
|
||||
current_time_type = new_time.group(1)
|
||||
iters = [float(i) for i in
|
||||
new_time.group(2).strip().split(',')]
|
||||
current_time = sum(iters) / len(iters)
|
||||
iters.sort()
|
||||
iter_len = len(iters)
|
||||
if representative == 'avg':
|
||||
rep = sum(iters) / iter_len
|
||||
if representative == 'min':
|
||||
rep = iters[0]
|
||||
elif representative == 'med':
|
||||
if iter_len % 2:
|
||||
rep = (iters[iter_len / 2] +
|
||||
iters[iter_len / 2 - 1]) / 2
|
||||
else:
|
||||
rep = iters[iter_len / 2]
|
||||
else:
|
||||
raise Exception("invalid representative algorithm %s!" %
|
||||
representative)
|
||||
benches.append(BenchDataPoint(
|
||||
current_bench
|
||||
, current_config
|
||||
, current_time_type
|
||||
, current_time
|
||||
, rep
|
||||
, settings))
|
||||
|
||||
return benches
|
||||
|
Loading…
Reference in New Issue
Block a user