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

Side by Side Diff: tools/perf/measurements/blink_perf.py

Issue 19721002: [telemetry] Add run_benchmark benchmarks for everything that runs on the bots. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: I am Maru Created 7 years, 5 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 | « tools/perf/benchmarks/startup_warm.py ('k') | tools/perf/measurements/page_cycler.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """This measurement runs a blink performance test and reports the results.""" 5 """This measurement runs a blink performance test and reports the results."""
6 6
7 import os 7 import os
8 import sys 8 import sys
9 9
10 from telemetry.core import util 10 from telemetry.core import util
11 from telemetry.page import page_measurement 11 from telemetry.page import page_measurement
12 from telemetry.page import page_set 12 from telemetry.page import page_set
13 13
14 14
15 def CreatePageSetFromPath(path):
16 assert os.path.exists(path)
17
18 page_set_dict = {'pages': []}
19
20 def _AddPage(path):
21 if not path.endswith('.html'):
22 return
23 if '../' in open(path, 'r').read():
24 # If the page looks like it references its parent dir, include it.
25 page_set_dict['serving_dirs'] = [os.path.dirname(os.path.dirname(path))]
26 page_set_dict['pages'].append({'url':
27 'file://' + path.replace('\\', '/')})
28
29 def _AddDir(dir_path, skipped):
30 for path in os.listdir(dir_path):
31 if path == 'resources':
32 continue
33 path = os.path.join(dir_path, path)
34 if path.startswith(tuple([os.path.join(path, s)
35 for s in skipped])):
36 continue
37 if os.path.isdir(path):
38 _AddDir(path, skipped)
39 else:
40 _AddPage(path)
41
42 if os.path.isdir(path):
43 skipped = []
44 skipped_file = os.path.join(path, 'Skipped')
45 if os.path.exists(skipped_file):
46 for line in open(skipped_file, 'r').readlines():
47 line = line.strip()
48 if line and not line.startswith('#'):
49 skipped.append(line.replace('/', os.sep))
50 _AddDir(path, skipped)
51 else:
52 _AddPage(path)
53 return page_set.PageSet.FromDict(page_set_dict, os.getcwd() + os.sep)
54
55
15 class BlinkPerf(page_measurement.PageMeasurement): 56 class BlinkPerf(page_measurement.PageMeasurement):
16 def __init__(self): 57 def __init__(self):
17 super(BlinkPerf, self).__init__('') 58 super(BlinkPerf, self).__init__('')
18 with open(os.path.join(os.path.dirname(__file__), 59 with open(os.path.join(os.path.dirname(__file__),
19 'blink_perf.js'), 'r') as f: 60 'blink_perf.js'), 'r') as f:
20 self._blink_perf_js = f.read() 61 self._blink_perf_js = f.read()
21 62
22 def CreatePageSet(self, args, options): 63 def CreatePageSet(self, args, options):
23 if len(args) < 2: 64 if len(args) < 2:
24 print 'Must specify a file or directory to run.' 65 print 'Must specify a file or directory to run.'
25 sys.exit(1) 66 sys.exit(1)
26 67
27 page_set_arg = args[1] 68 page_set_arg = args[1]
28 69
29 if not os.path.exists(page_set_arg): 70 if not os.path.exists(page_set_arg):
30 print '%s does not exist.' % page_set_arg 71 print '%s does not exist.' % page_set_arg
31 sys.exit(1) 72 sys.exit(1)
32 73
33 page_set_dict = {'pages': []} 74 return CreatePageSetFromPath(page_set_arg)
34
35 def _AddPage(path):
36 if not path.endswith('.html'):
37 return
38 if '../' in open(path, 'r').read():
39 # If the page looks like it references its parent dir, include it.
40 page_set_dict['serving_dirs'] = [os.path.dirname(os.path.dirname(path))]
41 page_set_dict['pages'].append({'url':
42 'file://' + path.replace('\\', '/')})
43
44 def _AddDir(dir_path, skipped):
45 for path in os.listdir(dir_path):
46 if path == 'resources':
47 continue
48 path = os.path.join(dir_path, path)
49 if path.startswith(tuple([os.path.join(page_set_arg, s)
50 for s in skipped])):
51 continue
52 if os.path.isdir(path):
53 _AddDir(path, skipped)
54 else:
55 _AddPage(path)
56
57 if os.path.isdir(page_set_arg):
58 skipped = []
59 skipped_file = os.path.join(page_set_arg, 'Skipped')
60 if os.path.exists(skipped_file):
61 for line in open(skipped_file, 'r').readlines():
62 line = line.strip()
63 if line and not line.startswith('#'):
64 skipped.append(line.replace('/', os.sep))
65 _AddDir(page_set_arg, skipped)
66 else:
67 _AddPage(page_set_arg)
68 return page_set.PageSet.FromDict(page_set_dict, os.getcwd() + os.sep)
69 75
70 @property 76 @property
71 def results_are_the_same_on_every_page(self): 77 def results_are_the_same_on_every_page(self):
72 return False 78 return False
73 79
74 def WillNavigateToPage(self, page, tab): 80 def WillNavigateToPage(self, page, tab):
75 page.script_to_evaluate_on_commit = self._blink_perf_js 81 page.script_to_evaluate_on_commit = self._blink_perf_js
76 82
77 def CustomizeBrowserOptions(self, options): 83 def CustomizeBrowserOptions(self, options):
78 options.AppendExtraBrowserArg('--js-flags=--expose_gc') 84 options.AppendExtraBrowserArg('--js-flags=--expose_gc')
79 85
80 def MeasurePage(self, page, tab, results): 86 def MeasurePage(self, page, tab, results):
81 def _IsDone(): 87 def _IsDone():
82 return tab.EvaluateJavaScript('testRunner.isDone') 88 return tab.EvaluateJavaScript('testRunner.isDone')
83 util.WaitFor(_IsDone, 600) 89 util.WaitFor(_IsDone, 600)
84 90
85 log = tab.EvaluateJavaScript('document.getElementById("log").innerHTML') 91 log = tab.EvaluateJavaScript('document.getElementById("log").innerHTML')
86 92
87 for line in log.splitlines(): 93 for line in log.splitlines():
88 if not line.startswith('values '): 94 if not line.startswith('values '):
89 continue 95 continue
90 parts = line.split() 96 parts = line.split()
91 values = [float(v.replace(',', '')) for v in parts[1:-1]] 97 values = [float(v.replace(',', '')) for v in parts[1:-1]]
92 units = parts[-1] 98 units = parts[-1]
93 metric = page.display_url.split('.')[0].replace('/', '_') 99 metric = page.display_url.split('.')[0].replace('/', '_')
94 results.Add(metric, units, values) 100 results.Add(metric, units, values)
95 break 101 break
96 102
97 print log 103 print log
OLDNEW
« no previous file with comments | « tools/perf/benchmarks/startup_warm.py ('k') | tools/perf/measurements/page_cycler.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698