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.
4import hardware_accelerated_feature_expectations as expectations
5
6from telemetry import benchmark
7from telemetry.page import page as page_module
8from telemetry.page import page_set
9from telemetry.page import page_test
10
11test_harness_script = r"""
12  function VerifyHardwareAccelerated(feature) {
13    feature += ': '
14    var list = document.querySelector('.feature-status-list');
15    for (var i=0; i < list.childElementCount; i++) {
16      var span_list = list.children[i].getElementsByTagName('span');
17      var feature_str = span_list[0].textContent;
18      var value_str = span_list[1].textContent;
19      if ((feature_str == feature) &&
20          (value_str == 'Hardware accelerated')) {
21        return true;
22      }
23    }
24    return false;
25  };
26""";
27
28class _HardwareAcceleratedFeatureValidator(page_test.PageTest):
29  def ValidateAndMeasurePage(self, page, tab, results):
30    feature = page.feature
31    if not tab.EvaluateJavaScript('VerifyHardwareAccelerated("%s")' % feature):
32      print 'Test failed. Printing page contents:'
33      print tab.EvaluateJavaScript('document.body.innerHTML')
34      raise page_test.Failure('%s not hardware accelerated' % feature)
35
36def safe_feature_name(feature):
37  return feature.lower().replace(' ', '_')
38
39class ChromeGpuPage(page_module.Page):
40  def __init__(self, page_set, feature):
41    super(ChromeGpuPage, self).__init__(
42      url='chrome://gpu', page_set=page_set, base_dir=page_set.base_dir,
43      name=('HardwareAcceleratedFeature.%s_accelerated' %
44            safe_feature_name(feature)))
45    self.feature = feature
46    self.script_to_evaluate_on_commit = test_harness_script
47
48class HardwareAcceleratedFeature(benchmark.Benchmark):
49  """Tests GPU acceleration is reported as active for various features"""
50  test = _HardwareAcceleratedFeatureValidator
51
52  def CreateExpectations(self, page_set):
53    return expectations.HardwareAcceleratedFeatureExpectations()
54
55  def CreatePageSet(self, options):
56    features = ['WebGL', 'Canvas']
57
58    ps = page_set.PageSet(user_agent_type='desktop', file_path='')
59
60    for feature in features:
61      ps.AddPage(ChromeGpuPage(page_set=ps, feature=feature))
62    return ps
63