Home | History | Annotate | Download | only in benchmarks
      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 test
     14 from telemetry.page import page_measurement
     15 from telemetry.page import page_set
     16 
     17 
     18 class ScirraMeasurement(page_measurement.PageMeasurement):
     19 
     20   def WillNavigateToPage(self, page, tab):
     21     page.script_to_evaluate_on_commit = 'window.sprites = 0;'
     22 
     23   def MeasurePage(self, _, tab, results):
     24     object_count = '$objectcount$'
     25     fps = '$fps$'
     26     tickcount = '$tickcount$'
     27     # For http://www.scirra.com/labs/renderperf3/, JavaScript generated by
     28     # Construct 2 has different variables for Objects, fps and tickcount.
     29     if 'renderperf3' in tab.url:
     30       object_count = '$d'
     31       fps = 'Rb'
     32       tickcount = 'Ff'
     33 
     34     # Updates object count variable, when the FPS reaches 30 threshold and
     35     # tickcounts to reach value greater than 500(just to stablize frames).
     36     js_is_done = """
     37         var IsTestDone = function() {
     38           if (window.cr_getC2Runtime().%(tickcount)s > 500 &&
     39               window.cr_getC2Runtime().%(fps)s == 30) {
     40             window.sprites = window.cr_getC2Runtime().%(object_count)s;
     41             return true;
     42           } else {
     43             return false;
     44           }
     45         };
     46         IsTestDone();
     47         """ % {'tickcount': tickcount, 'fps': fps, 'object_count': object_count}
     48     tab.WaitForJavaScriptExpression(js_is_done, 300)
     49     total = int(tab.EvaluateJavaScript('window.sprites'))
     50     results.Add('Count', 'count', total)
     51 
     52 
     53 class ScirraBenchmark(test.Test):
     54   """WebGL and Canvas2D rendering benchmark suite."""
     55   test = ScirraMeasurement
     56   def CreatePageSet(self, options):
     57     return page_set.PageSet.FromDict({
     58         'archive_data_file': '../page_sets/data/scirra.json',
     59         'make_javascript_deterministic': False,
     60         'pages': [
     61             { 'url': 'http://www.scirra.com/labs/renderperf3/'},
     62             { 'url': 'http://www.scirra.com/demos/c2/renderperfgl/'},
     63             { 'url': 'http://www.scirra.com/demos/c2/renderperf2d/'}
     64           ]
     65         }, os.path.abspath(__file__))
     66 
     67