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