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.
10 from telemetry import benchmark
11 from telemetry.core import util
12 from telemetry.core.platform import tracing_category_filter
13 from telemetry.core.platform import tracing_options
14 from telemetry.timeline import model
15 from telemetry.timeline import tracing_timeline_data
16 from telemetry.unittest import tab_test_case
19 class TracingBackendTest(tab_test_case.TabTestCase):
20 def _StartServer(self):
21 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
23 def _WaitForAnimationFrame(self):
25 js_is_done = """done"""
26 return bool(self._tab.EvaluateJavaScript(js_is_done))
27 util.WaitFor(_IsDone, 5)
29 @benchmark.Disabled('chromeos') # crbug.com/412713.
30 def testGotTrace(self):
31 tracing_controller = self._browser.platform.tracing_controller
32 if not tracing_controller.IsChromeTracingSupported(self._browser):
33 logging.warning('Browser does not support tracing, skipping test.')
36 options = tracing_options.TracingOptions()
37 options.enable_chrome_trace = True
38 tracing_controller.Start(
39 options, tracing_category_filter.TracingCategoryFilter())
40 trace_data = tracing_controller.Stop()
41 # Test that trace data is parsable
42 model.TimelineModel(trace_data)
45 class ChromeTraceResultTest(unittest.TestCase):
46 def __init__(self, method_name):
47 super(ChromeTraceResultTest, self).__init__(method_name)
50 ri = tracing_timeline_data.TracingTimelineData(map(json.loads, []))
51 f = cStringIO.StringIO()
56 assert 'traceEvents' in j
57 self.assertEquals(j['traceEvents'], [])
60 ri = tracing_timeline_data.TracingTimelineData(map(json.loads, [
63 f = cStringIO.StringIO()
68 assert 'traceEvents' in j
69 self.assertEquals(j['traceEvents'], ['foo', 'bar'])
72 ri = tracing_timeline_data.TracingTimelineData(map(json.loads, [
76 f = cStringIO.StringIO()
81 assert 'traceEvents' in j
82 self.assertEquals(j['traceEvents'],
83 ['foo', 'bar', 'baz'])
85 def testBrowserProcess(self):
86 ri = tracing_timeline_data.TracingTimelineData(map(json.loads, [
87 '{"name": "process_name",'
88 '"args": {"name": "Browser"},'
89 '"pid": 5, "ph": "M"}',
90 '{"name": "thread_name",'
91 '"args": {"name": "CrBrowserMain"},'
92 '"pid": 5, "tid": 32578, "ph": "M"}']))
93 timeline_model = model.TimelineModel(ri)
94 self.assertEquals(timeline_model.browser_process.pid, 5)