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 metrics import power
8 from telemetry import test
9 from telemetry.core import util
10 from telemetry.page import page_measurement
11 from telemetry.page import page_set
14 class _DromaeoMeasurement(page_measurement.PageMeasurement):
16 super(_DromaeoMeasurement, self).__init__()
17 self._power_metric = power.PowerMetric()
19 def CustomizeBrowserOptions(self, options):
20 power.PowerMetric.CustomizeBrowserOptions(options)
22 def DidNavigateToPage(self, page, tab):
23 self._power_metric.Start(page, tab)
25 def MeasurePage(self, page, tab, results):
26 tab.WaitForJavaScriptExpression(
27 'window.document.cookie.indexOf("__done=1") >= 0', 600)
29 self._power_metric.Stop(page, tab)
30 self._power_metric.AddResults(tab, results)
32 js_get_results = 'JSON.stringify(window.automation.GetResults())'
34 score = eval(tab.EvaluateJavaScript(js_get_results))
37 chars = [' ', '-', '/', '(', ')', '*']
42 suffix = page.url[page.url.index('?') + 1 : page.url.index('&')]
43 for k, v in score.iteritems():
44 data_type = 'unimportant'
47 results.Add(Escape(k), 'runs/s', float(v), data_type=data_type)
50 class _DromaeoBenchmark(test.Test):
51 """A base class for Dromaeo benchmarks."""
52 test = _DromaeoMeasurement
54 def CreatePageSet(self, options):
55 """Makes a PageSet for Dromaeo benchmarks."""
56 # Subclasses are expected to define a class member called query_param.
57 if not hasattr(self, 'query_param'):
58 raise NotImplementedError('query_param not in Dromaeo benchmark.')
59 url = 'file://index.html?%s&automated' % self.query_param
60 # The docstring of benchmark classes may also be used as a description
61 # when 'run_benchmarks list' is run.
62 description = self.__doc__ or 'Dromaeo JavaScript Benchmark'
64 'description': description,
65 'pages': [{'url': url}],
67 dromaeo_dir = os.path.join(util.GetChromiumSrcDir(),
68 'chrome', 'test', 'data', 'dromaeo')
69 return page_set.PageSet.FromDict(page_set_dict, dromaeo_dir)
72 class DromaeoDomCoreAttr(_DromaeoBenchmark):
73 """Dromaeo DOMCore attr JavaScript benchmark."""
75 query_param = 'dom-attr'
78 class DromaeoDomCoreModify(_DromaeoBenchmark):
79 """Dromaeo DOMCore modify JavaScript benchmark."""
81 query_param = 'dom-modify'
84 class DromaeoDomCoreQuery(_DromaeoBenchmark):
85 """Dromaeo DOMCore query JavaScript benchmark."""
87 query_param = 'dom-query'
90 class DromaeoDomCoreTraverse(_DromaeoBenchmark):
91 """Dromaeo DOMCore traverse JavaScript benchmark."""
92 tag = 'domcoretraverse'
93 query_param = 'dom-traverse'
96 class DromaeoJslibAttrJquery(_DromaeoBenchmark):
97 """Dromaeo JSLib attr jquery JavaScript benchmark"""
98 tag = 'jslibattrjquery'
99 query_param = 'jslib-attr-jquery'
102 class DromaeoJslibAttrPrototype(_DromaeoBenchmark):
103 """Dromaeo JSLib attr prototype JavaScript benchmark"""
104 tag = 'jslibattrprototype'
105 query_param = 'jslib-attr-prototype'
108 class DromaeoJslibEventJquery(_DromaeoBenchmark):
109 """Dromaeo JSLib event jquery JavaScript benchmark"""
110 tag = 'jslibeventjquery'
111 query_param = 'jslib-event-jquery'
114 class DromaeoJslibEventPrototype(_DromaeoBenchmark):
115 """Dromaeo JSLib event prototype JavaScript benchmark"""
116 tag = 'jslibeventprototype'
117 query_param = 'jslib-event-prototype'
120 class DromaeoJslibModifyJquery(_DromaeoBenchmark):
121 """Dromaeo JSLib modify jquery JavaScript benchmark"""
122 tag = 'jslibmodifyjquery'
123 query_param = 'jslib-modify-jquery'
126 class DromaeoJslibModifyPrototype(_DromaeoBenchmark):
127 """Dromaeo JSLib modify prototype JavaScript benchmark"""
128 tag = 'jslibmodifyprototype'
129 query_param = 'jslib-modify-prototype'
132 class DromaeoJslibStyleJquery(_DromaeoBenchmark):
133 """Dromaeo JSLib style jquery JavaScript benchmark"""
134 tag = 'jslibstylejquery'
135 query_param = 'jslib-style-jquery'
138 class DromaeoJslibStylePrototype(_DromaeoBenchmark):
139 """Dromaeo JSLib style prototype JavaScript benchmark"""
140 tag = 'jslibstyleprototype'
141 query_param = 'jslib-style-prototype'
144 class DromaeoJslibTraverseJquery(_DromaeoBenchmark):
145 """Dromaeo JSLib traverse jquery JavaScript benchmark"""
146 tag = 'jslibtraversejquery'
147 query_param = 'jslib-traverse-jquery'
150 class DromaeoJslibTraversePrototype(_DromaeoBenchmark):
151 """Dromaeo JSLib traverse prototype JavaScript benchmark"""
152 tag = 'jslibtraverseprototype'
153 query_param = 'jslib-traverse-prototype'