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 gpu_process_expectations as expectations
5import page_sets
6
7from telemetry import benchmark
8from telemetry.page import page_set
9from telemetry.page import page_test
10
11test_harness_script = r"""
12  var domAutomationController = {};
13  domAutomationController._finished = false;
14  domAutomationController.setAutomationId = function(id) {}
15  domAutomationController.send = function(msg) {
16    domAutomationController._finished = true;
17  }
18
19  window.domAutomationController = domAutomationController;
20"""
21
22class _GpuProcessValidator(page_test.PageTest):
23  def __init__(self):
24    super(_GpuProcessValidator, self).__init__(
25        needs_browser_restart_after_each_page=True)
26
27  def CustomizeBrowserOptions(self, options):
28    options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
29
30  def ValidateAndMeasurePage(self, page, tab, results):
31    has_gpu_process_js = 'chrome.gpuBenchmarking.hasGpuProcess()'
32    has_gpu_process = tab.EvaluateJavaScript(has_gpu_process_js)
33    if not has_gpu_process:
34      raise page_test.Failure('No GPU process detected')
35
36class GpuProcess(benchmark.Benchmark):
37  """Tests that accelerated content triggers the creation of a GPU process"""
38  test = _GpuProcessValidator
39
40  def CreateExpectations(self, page_set):
41    return expectations.GpuProcessExpectations()
42
43  def CreatePageSet(self, options):
44    page_set = page_sets.GpuProcessTestsPageSet()
45    for page in page_set.pages:
46      page.script_to_evaluate_on_commit = test_harness_script
47    return page_set
48