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)"""PeaceKeeper benchmark suite.
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Peacekeeper measures browser's performance by testing its JavaScript
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)functionality. JavaScript is a widely used programming language used in the
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)creation of modern websites to provide features such as animation, navigation,
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)forms and other common requirements. By measuring a browser's ability to handle
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)commonly used JavaScript functions Peacekeeper can evaluate its performance.
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Peacekeeper scores are measured in operations per second or rendered frames per
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)second depending on the test. Final Score is computed by calculating geometric
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)mean of individual tests scores.
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)"""
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.page import page_set
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.page import page_test
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from telemetry.util import statistics
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.value import merge_values
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)from telemetry.value import scalar
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class _PeaceKeeperMeasurement(page_test.PageTest):
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def WillNavigateToPage(self, page, tab):
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    page.script_to_evaluate_on_commit = """
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        var __results = {};
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        var _done = false;
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        var __real_log = window.console.log;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        var test_frame = null;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        var benchmark = null;
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        window.console.log = function(msg) {
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          if (typeof(msg) == "string" && (msg.indexOf("benchmark")) == 0) {
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            test_frame = document.getElementById("testFrame");
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            benchmark =  test_frame.contentWindow.benchmark;
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            test_frame.contentWindow.onbeforeunload = {};
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            if ((msg.indexOf("Submit ok.")) != -1) {
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              _done = true;
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              __results["test"] = benchmark.testObjectName;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              __results["score"] = benchmark.test.result;
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              if (typeof(benchmark.test.unit) != "undefined") {
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                __results["unit"] = benchmark.test.unit;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              } else {
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                __results["unit"] = benchmark.test.isFps ? "fps" : "ops";
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              }
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            }
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          }
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)          __real_log.apply(this, [msg]);
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        }
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        """
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  def ValidateAndMeasurePage(self, _, tab, results):
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    tab.WaitForJavaScriptExpression('_done', 600)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    result = tab.EvaluateJavaScript('__results')
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    results.AddValue(scalar.ScalarValue(
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        results.current_page, '%s.Score' % result['test'], 'score',
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        int(result['score'])), important=False)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def DidRunTest(self, browser, results):
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Calculate geometric mean as the total for the combined tests.
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    combined = merge_values.MergeLikeValuesFromDifferentPages(
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        results.all_page_specific_values,
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        group_by_name_suffix=True)
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    combined_score = [x for x in combined if x.name == 'Score'][0]
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    total = statistics.GeometricMean(combined_score.values)
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    results.AddSummaryValue(
7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        scalar.ScalarValue(None, 'Total.Score', 'score', total))
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PeaceKeeperBenchmark(benchmark.Benchmark):
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """A base class for Peackeeper benchmarks."""
7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  test = _PeaceKeeperMeasurement
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  def CreatePageSet(self, options):
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    """Makes a PageSet for PeaceKeeper benchmarks."""
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    # Subclasses are expected to define a class member called query_param.
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if not hasattr(self, 'test_param'):
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      raise NotImplementedError('test_param not in PeaceKeeper benchmark.')
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ps = page_set.PageSet(
855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      archive_data_file='../page_sets/data/peacekeeper_%s.json' % self.tag,
865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      make_javascript_deterministic=False)
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    for test_name in self.test_param:
885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      ps.AddPageWithDefaultRunNavigate(
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        ('http://peacekeeper.futuremark.com/run.action?debug=true&'
905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu         'repeat=false&forceSuiteName=%s&forceTestName=%s') %
915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        (self.tag, test_name))
925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return ps
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperRender(PeaceKeeperBenchmark):
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper rendering benchmark suite.
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests measure your browser's ability to render and modify specific
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  elements used in typical web pages. Rendering tests manipulate the DOM tree in
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  real-time. The tests measure display updating speed (frames per seconds).
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'render'
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['renderGrid01',
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'renderGrid02',
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'renderGrid03',
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'renderPhysics'
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               ]
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperData(PeaceKeeperBenchmark):
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper Data operations benchmark suite.
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests measure your browser's ability to add, remove and modify data
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  stored in an array. The Data suite consists of two tests:
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  1. arrayCombined: This test uses all features of the JavaScript Array object.
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  This is a technical test that is not based on profiled data.
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  The source data are different sized arrays of numbers.
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  2. arrayWeighted: This test is similar to 'arrayCombined', but the load is
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  balanced based on profiled data. The source data is a list of all the
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  countries in the world.
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'array'
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['arrayCombined01',
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'arrayWeighted'
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               ]
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperDom(PeaceKeeperBenchmark):
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper DOM operations benchmark suite.
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests emulate the methods used to create typical dynamic webpages.
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  The DOM tests are based on development experience and the capabilities of the
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  jQuery framework.
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  1. domGetElements: This test uses native DOM methods getElementById and
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    getElementsByName. The elements are not modified.
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  2. domDynamicCreationCreateElement: A common use of DOM is to dynamically
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    create content with JavaScript, this test measures creating objects
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    individually and then appending them to DOM.
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  3. domDynamicCreationInnerHTML: This test is similarl to the previous one,
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    but uses the innerHTML-method.
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  4. domJQueryAttributeFilters: This test does a DOM query with jQuery.
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    It searches elements with specific attributes.
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  5. domJQueryBasicFilters: This test uses filters to query elements from DOM.
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  6. domJQueryBasics: This test queries elements from DOM with basic methods.
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    It is similar to domGetElements, but uses jQuery rather than native methods.
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  7. domJQueryContentFilters: Query elements based on content. This does string
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    searching and these methods are assumed to be time consuming.
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  8. domJQueryHierarchy: Query elements based on hierarchy, such as getting
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    sibling, parent or child nodes from a DOM tree.
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  9. domQueryselector: QuerySelector, which allows JavaScript to search elements
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    from the DOM tree directly without the need to iterate the whole tree
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    through domGetElements.
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'dom'
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['domGetElements',
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domDynamicCreationCreateElement',
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domDynamicCreationInnerHTML',
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domJQueryAttributeFilters',
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domJQueryBasicFilters',
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domJQueryBasics',
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domJQueryContentFilters',
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domJQueryHierarchy',
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'domQueryselector'
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               ]
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperTextParsing(PeaceKeeperBenchmark):
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper Text Parsing benchmark suite.
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests measure your browser's performance in typical text manipulations
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  such as using a profanity filter for chats, browser detection and form
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  validation.
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  1. stringChat: This test removes swearing from artificial chat messages.
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Test measures looping and string replace-method.
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  2. stringDetectBrowser: This test uses string indexOf-method to detect browser
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    and operating system.
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  3. stringFilter: This test filters a list of movies with a given keyword.
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    The behaviour is known as filtering select or continuous filter. It's used
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    to give real time suggestions while a user is filling input fields.
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    The test uses simple regular expressions.
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  4. stringValidateForm: This test uses complex regular expressions to validate
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    user input.
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  5. stringWeighted: This is an artificial test. Methods used and their
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    intensities are chosen based on profiled data.
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'string'
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['stringChat',
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'stringDetectBrowser',
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'stringFilter',
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'stringWeighted',
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'stringValidateForm'
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               ]
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperHTML5Canvas(PeaceKeeperBenchmark):
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper HTML5 Canvas benchmark suite.
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests use HTML5 Canvas, which is a web technology for drawing and
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  manipulating graphics without external plug-ins.
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  1. experimentalRipple01: Simulates a 'water ripple' effect by using HTML 5
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Canvas. It measures the browser's ability to draw individual pixels.
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  2. experimentalRipple02: Same test as 'experimentalRipple01', but with a
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    larger canvas and thus a heavier workload.
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'experimental'
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['experimentalRipple01',
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'experimentalRipple02'
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               ]
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@benchmark.Disabled
221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PeaceKeeperHTML5Capabilities(PeaceKeeperBenchmark):
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """PeaceKeeper HTML5 Capabilities benchmark suite.
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  These tests checks browser HTML5 capabilities support for WebGL, Video
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  foramts, simple 2D sprite based games and web worker.
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  This benchmark only tests HTML5 capability and thus is not calculate into the
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  overall score.
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  1. HTML5 - WebGL: WebGL allows full blown 3D graphics to be rendered in a
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    browser without the need for any external plug-ins.
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    a) webglSphere
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  2. HTML5 - Video: hese tests find out which HTML5 video formats are supposed
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    by your browser. Peacekeeper only checks if your browser is able to play a
233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    specific format, no other valuation is done.
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    a) videoCodecH264
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    b) videoCodecTheora
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    c) videoCodecWebM
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    d) videoPosterSupport
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  3.HTML5 - Web Worker: These tests use HTML5 Web Worker, which allows
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    JavaScript to multhread - ie. the ability to perform multiple actions
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    concurrently.
241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    a) workerContrast01
242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    b) workerContrast02
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  4. HTML5 - Game: This test simulates a simple 2D, sprite-based game.
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    The test itself is the real game, and what is shown is a recorded play.
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    a) gamingSpitfire
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  """
247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  tag = 'html5'
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_param = ['webglSphere',
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'gamingSpitfire',
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'videoCodecH264',
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'videoCodecTheora',
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'videoCodecWebM',
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'videoPosterSupport',
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'workerContrast01',
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                'workerContrast02'
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                ]
258