7903dfbb5a2487eacc59276f7318af20b665ff86
[platform/framework/web/crosswalk.git] / src / tools / perf / benchmarks / dromaeo.py
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.
4
5 import os
6
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
12
13
14 class _DromaeoMeasurement(page_measurement.PageMeasurement):
15   def __init__(self):
16     super(_DromaeoMeasurement, self).__init__()
17     self._power_metric = power.PowerMetric()
18
19   def CustomizeBrowserOptions(self, options):
20     power.PowerMetric.CustomizeBrowserOptions(options)
21
22   def DidNavigateToPage(self, page, tab):
23     self._power_metric.Start(page, tab)
24
25   def MeasurePage(self, page, tab, results):
26     tab.WaitForJavaScriptExpression(
27         'window.document.cookie.indexOf("__done=1") >= 0', 600)
28
29     self._power_metric.Stop(page, tab)
30     self._power_metric.AddResults(tab, results)
31
32     js_get_results = 'JSON.stringify(window.automation.GetResults())'
33     print js_get_results
34     score = eval(tab.EvaluateJavaScript(js_get_results))
35
36     def Escape(k):
37       chars = [' ', '-', '/', '(', ')', '*']
38       for c in chars:
39         k = k.replace(c, '_')
40       return k
41
42     suffix = page.url[page.url.index('?') + 1 : page.url.index('&')]
43     for k, v in score.iteritems():
44       data_type = 'unimportant'
45       if k == suffix:
46         data_type = 'default'
47       results.Add(Escape(k), 'runs/s', float(v), data_type=data_type)
48
49
50 class _DromaeoBenchmark(test.Test):
51   """A base class for Dromaeo benchmarks."""
52   test = _DromaeoMeasurement
53
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'
63     page_set_dict = {
64         'description': description,
65         'pages': [{'url': url}],
66     }
67     dromaeo_dir = os.path.join(util.GetChromiumSrcDir(),
68                                'chrome', 'test', 'data', 'dromaeo')
69     return page_set.PageSet.FromDict(page_set_dict, dromaeo_dir)
70
71
72 class DromaeoDomCoreAttr(_DromaeoBenchmark):
73   """Dromaeo DOMCore attr JavaScript benchmark."""
74   tag = 'domcoreattr'
75   query_param = 'dom-attr'
76
77
78 class DromaeoDomCoreModify(_DromaeoBenchmark):
79   """Dromaeo DOMCore modify JavaScript benchmark."""
80   tag = 'domcoremodify'
81   query_param = 'dom-modify'
82
83
84 class DromaeoDomCoreQuery(_DromaeoBenchmark):
85   """Dromaeo DOMCore query JavaScript benchmark."""
86   tag = 'domcorequery'
87   query_param = 'dom-query'
88
89
90 class DromaeoDomCoreTraverse(_DromaeoBenchmark):
91   """Dromaeo DOMCore traverse JavaScript benchmark."""
92   tag = 'domcoretraverse'
93   query_param = 'dom-traverse'
94
95
96 class DromaeoJslibAttrJquery(_DromaeoBenchmark):
97   """Dromaeo JSLib attr jquery JavaScript benchmark"""
98   tag = 'jslibattrjquery'
99   query_param = 'jslib-attr-jquery'
100
101
102 class DromaeoJslibAttrPrototype(_DromaeoBenchmark):
103   """Dromaeo JSLib attr prototype JavaScript benchmark"""
104   tag = 'jslibattrprototype'
105   query_param = 'jslib-attr-prototype'
106
107
108 class DromaeoJslibEventJquery(_DromaeoBenchmark):
109   """Dromaeo JSLib event jquery JavaScript benchmark"""
110   tag = 'jslibeventjquery'
111   query_param = 'jslib-event-jquery'
112
113
114 class DromaeoJslibEventPrototype(_DromaeoBenchmark):
115   """Dromaeo JSLib event prototype JavaScript benchmark"""
116   tag = 'jslibeventprototype'
117   query_param = 'jslib-event-prototype'
118
119
120 class DromaeoJslibModifyJquery(_DromaeoBenchmark):
121   """Dromaeo JSLib modify jquery JavaScript benchmark"""
122   tag = 'jslibmodifyjquery'
123   query_param = 'jslib-modify-jquery'
124
125
126 class DromaeoJslibModifyPrototype(_DromaeoBenchmark):
127   """Dromaeo JSLib modify prototype JavaScript benchmark"""
128   tag = 'jslibmodifyprototype'
129   query_param = 'jslib-modify-prototype'
130
131
132 class DromaeoJslibStyleJquery(_DromaeoBenchmark):
133   """Dromaeo JSLib style jquery JavaScript benchmark"""
134   tag = 'jslibstylejquery'
135   query_param = 'jslib-style-jquery'
136
137
138 class DromaeoJslibStylePrototype(_DromaeoBenchmark):
139   """Dromaeo JSLib style prototype JavaScript benchmark"""
140   tag = 'jslibstyleprototype'
141   query_param = 'jslib-style-prototype'
142
143
144 class DromaeoJslibTraverseJquery(_DromaeoBenchmark):
145   """Dromaeo JSLib traverse jquery JavaScript benchmark"""
146   tag = 'jslibtraversejquery'
147   query_param = 'jslib-traverse-jquery'
148
149
150 class DromaeoJslibTraversePrototype(_DromaeoBenchmark):
151   """Dromaeo JSLib traverse prototype JavaScript benchmark"""
152   tag = 'jslibtraverseprototype'
153   query_param = 'jslib-traverse-prototype'
154