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 7 The Scirra WebGL performance test measures the number of 2D triangles 8 represented onscreen when the animation reaches the 30 FPS threshold. 9 """ 10 11 import os 12 13 from telemetry import benchmark 14 from telemetry.page import page_set 15 from telemetry.page import page_test 16 from telemetry.value import scalar 17 18 19 class _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 55 class 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