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
3 # found in the LICENSE file.
7 from telemetry import test
8 from telemetry.core import util
9 from telemetry.page import page_measurement
10 from telemetry.page import page_set
13 class _DromaeoMeasurement(page_measurement.PageMeasurement):
14 def MeasurePage(self, page, tab, results):
15 tab.WaitForJavaScriptExpression(
16 'window.document.cookie.indexOf("__done=1") >= 0', 600)
18 js_get_results = 'JSON.stringify(window.automation.GetResults())'
20 score = eval(tab.EvaluateJavaScript(js_get_results))
23 chars = [' ', '-', '/', '(', ')', '*']
28 suffix = page.url[page.url.index('?') + 1 : page.url.index('&')]
29 for k, v in score.iteritems():
30 data_type = 'unimportant'
33 results.Add(Escape(k), 'runs/s', v, data_type=data_type)
36 class _DromaeoBenchmark(test.Test):
37 """A base class for Dromaeo benchmarks."""
38 test = _DromaeoMeasurement
40 def CreatePageSet(self, options):
41 """Makes a PageSet for Dromaeo benchmarks."""
42 # Subclasses are expected to define a class member called query_param.
43 if not hasattr(self, 'query_param'):
44 raise NotImplementedError('query_param not in Dromaeo benchmark.')
45 url = 'file://index.html?%s&automated' % self.query_param
46 # The docstring of benchmark classes may also be used as a description
47 # when 'run_benchmarks list' is run.
48 description = self.__doc__ or 'Dromaeo JavaScript Benchmark'
50 'description': description,
51 'pages': [{'url': url}],
53 dromaeo_dir = os.path.join(util.GetChromiumSrcDir(),
54 'chrome', 'test', 'data', 'dromaeo')
55 return page_set.PageSet.FromDict(page_set_dict, dromaeo_dir)
58 class DromaeoDomCoreAttr(_DromaeoBenchmark):
59 """Dromaeo DOMCore attr JavaScript benchmark."""
61 query_param = 'dom-attr'
64 class DromaeoDomCoreModify(_DromaeoBenchmark):
65 """Dromaeo DOMCore modify JavaScript benchmark."""
67 query_param = 'dom-modify'
70 class DromaeoDomCoreQuery(_DromaeoBenchmark):
71 """Dromaeo DOMCore query JavaScript benchmark."""
73 query_param = 'dom-query'
76 class DromaeoDomCoreTraverse(_DromaeoBenchmark):
77 """Dromaeo DOMCore traverse JavaScript benchmark."""
78 tag = 'domcoretraverse'
79 query_param = 'dom-traverse'
82 class DromaeoJslibAttrJquery(_DromaeoBenchmark):
83 """Dromaeo JSLib attr jquery JavaScript benchmark"""
84 tag = 'jslibattrjquery'
85 query_param = 'jslib-attr-jquery'
88 class DromaeoJslibAttrPrototype(_DromaeoBenchmark):
89 """Dromaeo JSLib attr prototype JavaScript benchmark"""
90 tag = 'jslibattrprototype'
91 query_param = 'jslib-attr-prototype'
94 class DromaeoJslibEventJquery(_DromaeoBenchmark):
95 """Dromaeo JSLib event jquery JavaScript benchmark"""
96 tag = 'jslibeventjquery'
97 query_param = 'jslib-event-jquery'
100 class DromaeoJslibEventPrototype(_DromaeoBenchmark):
101 """Dromaeo JSLib event prototype JavaScript benchmark"""
102 tag = 'jslibeventprototype'
103 query_param = 'jslib-event-prototype'
106 class DromaeoJslibModifyJquery(_DromaeoBenchmark):
107 """Dromaeo JSLib modify jquery JavaScript benchmark"""
108 tag = 'jslibmodifyjquery'
109 query_param = 'jslib-modify-jquery'
112 class DromaeoJslibModifyPrototype(_DromaeoBenchmark):
113 """Dromaeo JSLib modify prototype JavaScript benchmark"""
114 tag = 'jslibmodifyprototype'
115 query_param = 'jslib-modify-prototype'
118 class DromaeoJslibStyleJquery(_DromaeoBenchmark):
119 """Dromaeo JSLib style jquery JavaScript benchmark"""
120 tag = 'jslibstylejquery'
121 query_param = 'jslib-style-jquery'
124 class DromaeoJslibStylePrototype(_DromaeoBenchmark):
125 """Dromaeo JSLib style prototype JavaScript benchmark"""
126 tag = 'jslibstyleprototype'
127 query_param = 'jslib-style-prototype'
130 class DromaeoJslibTraverseJquery(_DromaeoBenchmark):
131 """Dromaeo JSLib traverse jquery JavaScript benchmark"""
132 tag = 'jslibtraversejquery'
133 query_param = 'jslib-traverse-jquery'
136 class DromaeoJslibTraversePrototype(_DromaeoBenchmark):
137 """Dromaeo JSLib traverse prototype JavaScript benchmark"""
138 tag = 'jslibtraverseprototype'
139 query_param = 'jslib-traverse-prototype'