summaryrefslogtreecommitdiffstats
path: root/content/test/gpu/gpu_tests/hardware_accelerated_feature.py
blob: af81c0d257eed908c7d83aee0d0597cab89e4008 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import hardware_accelerated_feature_expectations as expectations

from telemetry import benchmark
from telemetry.page import page as page_module
from telemetry.page import page_set
from telemetry.page import page_test

test_harness_script = r"""
  function VerifyHardwareAccelerated(feature) {
    feature += ': '
    var list = document.querySelector('.feature-status-list');
    for (var i=0; i < list.childElementCount; i++) {
      var span_list = list.children[i].getElementsByTagName('span');
      var feature_str = span_list[0].textContent;
      var value_str = span_list[1].textContent;
      if ((feature_str == feature) &&
          (value_str == 'Hardware accelerated')) {
        return true;
      }
    }
    return false;
  };
""";

class _HardwareAcceleratedFeatureValidator(page_test.PageTest):
  def ValidateAndMeasurePage(self, page, tab, results):
    feature = page.feature
    if not tab.EvaluateJavaScript('VerifyHardwareAccelerated("%s")' % feature):
      print 'Test failed. Printing page contents:'
      print tab.EvaluateJavaScript('document.body.innerHTML')
      raise page_test.Failure('%s not hardware accelerated' % feature)

def safe_feature_name(feature):
  return feature.lower().replace(' ', '_')

class ChromeGpuPage(page_module.Page):
  def __init__(self, page_set, feature):
    super(ChromeGpuPage, self).__init__(
      url='chrome://gpu', page_set=page_set, base_dir=page_set.base_dir,
      name=('HardwareAcceleratedFeature.%s_accelerated' %
            safe_feature_name(feature)))
    self.feature = feature
    self.script_to_evaluate_on_commit = test_harness_script

class HardwareAcceleratedFeature(benchmark.Benchmark):
  """Tests GPU acceleration is reported as active for various features"""
  test = _HardwareAcceleratedFeatureValidator

  @classmethod
  def Name(cls):
    return 'hardware_accelerated_feature'

  def CreateExpectations(self):
    return expectations.HardwareAcceleratedFeatureExpectations()

  def CreatePageSet(self, options):
    features = ['WebGL', 'Canvas']

    ps = page_set.PageSet(user_agent_type='desktop', file_path='')

    for feature in features:
      ps.AddUserStory(ChromeGpuPage(page_set=ps, feature=feature))
    return ps