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