diff options
author | 2011-08-08 20:27:04 +0000 | |
---|---|---|
committer | 2011-08-08 20:27:04 +0000 | |
commit | 3726000a28b5e810d18768cb48b33902cf5ef16e (patch) | |
tree | ef6c58311147079bdce0378c6de696aee94ad742 /bench/bench_graph_svg.py | |
parent | 88edf1e50794e6d8cd7cc671ffce4f5e329ef888 (diff) |
More little improvements to bench_graph_svg.py
- add ability to express revision numbers as offset from latest
- add configurable title
Review URL: http://codereview.appspot.com/4808081
git-svn-id: http://skia.googlecode.com/svn/trunk@2067 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/bench_graph_svg.py')
-rw-r--r-- | bench/bench_graph_svg.py | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/bench/bench_graph_svg.py b/bench/bench_graph_svg.py index e7bf372a2b..d8cd54b43f 100644 --- a/bench/bench_graph_svg.py +++ b/bench/bench_graph_svg.py @@ -20,9 +20,12 @@ def usage(): print '-t <time> the time to show (w, c, g, etc).' print '-s <setting>[=<value>] a setting to show (alpha, scalar, etc).' print '-r <revision>[:<revision>] the revisions to show.' + print ' Negative <revision> is taken as offset from most recent revision.' print '-f <revision>[:<revision>] the revisions to use for fitting.' + print ' Negative <revision> is taken as offset from most recent revision.' print '-x <int> the desired width of the svg.' print '-y <int> the desired height of the svg.' + print '-l <title> title to use for the output graph' print '--default-setting <setting>[=<value>] setting for those without.' @@ -64,6 +67,22 @@ class Label: hash(self.time_type) ^ hash(frozenset(self.settings.iteritems()))) +def get_latest_revision(directory): + """Returns the latest revision number found within this directory. + """ + latest_revision_found = -1 + for bench_file in os.listdir(directory): + file_name_match = re.match('bench_r(\d+)_(\S+)', bench_file) + if (file_name_match is None): + continue + revision = int(file_name_match.group(1)) + if revision > latest_revision_found: + latest_revision_found = revision + if latest_revision_found < 0: + return None + else: + return latest_revision_found + def parse_dir(directory, default_settings, oldest_revision, newest_revision): """Parses bench data from files like bench_r<revision>_<scalar>. @@ -186,7 +205,7 @@ def main(): try: opts, _ = getopt.getopt(sys.argv[1:] - , "d:b:c:t:s:r:f:x:y:" + , "d:b:c:l:t:s:r:f:x:y:" , "default-setting=") except getopt.GetoptError, err: print str(err) @@ -197,22 +216,31 @@ def main(): config_of_interest = None bench_of_interest = None time_of_interest = None - oldest_revision = 0 - newest_revision = bench_util.Max - oldest_regression = 0 - newest_regression = bench_util.Max + revision_range = '0:' + regression_range = '0:' + latest_revision = None requested_height = None requested_width = None + title = 'Bench graph' settings = {} default_settings = {} - - def parse_range(revision_range): - """Takes <old>[:<new>] returns (old, new) or (old, Max).""" - old, _, new = revision_range.partition(":") + + def parse_range(range): + """Takes '<old>[:<new>]' as a string and returns (old, new). + Any revision numbers that are dependent on the latest revision number + will be filled in based on latest_revision. + """ + old, _, new = range.partition(":") + old = int(old) + if old < 0: + old += latest_revision; if not new: - return (int(old), bench_util.Max) - return (int(old), int(new)) - + new = latest_revision; + new = int(new) + if new < 0: + new += latest_revision; + return (old, new) + def add_setting(settings, setting): """Takes <key>[=<value>] adds {key:value} or {key:True} to settings.""" name, _, value = setting.partition('=') @@ -234,13 +262,15 @@ def main(): elif option == "-s": add_setting(settings, value) elif option == "-r": - oldest_revision, newest_revision = parse_range(value) + revision_range = value elif option == "-f": - oldest_regression, newest_regression = parse_range(value) + regression_range = value elif option == "-x": requested_width = int(value) elif option == "-y": requested_height = int(value) + elif option == "-l": + title = value elif option == "--default-setting": add_setting(default_settings, value) else: @@ -254,6 +284,10 @@ def main(): usage() sys.exit(2) + latest_revision = get_latest_revision(directory) + oldest_revision, newest_revision = parse_range(revision_range) + oldest_regression, newest_regression = parse_range(regression_range) + revision_data_points = parse_dir(directory , default_settings , oldest_revision @@ -275,7 +309,7 @@ def main(): , newest_regression) output_xhtml(lines, oldest_revision, newest_revision, - regressions, requested_width, requested_height) + regressions, requested_width, requested_height, title) def qa(out): """Stringify input and quote as an xml attribute.""" @@ -307,13 +341,13 @@ def create_select(qualifier, lines, select_id=None): print '</select>' def output_xhtml(lines, oldest_revision, newest_revision, - regressions, requested_width, requested_height): + regressions, requested_width, requested_height, title): """Outputs an svg/xhtml view of the data.""" print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"', print '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">' print '<head>' - print '<title>Bench graph</title>' + print '<title>%s</title>' % title print '</head>' print '<body>' @@ -412,7 +446,8 @@ def output_xhtml(lines, oldest_revision, newest_revision, <td width="1"><!--buttons--></td> <td width="10%"><!--spacing--></td>""" - print '<td>Skia Bench Performance for r%s to r%s</td>' % ( + print '<td>%s<br></br>revisions r%s - r%s</td>' % ( + title, bench_util.CreateRevisionLink(oldest_revision), bench_util.CreateRevisionLink(newest_revision)) print '</tr><tr valign="top" align="center">' |