зеркало из https://github.com/mozilla/moz-skia.git
Stores per-iteration bench values in BenchDataPoint.
BUG=skia:2225 NOTRY=true R=borenet@google.com Author: bensong@google.com Review URL: https://codereview.chromium.org/197573002 git-svn-id: http://skia.googlecode.com/svn/trunk@13767 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
Родитель
4355f21dbc
Коммит
758bc7aa48
|
@ -38,19 +38,25 @@ TILE_LAYOUT_RE_COMPILED = re.compile(TILE_LAYOUT_RE)
|
|||
|
||||
class BenchDataPoint:
|
||||
"""A single data point produced by bench.
|
||||
|
||||
(str, str, str, float, {str:str}, str, [floats])"""
|
||||
"""
|
||||
def __init__(self, bench, config, time_type, time, settings,
|
||||
tile_layout='', per_tile_values=[]):
|
||||
tile_layout='', per_tile_values=[], per_iter_time=[]):
|
||||
# string name of the benchmark to measure
|
||||
self.bench = bench
|
||||
# string name of the configurations to run
|
||||
self.config = config
|
||||
# type of the timer in string: '' (walltime), 'c' (cpu) or 'g' (gpu)
|
||||
self.time_type = time_type
|
||||
# float number of the bench time value
|
||||
self.time = time
|
||||
# dictionary of the run settings
|
||||
self.settings = settings
|
||||
# how tiles cover the whole picture. '5x3' means 5 columns and 3 rows.
|
||||
# how tiles cover the whole picture: '5x3' means 5 columns and 3 rows
|
||||
self.tile_layout = tile_layout
|
||||
# list of per_tile bench values, if applicable
|
||||
# list of float for per_tile bench values, if applicable
|
||||
self.per_tile_values = per_tile_values
|
||||
# list of float for per-iteration bench time, if applicable
|
||||
self.per_iter_time = per_iter_time
|
||||
|
||||
def __repr__(self):
|
||||
return "BenchDataPoint(%s, %s, %s, %s, %s)" % (
|
||||
|
@ -109,7 +115,7 @@ class _ListAlgorithm(object):
|
|||
return self._rep
|
||||
|
||||
def _ParseAndStoreTimes(config_re_compiled, is_per_tile, line, bench,
|
||||
value_dic, layout_dic, representation=None):
|
||||
value_dic, layout_dic):
|
||||
"""Parses given bench time line with regex and adds data to value_dic.
|
||||
|
||||
config_re_compiled: precompiled regular expression for parsing the config
|
||||
|
@ -120,7 +126,7 @@ def _ParseAndStoreTimes(config_re_compiled, is_per_tile, line, bench,
|
|||
bench: name of bench for the time values.
|
||||
value_dic: dictionary to store bench values. See bench_dic in parse() below.
|
||||
layout_dic: dictionary to store tile layouts. See parse() for descriptions.
|
||||
representation: should match one of the ALGORITHM_XXX types."""
|
||||
"""
|
||||
|
||||
for config in config_re_compiled.finditer(line):
|
||||
current_config = config.group(1)
|
||||
|
@ -137,7 +143,7 @@ def _ParseAndStoreTimes(config_re_compiled, is_per_tile, line, bench,
|
|||
new_time.group(2).strip().split(',')]
|
||||
value_dic.setdefault(bench, {}).setdefault(
|
||||
current_config, {}).setdefault(current_time_type, []).append(
|
||||
_ListAlgorithm(iters, representation).compute())
|
||||
iters)
|
||||
layout_dic.setdefault(bench, {}).setdefault(
|
||||
current_config, {}).setdefault(current_time_type, tile_layout)
|
||||
|
||||
|
@ -151,7 +157,11 @@ def parse(settings, lines, representation=None):
|
|||
|
||||
benches = []
|
||||
current_bench = None
|
||||
bench_dic = {} # [bench][config][time_type] -> [list of bench values]
|
||||
# [bench][config][time_type] -> [[per-iter values]] where per-tile config
|
||||
# has per-iter value list for each tile [[<tile1_iter1>,<tile1_iter2>,...],
|
||||
# [<tile2_iter1>,<tile2_iter2>,...],...], while non-per-tile config only
|
||||
# contains one list of iterations [[iter1, iter2, ...]].
|
||||
bench_dic = {}
|
||||
# [bench][config][time_type] -> tile_layout
|
||||
layout_dic = {}
|
||||
|
||||
|
@ -176,30 +186,42 @@ def parse(settings, lines, representation=None):
|
|||
if current_bench:
|
||||
if line.startswith(' tile_') :
|
||||
_ParseAndStoreTimes(TILE_RE_COMPILED, True, line, current_bench,
|
||||
bench_dic, layout_dic, representation)
|
||||
bench_dic, layout_dic)
|
||||
else:
|
||||
_ParseAndStoreTimes(CONFIG_RE_COMPILED, False, line,
|
||||
current_bench,
|
||||
bench_dic, layout_dic, representation)
|
||||
current_bench, bench_dic, layout_dic)
|
||||
|
||||
# append benches to list, use the total time as final bench value.
|
||||
# append benches to list
|
||||
for bench in bench_dic:
|
||||
for config in bench_dic[bench]:
|
||||
for time_type in bench_dic[bench][config]:
|
||||
tile_layout = ''
|
||||
per_tile_values = []
|
||||
per_tile_values = [] # empty for non-per-tile configs
|
||||
per_iter_time = [] # empty for per-tile configs
|
||||
bench_summary = None # a single final bench value
|
||||
if len(bench_dic[bench][config][time_type]) > 1:
|
||||
# per-tile values, extract tile_layout
|
||||
per_tile_values = bench_dic[bench][config][time_type]
|
||||
# per-tile config; compute representation for each tile
|
||||
per_tile_values = [
|
||||
_ListAlgorithm(iters, representation).compute()
|
||||
for iters in bench_dic[bench][config][time_type]]
|
||||
# use sum of each tile representation for total bench value
|
||||
bench_summary = sum(per_tile_values)
|
||||
# extract tile layout
|
||||
tile_layout = layout_dic[bench][config][time_type]
|
||||
else:
|
||||
# get the list of per-iteration values
|
||||
per_iter_time = bench_dic[bench][config][time_type][0]
|
||||
bench_summary = _ListAlgorithm(
|
||||
per_iter_time, representation).compute()
|
||||
benches.append(BenchDataPoint(
|
||||
bench,
|
||||
config,
|
||||
time_type,
|
||||
sum(bench_dic[bench][config][time_type]),
|
||||
bench_summary,
|
||||
settings,
|
||||
tile_layout,
|
||||
per_tile_values))
|
||||
per_tile_values,
|
||||
per_iter_time))
|
||||
|
||||
return benches
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче