1 # Copyright (c) 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 spaceport.io's PerfMarks benchmark.""" 6 7 import logging 8 import os 9 10 from telemetry import test 11 from telemetry.core import util 12 from telemetry.page import page_measurement 13 from telemetry.page import page_set 14 15 16 class SpaceportMeasurement(page_measurement.PageMeasurement): 17 def CustomizeBrowserOptions(self, options): 18 options.extra_browser_args.extend(['--disable-gpu-vsync']) 19 20 def MeasurePage(self, _, tab, results): 21 util.WaitFor(lambda: tab.EvaluateJavaScript( 22 '!document.getElementById("start-performance-tests").disabled'), 60) 23 24 tab.ExecuteJavaScript(""" 25 window.__results = {}; 26 window.console.log = function(str) { 27 if (!str) return; 28 var key_val = str.split(': '); 29 if (!key_val.length == 2) return; 30 __results[key_val[0]] = key_val[1]; 31 }; 32 document.getElementById('start-performance-tests').click(); 33 """) 34 35 js_get_results = 'JSON.stringify(window.__results)' 36 num_tests_complete = [0] # A list to work around closure issue. 37 def _IsDone(): 38 num_tests_in_measurement = 24 39 num_results = len(eval(tab.EvaluateJavaScript(js_get_results))) 40 if num_results > num_tests_complete[0]: 41 num_tests_complete[0] = num_results 42 logging.info('Completed measurement %d of %d' 43 % (num_tests_complete[0], 44 num_tests_in_measurement)) 45 return num_tests_complete[0] >= num_tests_in_measurement 46 util.WaitFor(_IsDone, 1200, poll_interval=5) 47 48 result_dict = eval(tab.EvaluateJavaScript(js_get_results)) 49 for key in result_dict: 50 chart, trace = key.split('.', 1) 51 results.Add(trace, 'objects (bigger is better)', float(result_dict[key]), 52 chart_name=chart, data_type='unimportant') 53 results.Add('Score', 'objects (bigger is better)', 54 [float(x) for x in result_dict.values()]) 55 56 57 class Spaceport(test.Test): 58 """spaceport.io's PerfMarks benchmark.""" 59 test = SpaceportMeasurement 60 61 def CreatePageSet(self, options): 62 spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', 63 'data', 'third_party', 'spaceport') 64 return page_set.PageSet.FromDict( 65 {'pages': [{'url': 'file:///index.html'}]}, 66 spaceport_dir) 67