• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 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.
4import collections
5import json
6import os
7
8from metrics import power
9from telemetry import test
10from telemetry.page import page_measurement
11from 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
17class _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
54class Sunspider(test.Test):
55  """Apple's SunSpider JavaScript benchmark."""
56  test = _SunspiderMeasurement
57
58  def CreatePageSet(self, options):
59    ps = page_set.PageSet(
60      archive_data_file='../page_sets/data/sunspider.json',
61      make_javascript_deterministic=False,
62      file_path=os.path.abspath(__file__))
63    ps.AddPageWithDefaultRunNavigate(_URL)
64    return ps
65