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 spaceport.io's PerfMarks benchmark.""" 6 7import logging 8import os 9 10from telemetry import test 11from telemetry.core import util 12from telemetry.page import page_measurement 13from telemetry.page import page_set 14 15 16class _SpaceportMeasurement(page_measurement.PageMeasurement): 17 def __init__(self): 18 super(_SpaceportMeasurement, self).__init__() 19 20 def CustomizeBrowserOptions(self, options): 21 options.AppendExtraBrowserArgs('--disable-gpu-vsync') 22 23 def MeasurePage(self, page, tab, results): 24 tab.WaitForJavaScriptExpression( 25 '!document.getElementById("start-performance-tests").disabled', 60) 26 27 tab.ExecuteJavaScript(""" 28 window.__results = {}; 29 window.console.log = function(str) { 30 if (!str) return; 31 var key_val = str.split(': '); 32 if (!key_val.length == 2) return; 33 __results[key_val[0]] = key_val[1]; 34 }; 35 document.getElementById('start-performance-tests').click(); 36 """) 37 38 num_results = 0 39 num_tests_in_spaceport = 24 40 while num_results < num_tests_in_spaceport: 41 tab.WaitForJavaScriptExpression( 42 'Object.keys(window.__results).length > %d' % num_results, 180) 43 num_results = tab.EvaluateJavaScript( 44 'Object.keys(window.__results).length') 45 logging.info('Completed test %d of %d' % 46 (num_results, num_tests_in_spaceport)) 47 48 result_dict = eval(tab.EvaluateJavaScript( 49 'JSON.stringify(window.__results)')) 50 for key in result_dict: 51 chart, trace = key.split('.', 1) 52 results.Add(trace, 'objects (bigger is better)', float(result_dict[key]), 53 chart_name=chart, data_type='unimportant') 54 results.Add('Score', 'objects (bigger is better)', 55 [float(x) for x in result_dict.values()]) 56 57 58# crbug.com/166703: This test frequently times out on Windows. 59@test.Disabled('mac', 'win') 60class Spaceport(test.Test): 61 """spaceport.io's PerfMarks benchmark.""" 62 test = _SpaceportMeasurement 63 64 def CreatePageSet(self, options): 65 spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', 66 'data', 'third_party', 'spaceport') 67 ps = page_set.PageSet(file_path=spaceport_dir) 68 ps.AddPageWithDefaultRunNavigate('file://index.html') 69 return ps 70