Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(360)

Side by Side Diff: tools/bisect-perf-regression.py

Issue 288843002: Fix bisect script to match a results with {mean, stddev} format. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Performance Test Bisect Tool 6 """Performance Test Bisect Tool
7 7
8 This script bisects a series of changelists using binary search. It starts at 8 This script bisects a series of changelists using binary search. It starts at
9 a bad revision where a performance metric has regressed, and asks for a last 9 a bad revision where a performance metric has regressed, and asks for a last
10 known-good revision. It will then binary search across this revision range by 10 known-good revision. It will then binary search across this revision range by
(...skipping 1935 matching lines...) Expand 10 before | Expand all | Expand 10 after
1946 """ 1946 """
1947 # Format is: RESULT <graph>: <trace>= <value> <units> 1947 # Format is: RESULT <graph>: <trace>= <value> <units>
1948 metric_formatted = re.escape('RESULT %s: %s=' % (metric[0], metric[1])) 1948 metric_formatted = re.escape('RESULT %s: %s=' % (metric[0], metric[1]))
1949 1949
1950 text_lines = text.split('\n') 1950 text_lines = text.split('\n')
1951 values_list = [] 1951 values_list = []
1952 1952
1953 for current_line in text_lines: 1953 for current_line in text_lines:
1954 # Parse the output from the performance test for the metric we're 1954 # Parse the output from the performance test for the metric we're
1955 # interested in. 1955 # interested in.
1956 # The log will be parsed looking for format:
1957 # <*>RESULT <graph_name>: <trace_name>= <value>
1956 metric_re = metric_formatted +\ 1958 metric_re = metric_formatted +\
1957 "(\s)*(?P<values>[0-9]+(\.[0-9]*)?)" 1959 "(\s)*(?P<values>[0-9]+(\.[0-9]*)?)"
1958 metric_re = re.compile(metric_re) 1960 metric_re = re.compile(metric_re)
1959 regex_results = metric_re.search(current_line) 1961 regex_results = metric_re.search(current_line)
1960 1962
1961 if not regex_results is None: 1963 if not regex_results is None:
1962 values_list += [regex_results.group('values')] 1964 values_list += [regex_results.group('values')]
1963 else: 1965 else:
1966 # The log will be parsed looking for format:
1967 # <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...]
1964 metric_re = metric_formatted +\ 1968 metric_re = metric_formatted +\
1965 "(\s)*\[(\s)*(?P<values>[0-9,.]+)\]" 1969 "(\s)*\[(\s)*(?P<values>[0-9,.]+)\]"
1966 metric_re = re.compile(metric_re) 1970 metric_re = re.compile(metric_re)
1967 regex_results = metric_re.search(current_line) 1971 regex_results = metric_re.search(current_line)
1968 1972
1969 if not regex_results is None: 1973 if not regex_results is None:
1970 metric_values = regex_results.group('values') 1974 metric_values = regex_results.group('values')
1971 1975
1972 values_list += metric_values.split(',') 1976 values_list += metric_values.split(',')
1977 else:
1978 # The log will be parsed looking for format:
1979 # <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>}
qyearsley 2014/05/14 22:28:33 It would probably be neater/more readable to put t
prasadv 2014/05/15 19:49:09 Agreed, tried to trim this method and make it more
1980 metric_re = metric_formatted +\
1981 "(\s)*\{(\s)*(?P<values>[-\d\., ]+)\}"
1982 metric_re = re.compile(metric_re)
1983 regex_results = metric_re.search(current_line)
1984 if not regex_results is None:
1985 metric_values = regex_results.group('values')
1986 if metric_values:
1987 # Here we are interested only in mean.
1988 values_list += [metric_values.split(',')[0]]
1973 1989
1974 values_list = [float(v) for v in values_list if IsStringFloat(v)] 1990 values_list = [float(v) for v in values_list if IsStringFloat(v)]
1975 1991
1976 # If the metric is times/t, we need to sum the timings in order to get 1992 # If the metric is times/t, we need to sum the timings in order to get
1977 # similar regression results as the try-bots. 1993 # similar regression results as the try-bots.
1978 metrics_to_sum = [['times', 't'], ['times', 'page_load_time'], 1994 metrics_to_sum = [['times', 't'], ['times', 'page_load_time'],
1979 ['cold_times', 'page_load_time'], ['warm_times', 'page_load_time']] 1995 ['cold_times', 'page_load_time'], ['warm_times', 'page_load_time']]
1980 1996
1981 if metric in metrics_to_sum: 1997 if metric in metrics_to_sum:
1982 if values_list: 1998 if values_list:
(...skipping 1910 matching lines...) Expand 10 before | Expand all | Expand 10 after
3893 # The perf dashboard scrapes the "results" step in order to comment on 3909 # The perf dashboard scrapes the "results" step in order to comment on
3894 # bugs. If you change this, please update the perf dashboard as well. 3910 # bugs. If you change this, please update the perf dashboard as well.
3895 bisect_utils.OutputAnnotationStepStart('Results') 3911 bisect_utils.OutputAnnotationStepStart('Results')
3896 print 'Error: %s' % e.message 3912 print 'Error: %s' % e.message
3897 if opts.output_buildbot_annotations: 3913 if opts.output_buildbot_annotations:
3898 bisect_utils.OutputAnnotationStepClosed() 3914 bisect_utils.OutputAnnotationStepClosed()
3899 return 1 3915 return 1
3900 3916
3901 if __name__ == '__main__': 3917 if __name__ == '__main__':
3902 sys.exit(main()) 3918 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698