Index: tools/telemetry/telemetry/timeline/tab_id_importer_unittest.py |
diff --git a/tools/telemetry/telemetry/timeline/tab_id_importer_unittest.py b/tools/telemetry/telemetry/timeline/tab_id_importer_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..49541c0a0f58e408feed19edb8f0bc0b728b8325 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/timeline/tab_id_importer_unittest.py |
@@ -0,0 +1,72 @@ |
+# Copyright 2014 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. |
+ |
+import json |
+import unittest |
+ |
+from telemetry.timeline import model as timeline_model |
+from telemetry.value import trace as trace_value_module |
+from telemetry.timeline import tab_id_importer |
+ |
+class TabIdImporterUnitTest(unittest.TestCase): |
+ def testImportOverflowedTrace(self): |
+ events = [ |
+ {'name': 'a', 'args': {}, 'pid': 1, 'ts': 7, 'cat': 'foo', |
+ 'tid': 1, 'ph': 'B'}, |
+ {'name': 'a', 'args': {}, 'pid': 1, 'ts': 8, 'cat': 'foo', |
+ 'tid': 1, 'ph': 'E'}, |
+ {'name': 'b', 'args': {}, 'pid': 2, 'ts': 9, 'cat': 'foo', |
+ 'tid': 2, 'ph': 'B'}, |
+ {'name': 'b', 'args': {}, 'pid': 2, 'ts': 10, 'cat': 'foo', |
+ 'tid': 2, 'ph': 'E'}, |
+ {'name': 'trace_buffer_overflowed', |
+ 'args': {'overflowed_at_ts': 12}, |
+ 'pid': 2, 'ts': 0, 'tid': 2, 'ph': 'M'} |
+ ] |
+ |
+ trace_value = trace_value_module.TraceValue(events) |
+ |
+ with self.assertRaises(tab_id_importer.TraceBufferOverflowException) \ |
+ as context: |
+ timeline_model.TimelineModel(trace_value) |
+ self.assertTrue( |
+ 'Trace buffer of process with pid=2 overflowed at timestamp 12' in |
+ context.exception.message) |
+ |
+ |
+ def testTraceEventsWithTabIdsMarkers(self): |
+ builder = trace_value_module.TraceValueBuilder() |
+ builder.AddEventsTo(trace_value_module.CHROME_TRACE_PART, [ |
+ {'name': 'a', 'args': {}, 'pid': 1, 'ts': 20, 'tts': 10, 'cat': 'foo', |
+ 'tid': 1, 'ph': 'B'}, |
+ # tab-id-1 |
+ {'name': 'tab-id-1', 'args': {}, 'pid': 1, 'ts': 25, 'cat': 'foo', |
+ 'tid': 1, |
+ 'ph': 'S', 'id': 72}, |
+ {'name': 'a', 'args': {}, 'pid': 1, 'ts': 30, 'tts': 20, 'cat': 'foo', |
+ 'tid': 1, 'ph': 'E'}, |
+ {'name': 'tab-id-1', 'args': {}, 'pid': 1, 'ts': 35, 'cat': 'foo', |
+ 'tid': 1, |
+ 'ph': 'F', 'id': 72}, |
+ # tab-id-2 |
+ {'name': 'tab-id-2', 'args': {}, 'pid': 1, 'ts': 25, 'cat': 'foo', |
+ 'tid': 2, |
+ 'ph': 'S', 'id': 72}, |
+ {'name': 'tab-id-2', 'args': {}, 'pid': 1, 'ts': 26, 'cat': 'foo', |
+ 'tid': 2, |
+ 'ph': 'F', 'id': 72}, |
+ ]) |
+ builder.AddEventsTo( |
+ trace_value_module.CHROME_TRACE_PART, ['tab-id-1', 'tab-id-2']) |
+ |
+ m = timeline_model.TimelineModel(builder.AsValue()) |
+ processes = m.GetAllProcesses() |
+ self.assertEqual(1, len(processes)) |
+ self.assertIs(processes[0], m.GetRendererProcessFromTabId('tab-id-1')) |
+ self.assertIs(processes[0], m.GetRendererProcessFromTabId('tab-id-2')) |
+ |
+ p = processes[0] |
+ self.assertEqual(2, len(p.threads)) |
+ self.assertIs(p.threads[1], m.GetRendererThreadFromTabId('tab-id-1')) |
+ self.assertIs(p.threads[2], m.GetRendererThreadFromTabId('tab-id-2')) |