Home | History | Annotate | Download | only in timeline
      1 # Copyright 2014 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 unittest
      6 
      7 from telemetry.timeline import model as timeline_model
      8 from telemetry.timeline import tab_id_importer
      9 from tracing.trace_data import trace_data as trace_data_module
     10 
     11 
     12 class TabIdImporterUnitTest(unittest.TestCase):
     13   def testImportOverflowedTrace(self):
     14     builder = trace_data_module.TraceDataBuilder()
     15     builder.AddTraceFor(trace_data_module.CHROME_TRACE_PART, {'traceEvents': [
     16       {'name': 'a', 'args': {}, 'pid': 1, 'ts': 7, 'cat': 'foo',
     17        'tid': 1, 'ph': 'B'},
     18       {'name': 'a', 'args': {}, 'pid': 1, 'ts': 8, 'cat': 'foo',
     19        'tid': 1, 'ph': 'E'},
     20       {'name': 'b', 'args': {}, 'pid': 2, 'ts': 9, 'cat': 'foo',
     21        'tid': 2, 'ph': 'B'},
     22       {'name': 'b', 'args': {}, 'pid': 2, 'ts': 10, 'cat': 'foo',
     23        'tid': 2, 'ph': 'E'},
     24       {'name': 'trace_buffer_overflowed',
     25        'args': {'overflowed_at_ts': 12},
     26         'pid': 2, 'ts': 0, 'tid': 2, 'ph': 'M'}
     27     ]})
     28     builder.AddTraceFor(
     29         trace_data_module.TAB_ID_PART, ['tab-id-1', 'tab-id-2'])
     30 
     31     with self.assertRaises(tab_id_importer.TraceBufferOverflowException) \
     32         as context:
     33       timeline_model.TimelineModel(builder.AsData())
     34     self.assertTrue(
     35         'Trace buffer of process with pid=2 overflowed at timestamp 12' in
     36         context.exception.message)
     37 
     38   def testTraceEventsWithTabIdsMarkers(self):
     39     builder = trace_data_module.TraceDataBuilder()
     40     builder.AddTraceFor(trace_data_module.CHROME_TRACE_PART, {'traceEvents': [
     41       {'name': 'a', 'args': {}, 'pid': 1, 'ts': 20, 'tts': 10, 'cat': 'foo',
     42        'tid': 1, 'ph': 'B'},
     43       # tab-id-1
     44       {'name': 'tab-id-1', 'args': {}, 'pid': 1, 'ts': 25, 'cat': 'foo',
     45        'tid': 1,
     46          'ph': 'S', 'id': 72},
     47       {'name': 'a', 'args': {}, 'pid': 1, 'ts': 30, 'tts': 20, 'cat': 'foo',
     48        'tid': 1, 'ph': 'E'},
     49       {'name': 'tab-id-1', 'args': {}, 'pid': 1, 'ts': 35, 'cat': 'foo',
     50        'tid': 1,
     51          'ph': 'F', 'id': 72},
     52       # tab-id-2
     53       {'name': 'tab-id-2', 'args': {}, 'pid': 1, 'ts': 25, 'cat': 'foo',
     54        'tid': 2,
     55          'ph': 'S', 'id': 72},
     56       {'name': 'tab-id-2', 'args': {}, 'pid': 1, 'ts': 26, 'cat': 'foo',
     57        'tid': 2,
     58          'ph': 'F', 'id': 72},
     59      ]})
     60     builder.AddTraceFor(
     61         trace_data_module.TAB_ID_PART, ['tab-id-1', 'tab-id-2'])
     62 
     63     m = timeline_model.TimelineModel(builder.AsData())
     64     processes = m.GetAllProcesses()
     65     self.assertEqual(1, len(processes))
     66     self.assertIs(processes[0], m.GetRendererProcessFromTabId('tab-id-1'))
     67     self.assertIs(processes[0], m.GetRendererProcessFromTabId('tab-id-2'))
     68 
     69     p = processes[0]
     70     self.assertEqual(2, len(p.threads))
     71     self.assertIs(p.threads[1], m.GetRendererThreadFromTabId('tab-id-1'))
     72     self.assertIs(p.threads[2], m.GetRendererThreadFromTabId('tab-id-2'))
     73