OLD | NEW |
| (Empty) |
1 #!/usr/bin/python | |
2 | |
3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
4 # for details. All rights reserved. Use of this source code is governed by a | |
5 # BSD-style license that can be found in the LICENSE file. | |
6 | |
7 import create_graph | |
8 from create_graph import BROWSER_CORRECTNESS | |
9 from create_graph import BROWSER_PERF | |
10 from create_graph import CL_PERF | |
11 from create_graph import COMMAND_LINE | |
12 from create_graph import CORRECTNESS | |
13 from create_graph import FROG | |
14 from create_graph import FROG_MEAN | |
15 from create_graph import TIME_SIZE | |
16 from create_graph import V8_AND_FROG | |
17 | |
18 import get_current_stats | |
19 import os | |
20 from os.path import dirname, abspath | |
21 import pickle | |
22 import sys | |
23 | |
24 """Compare the current performance statistics with the statistics 24 hours ago, | |
25 and send out an email summarizing the differences.""" | |
26 | |
27 def calculate_stats(): | |
28 """Compare the numbers that were available at the start of the day to what the | |
29 current numbers are. | |
30 | |
31 Returns: | |
32 A string providing an update on the latest perfromance numbers.""" | |
33 test_runner_dict = pickle.load(open(get_current_stats.PICKLE_FILENAME, 'r')) | |
34 test_runner_dict = get_current_stats.populate_stats_dict(test_runner_dict) | |
35 | |
36 browser_perf = test_runner_dict[BROWSER_PERF] | |
37 time_size = test_runner_dict[TIME_SIZE] | |
38 cl = test_runner_dict[CL_PERF] | |
39 correctness = test_runner_dict[BROWSER_CORRECTNESS] | |
40 output = summary_stats(browser_perf, time_size, cl, correctness) | |
41 output += specific_stats(browser_perf, time_size, cl) | |
42 return output | |
43 | |
44 def summary_stats(browser_perf, time_size, cl, correctness): | |
45 """Return the summarized stats report. | |
46 | |
47 Args: | |
48 browser_perf: BrowserPerformanceTestRunner object. Holds browser perf stats. | |
49 time_size: CompileTimeSizeTestRunner object. | |
50 cl: CommandLinePerformanceTestRunner object. | |
51 correctness: BrowserCorrectnessTestRunner object. | |
52 """ | |
53 output = "Summary of changes in the last 24 hours: \n\nBrowser " + \ | |
54 "performance: (revision %d)\n" % \ | |
55 browser_perf.revision_dict[create_graph.get_browsers()[0]][FROG]\ | |
56 [browser_perf.values_list[0]][1] | |
57 for browser in create_graph.get_browsers(): | |
58 geo_mean_list = browser_perf.values_dict[browser][FROG][FROG_MEAN] | |
59 # TODO(efortuna): deal with the fact that the latest of all browsers may not | |
60 # be available. | |
61 output += " %s%s\n" % ((browser + ':').ljust(25), | |
62 str(geo_mean_list[1] - geo_mean_list[0]).rjust(10)) | |
63 | |
64 output += "\nCompile Size and Time: (revision %d)\n" % \ | |
65 time_size.revision_dict[COMMAND_LINE][FROG][time_size.values_list[0]][1] | |
66 for metric in time_size.values_list: | |
67 metric_list = time_size.values_dict[COMMAND_LINE][FROG][metric] | |
68 output += " %s%s\n" % ((metric + ':').ljust(25), | |
69 str(metric_list[1] - metric_list[0]).rjust(10)) | |
70 | |
71 output += "\nPercentage of language tests passing (revision %d)\n" % \ | |
72 correctness.revision_dict['chrome'][FROG][correctness.values_list[0]][1] | |
73 for browser in create_graph.get_browsers(): | |
74 num_correct = correctness.values_dict[browser][FROG][CORRECTNESS] | |
75 output += " %s%s%% more passing\n" % ((browser + ':').ljust(25), | |
76 str(num_correct[1] - num_correct[0]).rjust(10)) | |
77 | |
78 output += "\nCommandline performance: (revision %d)\n" % \ | |
79 cl.revision_dict[COMMAND_LINE][FROG][cl.values_list[0]][1] | |
80 for benchmark in cl.values_list: | |
81 bench_list = cl.values_dict[COMMAND_LINE][FROG][benchmark] | |
82 output += " %s%s\n" % ((benchmark + ':').ljust(25), | |
83 str(bench_list[1] - bench_list[0]).rjust(10)) | |
84 return output | |
85 | |
86 def specific_stats(browser_perf, time_size, cl): | |
87 """Return a string detailing all of the gory details and specifics on | |
88 benchmark numbers and individual benchmark changes. | |
89 | |
90 Args: | |
91 browser_perf: BrowserPerformanceTestRunner object. Holds browser perf stats. | |
92 time_size: CompileTimeSizeTestRunner object. | |
93 cl: CommandLinePerformanceTestRunner object. | |
94 """ | |
95 output = "\n\n---------------------------------------------\nThe latest " + \ | |
96 "current raw numbers (and changes) for those " + \ | |
97 "interested:\nBrowser performance:\n" | |
98 for v8_or_frog in V8_AND_FROG: | |
99 for browser in create_graph.get_browsers(): | |
100 output += " %s %s:\n" % (browser, v8_or_frog) | |
101 for benchmark in create_graph.get_benchmarks(): | |
102 bench_list = browser_perf.values_dict[browser][v8_or_frog][benchmark] | |
103 output += " %s %s%s\n" % ((benchmark + ':').ljust(25), | |
104 str(bench_list[1]).rjust(10), get_amount_changed(bench_list)) | |
105 | |
106 output += "\nCompile Size and Time for frog:\n" | |
107 for metric in time_size.values_list: | |
108 metric_list = time_size.values_dict[COMMAND_LINE][FROG][metric] | |
109 output += " %s %s%s\n" % ((metric + ':').ljust(25), | |
110 str(metric_list[1]).rjust(10), get_amount_changed(metric_list)) | |
111 | |
112 output += "\nCommandline performance:\n" | |
113 for v8_or_frog in V8_AND_FROG: | |
114 output += ' %s:\n' % v8_or_frog | |
115 for benchmark in cl.values_list: | |
116 bench_list = cl.values_dict[COMMAND_LINE][v8_or_frog][benchmark] | |
117 output += " %s %s%s\n" % ((benchmark + ':').ljust(25), | |
118 str(bench_list[1]).rjust(10), get_amount_changed(bench_list)) | |
119 | |
120 return output | |
121 | |
122 def get_amount_changed(values_tuple): | |
123 """Return a formatted string indicating the amount of change (positive or | |
124 negative) in the benchmark since the last run. | |
125 | |
126 Args: | |
127 values_tuple: the tuple of values we are comparing the difference | |
128 between.""" | |
129 difference = values_tuple[1] - values_tuple[0] | |
130 prefix = '+' | |
131 if difference < 0: | |
132 prefix = '-' | |
133 return ("(%s%s)" % (prefix, str(difference))).rjust(10) | |
134 | |
135 | |
136 def main(): | |
137 stats = calculate_stats() | |
138 print stats | |
139 | |
140 if __name__ == '__main__': | |
141 main() | |
OLD | NEW |