Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / tracing_backend_unittest.py
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.
4
5 import cStringIO
6 import json
7 import logging
8 import unittest
9
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
17
18
19 class TracingBackendTest(tab_test_case.TabTestCase):
20   def _StartServer(self):
21     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
22
23   def _WaitForAnimationFrame(self):
24     def _IsDone():
25       js_is_done = """done"""
26       return bool(self._tab.EvaluateJavaScript(js_is_done))
27     util.WaitFor(_IsDone, 5)
28
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.')
34       return
35     self._StartServer()
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)
43
44
45 class ChromeTraceResultTest(unittest.TestCase):
46   def __init__(self, method_name):
47     super(ChromeTraceResultTest, self).__init__(method_name)
48
49   def testWrite1(self):
50     ri = tracing_timeline_data.TracingTimelineData(map(json.loads, []))
51     f = cStringIO.StringIO()
52     ri.Serialize(f)
53     v = f.getvalue()
54
55     j = json.loads(v)
56     assert 'traceEvents' in j
57     self.assertEquals(j['traceEvents'], [])
58
59   def testWrite2(self):
60     ri = tracing_timeline_data.TracingTimelineData(map(json.loads, [
61         '"foo"',
62         '"bar"']))
63     f = cStringIO.StringIO()
64     ri.Serialize(f)
65     v = f.getvalue()
66
67     j = json.loads(v)
68     assert 'traceEvents' in j
69     self.assertEquals(j['traceEvents'], ['foo', 'bar'])
70
71   def testWrite3(self):
72     ri = tracing_timeline_data.TracingTimelineData(map(json.loads, [
73         '"foo"',
74         '"bar"',
75         '"baz"']))
76     f = cStringIO.StringIO()
77     ri.Serialize(f)
78     v = f.getvalue()
79
80     j = json.loads(v)
81     assert 'traceEvents' in j
82     self.assertEquals(j['traceEvents'],
83                       ['foo', 'bar', 'baz'])
84
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)