blob: fb4de0fbffd28d7044d6355252dc056d0a09f82c [file] [log] [blame]
# Copyright (c) 2015 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 trace_test_expectations
import page_sets
from telemetry import benchmark
from telemetry.page import page_test
from telemetry.core.platform import tracing_category_filter
from telemetry.core.platform import tracing_options
from telemetry.timeline import model
TOPLEVEL_GL_CATEGORY = 'gpu_toplevel'
TOPLEVEL_CATEGORIES = ['disabled-by-default-gpu.device',
'disabled-by-default-gpu.service']
test_harness_script = r"""
var domAutomationController = {};
domAutomationController._finished = false;
domAutomationController.setAutomationId = function(id) {}
domAutomationController.send = function(msg) {
domAutomationController._finished = true;
}
window.domAutomationController = domAutomationController;
"""
class _TraceValidator(page_test.PageTest):
def ValidateAndMeasurePage(self, page, tab, results):
timeline_data = tab.browser.platform.tracing_controller.Stop()
timeline_model = model.TimelineModel(timeline_data)
categories_set = set(TOPLEVEL_CATEGORIES)
for event in timeline_model.IterAllEvents():
if event.args.get('gl_category', None) == TOPLEVEL_GL_CATEGORY:
categories_set.discard(event.category)
if not categories_set:
break
else:
raise page_test.Failure(self._FormatException(sorted(categories_set)))
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-logging')
def WillNavigateToPage(self, page, tab):
cat_string = ','.join(TOPLEVEL_CATEGORIES)
cat_filter = tracing_category_filter.TracingCategoryFilter(cat_string)
options = tracing_options.TracingOptions()
options.enable_chrome_trace = True
tab.browser.platform.tracing_controller.Start(options, cat_filter, 60)
def _FormatException(self, categories):
return 'Trace markers for GPU categories were not found: %s' % categories
class TraceTest(benchmark.Benchmark):
"""Tests GPU traces"""
test = _TraceValidator
@classmethod
def Name(cls):
return 'trace_test'
def CreateExpectations(self):
return trace_test_expectations.TraceTestExpectations()
def CreatePageSet(self, options):
# Utilize pixel tests page set as a set of simple pages to load.
page_set = page_sets.PixelTestsPageSet()
for page in page_set.pages:
page.script_to_evaluate_on_commit = test_harness_script
return page_set