aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-03-12 16:23:33 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-03-12 16:23:33 +0000
commit758bc7aa483da5bf0bdb5e3dbc208902a8506a93 (patch)
treecc4c4d8821757d9f6aedf992959f267374628f90 /bench
parent4355f21dbc29bcb479a3806444dd22916e22771e (diff)
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
Diffstat (limited to 'bench')
-rw-r--r--bench/bench_util.py58
1 files changed, 40 insertions, 18 deletions
diff --git a/bench/bench_util.py b/bench/bench_util.py
index 9b7d296fa9..29ef1c473b 100644
--- a/bench/bench_util.py
+++ b/bench/bench_util.py
@@ -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