• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2012 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"""Runs Mozilla's Kraken JavaScript benchmark."""
6
7import os
8
9from metrics import power
10from telemetry import test
11from telemetry.page import page_measurement
12from telemetry.page import page_set
13
14
15def _Mean(l):
16  return float(sum(l)) / len(l) if len(l) > 0 else 0.0
17
18
19class _KrakenMeasurement(page_measurement.PageMeasurement):
20  def __init__(self):
21    super(_KrakenMeasurement, self).__init__()
22    self._power_metric = power.PowerMetric()
23
24  def CustomizeBrowserOptions(self, options):
25    power.PowerMetric.CustomizeBrowserOptions(options)
26
27  def DidNavigateToPage(self, page, tab):
28    self._power_metric.Start(page, tab)
29
30  def MeasurePage(self, page, tab, results):
31    tab.WaitForJavaScriptExpression(
32        'document.title.indexOf("Results") != -1', 700)
33    tab.WaitForDocumentReadyStateToBeComplete()
34
35    self._power_metric.Stop(page, tab)
36    self._power_metric.AddResults(tab, results)
37
38    js_get_results = """
39var formElement = document.getElementsByTagName("input")[0];
40decodeURIComponent(formElement.value.split("?")[1]);
41"""
42    result_dict = eval(tab.EvaluateJavaScript(js_get_results))
43    total = 0
44    for key in result_dict:
45      if key == 'v':
46        continue
47      results.Add(key, 'ms', result_dict[key], data_type='unimportant')
48      total += _Mean(result_dict[key])
49    results.Add('Total', 'ms', total)
50
51
52class Kraken(test.Test):
53  """Mozilla's Kraken JavaScript benchmark."""
54  test = _KrakenMeasurement
55
56  def CreatePageSet(self, options):
57    ps = page_set.PageSet(
58      archive_data_file='../page_sets/data/kraken.json',
59      file_path=os.path.abspath(__file__))
60    ps.AddPageWithDefaultRunNavigate(
61      'http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html')
62    return ps
63