OLD | NEW |
1 # Copyright 2012 The Chromium Authors. All rights reserved. | 1 # Copyright 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Runs spaceport.io's PerfMarks benchmark.""" | 5 """Runs spaceport.io's PerfMarks benchmark.""" |
6 | 6 |
7 import logging | 7 import logging |
8 import os | 8 import os |
9 | 9 |
10 from telemetry import benchmark | 10 from telemetry import benchmark |
11 from telemetry.core import util | 11 from telemetry.core import util |
12 from telemetry.page import page_measurement | 12 from telemetry.page import page_measurement |
13 from telemetry.page import page_set | 13 from telemetry.page import page_set |
14 from telemetry.value import list_of_scalar_values | 14 from telemetry.value import list_of_scalar_values |
15 from telemetry.value import scalar | 15 from telemetry.value import scalar |
16 | 16 |
| 17 DESCRIPTIONS = { |
| 18 'canvasDrawImageFullClear': |
| 19 'Using a canvas element to render. Bitmaps are blitted to the canvas ' |
| 20 'using the "drawImage" function and the canvas is fully cleared at ' |
| 21 'the beginning of each frame.', |
| 22 'canvasDrawImageFullClearAlign': |
| 23 'Same as canvasDrawImageFullClear except all "x" and "y" values are ' |
| 24 'rounded to the nearest integer. This can be more efficient on ' |
| 25 'translate on certain browsers.', |
| 26 'canvasDrawImagePartialClear': |
| 27 'Using a canvas element to render. Bitmaps are blitted to the canvas ' |
| 28 'using the "drawImage" function and pixels drawn in the last frame ' |
| 29 'are cleared to the clear color at the beginning of each frame. ' |
| 30 'This is generally slower on hardware accelerated implementations, ' |
| 31 'but sometimes faster on CPU-based implementations.', |
| 32 'canvasDrawImagePartialClearAlign': |
| 33 'Same as canvasDrawImageFullClearAlign but only partially clearing ' |
| 34 'the canvas each frame.', |
| 35 'css2dBackground': |
| 36 'Using div elements that have a background image specified using CSS ' |
| 37 'styles. These div elements are translated, scaled, and rotated using ' |
| 38 'CSS-2D transforms.', |
| 39 'css2dImg': |
| 40 'Same as css2dBackground, but using img elements instead of div ' |
| 41 'elements.', |
| 42 'css3dBackground': |
| 43 'Same as css2dBackground, but using CSS-3D transforms.', |
| 44 'css3dImg': |
| 45 'Same as css2dImage but using CSS-3D tranforms.', |
| 46 } |
| 47 |
17 | 48 |
18 class _SpaceportMeasurement(page_measurement.PageMeasurement): | 49 class _SpaceportMeasurement(page_measurement.PageMeasurement): |
19 def __init__(self): | 50 def __init__(self): |
20 super(_SpaceportMeasurement, self).__init__() | 51 super(_SpaceportMeasurement, self).__init__() |
21 | 52 |
22 def CustomizeBrowserOptions(self, options): | 53 def CustomizeBrowserOptions(self, options): |
23 options.AppendExtraBrowserArgs('--disable-gpu-vsync') | 54 options.AppendExtraBrowserArgs('--disable-gpu-vsync') |
24 | 55 |
25 def MeasurePage(self, page, tab, results): | 56 def MeasurePage(self, page, tab, results): |
26 tab.WaitForJavaScriptExpression( | 57 tab.WaitForJavaScriptExpression( |
27 '!document.getElementById("start-performance-tests").disabled', 60) | 58 '!document.getElementById("start-performance-tests").disabled', 60) |
28 | 59 |
29 tab.ExecuteJavaScript(""" | 60 tab.ExecuteJavaScript(""" |
30 window.__results = {}; | 61 window.__results = {}; |
31 window.console.log = function(str) { | 62 window.console.log = function(str) { |
32 if (!str) return; | 63 if (!str) return; |
33 var key_val = str.split(': '); | 64 var key_val = str.split(': '); |
34 if (!key_val.length == 2) return; | 65 if (!key_val.length == 2) return; |
35 __results[key_val[0]] = key_val[1]; | 66 __results[key_val[0]] = key_val[1]; |
36 }; | 67 }; |
37 document.getElementById('start-performance-tests').click(); | 68 document.getElementById('start-performance-tests').click(); |
38 """) | 69 """) |
39 | 70 |
40 num_results = 0 | 71 num_results = 0 |
41 num_tests_in_spaceport = 24 | 72 num_tests_in_spaceport = 24 |
42 while num_results < num_tests_in_spaceport: | 73 while num_results < num_tests_in_spaceport: |
43 tab.WaitForJavaScriptExpression( | 74 tab.WaitForJavaScriptExpression( |
44 'Object.keys(window.__results).length > %d' % num_results, 180) | 75 'Object.keys(window.__results).length > %d' % num_results, 180) |
45 num_results = tab.EvaluateJavaScript( | 76 num_results = tab.EvaluateJavaScript( |
46 'Object.keys(window.__results).length') | 77 'Object.keys(window.__results).length') |
47 logging.info('Completed test %d of %d' % | 78 logging.info('Completed test %d of %d' % |
48 (num_results, num_tests_in_spaceport)) | 79 (num_results, num_tests_in_spaceport)) |
49 | 80 |
50 result_dict = eval(tab.EvaluateJavaScript( | 81 result_dict = eval(tab.EvaluateJavaScript( |
51 'JSON.stringify(window.__results)')) | 82 'JSON.stringify(window.__results)')) |
52 for key in result_dict: | 83 for key in result_dict: |
53 chart, trace = key.split('.', 1) | 84 chart, trace = key.split('.', 1) |
54 results.AddValue(scalar.ScalarValue( | 85 results.AddValue(scalar.ScalarValue( |
55 results.current_page, '%s.%s'% (chart, trace), | 86 results.current_page, '%s.%s'% (chart, trace), |
56 'objects (bigger is better)', float(result_dict[key]), | 87 'objects (bigger is better)', float(result_dict[key]), |
57 important=False)) | 88 important=False, description=DESCRIPTIONS.get(chart))) |
58 results.AddValue(list_of_scalar_values.ListOfScalarValues( | 89 results.AddValue(list_of_scalar_values.ListOfScalarValues( |
59 results.current_page, 'Score', 'objects (bigger is better)', | 90 results.current_page, 'Score', 'objects (bigger is better)', |
60 [float(x) for x in result_dict.values()])) | 91 [float(x) for x in result_dict.values()], |
| 92 description='Combined score for all parts of the spaceport benchmark.')) |
61 | 93 |
62 | 94 |
63 # crbug.com/166703: This test frequently times out on Windows. | 95 # crbug.com/166703: This test frequently times out on Windows. |
64 @benchmark.Disabled('mac', 'win') | 96 @benchmark.Disabled('mac', 'win') |
65 class Spaceport(benchmark.Benchmark): | 97 class Spaceport(benchmark.Benchmark): |
66 """spaceport.io's PerfMarks benchmark.""" | 98 """spaceport.io's PerfMarks benchmark.""" |
67 test = _SpaceportMeasurement | 99 test = _SpaceportMeasurement |
68 | 100 |
69 def CreatePageSet(self, options): | 101 def CreatePageSet(self, options): |
70 spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', | 102 spaceport_dir = os.path.join(util.GetChromiumSrcDir(), 'chrome', 'test', |
71 'data', 'third_party', 'spaceport') | 103 'data', 'third_party', 'spaceport') |
72 ps = page_set.PageSet(file_path=spaceport_dir) | 104 ps = page_set.PageSet(file_path=spaceport_dir) |
73 ps.AddPageWithDefaultRunNavigate('file://index.html') | 105 ps.AddPageWithDefaultRunNavigate('file://index.html') |
74 return ps | 106 return ps |
OLD | NEW |