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. 4 5"""Scirra WebGL and Canvas2D rendering benchmark suite. 6 7The Scirra WebGL performance test measures the number of 2D triangles 8represented onscreen when the animation reaches the 30 FPS threshold. 9""" 10 11import os 12 13from telemetry import benchmark 14from telemetry.page import page_set 15from telemetry.page import page_test 16from telemetry.value import scalar 17 18 19class _ScirraMeasurement(page_test.PageTest): 20 21 def WillNavigateToPage(self, page, tab): 22 page.script_to_evaluate_on_commit = 'window.sprites = 0;' 23 24 def ValidateAndMeasurePage(self, _, tab, results): 25 object_count = '$objectcount$' 26 fps = '$fps$' 27 tickcount = '$tickcount$' 28 # For http://www.scirra.com/labs/renderperf3/, JavaScript generated by 29 # Construct 2 has different variables for Objects, fps and tickcount. 30 if 'renderperf3' in tab.url: 31 object_count = '$d' 32 fps = 'Rb' 33 tickcount = 'Ff' 34 35 # Updates object count variable, when the FPS reaches 30 threshold and 36 # tickcounts to reach value greater than 500(just to stablize frames). 37 js_is_done = """ 38 var IsTestDone = function() { 39 if (window.cr_getC2Runtime().%(tickcount)s > 500 && 40 window.cr_getC2Runtime().%(fps)s == 30) { 41 window.sprites = window.cr_getC2Runtime().%(object_count)s; 42 return true; 43 } else { 44 return false; 45 } 46 }; 47 IsTestDone(); 48 """ % {'tickcount': tickcount, 'fps': fps, 'object_count': object_count} 49 tab.WaitForJavaScriptExpression(js_is_done, 300) 50 total = int(tab.EvaluateJavaScript('window.sprites')) 51 results.AddValue(scalar.ScalarValue( 52 results.current_page, 'Count', 'count', total)) 53 54@benchmark.Disabled 55class ScirraBenchmark(benchmark.Benchmark): 56 """WebGL and Canvas2D rendering benchmark suite.""" 57 test = _ScirraMeasurement 58 def CreatePageSet(self, options): 59 ps = page_set.PageSet( 60 archive_data_file='../page_sets/data/scirra.json', 61 make_javascript_deterministic=False, 62 file_path=os.path.abspath(__file__)) 63 for url in ('http://www.scirra.com/labs/renderperf3/', 64 'http://www.scirra.com/demos/c2/renderperfgl/', 65 'http://www.scirra.com/demos/c2/renderperf2d/'): 66 ps.AddPageWithDefaultRunNavigate(url) 67 return ps 68 69 70 71