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 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