Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / tools / perf / benchmarks / sunspider.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 import collections
5 import json
6 import os
7
8 from metrics import power
9 from telemetry import test
10 from telemetry.page import page_measurement
11 from telemetry.page import page_set
12
13
14 _URL = 'http://www.webkit.org/perf/sunspider-1.0.2/sunspider-1.0.2/driver.html'
15
16
17 class _SunspiderMeasurement(page_measurement.PageMeasurement):
18   def __init__(self):
19     super(_SunspiderMeasurement, self).__init__()
20     self._power_metric = power.PowerMetric()
21
22   def CustomizeBrowserOptions(self, options):
23     power.PowerMetric.CustomizeBrowserOptions(options)
24
25   def DidNavigateToPage(self, page, tab):
26     self._power_metric.Start(page, tab)
27
28   def MeasurePage(self, page, tab, results):
29     tab.WaitForJavaScriptExpression(
30         'window.location.pathname.indexOf("results.html") >= 0'
31         '&& typeof(output) != "undefined"', 300)
32
33     self._power_metric.Stop(page, tab)
34     self._power_metric.AddResults(tab, results)
35
36     js_get_results = 'JSON.stringify(output);'
37     js_results = json.loads(tab.EvaluateJavaScript(js_get_results))
38     r = collections.defaultdict(list)
39     totals = []
40     # js_results is: [{'foo': v1, 'bar': v2},
41     #                 {'foo': v3, 'bar': v4},
42     #                 ...]
43     for result in js_results:
44       total = 0
45       for key, value in result.iteritems():
46         r[key].append(value)
47         total += value
48       totals.append(total)
49     for key, values in r.iteritems():
50       results.Add(key, 'ms', values, data_type='unimportant')
51     results.Add('Total', 'ms', totals)
52
53
54 class Sunspider(test.Test):
55   """Apple's SunSpider JavaScript benchmark."""
56   test = _SunspiderMeasurement
57
58   def CreatePageSet(self, options):
59     return page_set.PageSet.FromDict(
60         {
61           'archive_data_file': '../page_sets/data/sunspider.json',
62           'make_javascript_deterministic': False,
63           'pages': [{ 'url': _URL }],
64         }, os.path.abspath(__file__))