1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)"""Scirra WebGL and Canvas2D rendering benchmark suite. 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)The Scirra WebGL performance test measures the number of 2D triangles 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)represented onscreen when the animation reaches the 30 FPS threshold. 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)""" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import os 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry import test 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_measurement 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_set 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ScirraMeasurement(page_measurement.PageMeasurement): 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def WillNavigateToPage(self, page, tab): 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) page.script_to_evaluate_on_commit = 'window.sprites = 0;' 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def MeasurePage(self, _, tab, results): 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) object_count = '$objectcount$' 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fps = '$fps$' 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tickcount = '$tickcount$' 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # For http://www.scirra.com/labs/renderperf3/, JavaScript generated by 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Construct 2 has different variables for Objects, fps and tickcount. 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if 'renderperf3' in tab.url: 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) object_count = '$d' 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fps = 'Rb' 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tickcount = 'Ff' 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # Updates object count variable, when the FPS reaches 30 threshold and 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) # tickcounts to reach value greater than 500(just to stablize frames). 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) js_is_done = """ 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) var IsTestDone = function() { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (window.cr_getC2Runtime().%(tickcount)s > 500 && 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window.cr_getC2Runtime().%(fps)s == 30) { 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window.sprites = window.cr_getC2Runtime().%(object_count)s; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IsTestDone(); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """ % {'tickcount': tickcount, 'fps': fps, 'object_count': object_count} 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tab.WaitForJavaScriptExpression(js_is_done, 300) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) total = int(tab.EvaluateJavaScript('window.sprites')) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) results.Add('Count', 'count', total) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ScirraBenchmark(test.Test): 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """WebGL and Canvas2D rendering benchmark suite.""" 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test = ScirraMeasurement 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def CreatePageSet(self, options): 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return page_set.PageSet.FromDict({ 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'archive_data_file': '../page_sets/data/scirra.json', 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'make_javascript_deterministic': False, 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'pages': [ 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 'url': 'http://www.scirra.com/labs/renderperf3/'}, 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 'url': 'http://www.scirra.com/demos/c2/renderperfgl/'}, 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 'url': 'http://www.scirra.com/demos/c2/renderperf2d/'} 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ] 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }, os.path.abspath(__file__)) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67