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