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