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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# 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.
from gpu_tests import gpu_test_base
from gpu_tests import trace_test_expectations
import page_sets
from telemetry.page import page_test
from telemetry.timeline import model as model_module
from telemetry.timeline import tracing_config
TOPLEVEL_GL_CATEGORY = 'gpu_toplevel'
TOPLEVEL_SERVICE_CATEGORY = 'disabled-by-default-gpu.service'
TOPLEVEL_DEVICE_CATEGORY = 'disabled-by-default-gpu.device'
TOPLEVEL_CATEGORIES = [TOPLEVEL_SERVICE_CATEGORY, TOPLEVEL_DEVICE_CATEGORY]
test_harness_script = r"""
var domAutomationController = {};
domAutomationController._finished = false;
domAutomationController.setAutomationId = function(id) {}
domAutomationController.send = function(msg) {
domAutomationController._finished = true;
}
window.domAutomationController = domAutomationController;
"""
class TraceValidatorBase(gpu_test_base.ValidatorBase):
def GetCategoryName(self):
raise NotImplementedError("GetCategoryName() Not implemented!")
def ValidateAndMeasurePage(self, page, tab, results):
timeline_data = tab.browser.platform.tracing_controller.Stop()
timeline_model = model_module.TimelineModel(timeline_data)
category_name = self.GetCategoryName()
event_iter = timeline_model.IterAllEvents(
event_type_predicate=model_module.IsSliceOrAsyncSlice)
for event in event_iter:
if (event.args.get('gl_category', None) == TOPLEVEL_GL_CATEGORY and
event.category == category_name):
break
else:
raise page_test.Failure(self._FormatException(category_name))
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-logging')
def WillNavigateToPage(self, page, tab):
config = tracing_config.TracingConfig()
for cat in TOPLEVEL_CATEGORIES:
config.tracing_category_filter.AddIncludedCategory(cat)
config.tracing_options.enable_chrome_trace = True
tab.browser.platform.tracing_controller.Start(config, 60)
def _FormatException(self, category):
return 'Trace markers for GPU category was not found: %s' % category
class _TraceValidator(TraceValidatorBase):
def GetCategoryName(self):
return TOPLEVEL_SERVICE_CATEGORY
class _DeviceTraceValidator(TraceValidatorBase):
def GetCategoryName(self):
return TOPLEVEL_DEVICE_CATEGORY
class TraceTestBase(gpu_test_base.TestBase):
"""Base class for the trace tests."""
def CreateStorySet(self, options):
# Utilize pixel tests page set as a set of simple pages to load.
story_set = page_sets.PixelTestsStorySet(self.GetExpectations(),
base_name=self.Name())
for story in story_set:
story.script_to_evaluate_on_commit = test_harness_script
return story_set
class TraceTest(TraceTestBase):
"""Tests GPU traces are plumbed through properly."""
test = _TraceValidator
name = 'TraceTest'
@classmethod
def Name(cls):
return 'trace_test'
def _CreateExpectations(self):
return trace_test_expectations.TraceTestExpectations()
def CustomizeBrowserOptions(self, options):
options.enable_logging = True
class DeviceTraceTest(TraceTestBase):
"""Tests GPU Device traces show up on devices that support it."""
test = _DeviceTraceValidator
name = 'DeviceTraceTest'
@classmethod
def Name(cls):
return 'device_trace_test'
def _CreateExpectations(self):
return trace_test_expectations.DeviceTraceTestExpectations()
|