Index: tools/telemetry/telemetry/internal/backends/chrome_inspector/tracing_backend_unittest.py |
diff --git a/tools/telemetry/telemetry/internal/backends/chrome_inspector/tracing_backend_unittest.py b/tools/telemetry/telemetry/internal/backends/chrome_inspector/tracing_backend_unittest.py |
deleted file mode 100644 |
index dacef13280917c8bdb9439dd5a5e449bade78665..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/backends/chrome_inspector/tracing_backend_unittest.py |
+++ /dev/null |
@@ -1,204 +0,0 @@ |
-# Copyright 2013 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 time |
-import unittest |
- |
-from telemetry import decorators |
-from telemetry.internal.backends.chrome_inspector import tracing_backend |
-from telemetry.internal.backends.chrome_inspector.tracing_backend import _DevToolsStreamReader |
-from telemetry.testing import fakes |
-from telemetry.testing import simple_mock |
-from telemetry.testing import tab_test_case |
-from telemetry.timeline import model as model_module |
-from telemetry.timeline import tracing_config |
- |
- |
-class TracingBackendTest(tab_test_case.TabTestCase): |
- |
- # Number of consecutively requested memory dumps. |
- _REQUESTED_DUMP_COUNT = 3 |
- |
- @classmethod |
- def CustomizeBrowserOptions(cls, options): |
- options.AppendExtraBrowserArgs([ |
- # Memory maps currently cannot be retrieved on sandboxed processes. |
- # See crbug.com/461788. |
- '--no-sandbox', |
- |
- # Workaround to disable periodic memory dumps. See crbug.com/513692. |
- '--enable-memory-benchmarking' |
- ]) |
- |
- def setUp(self): |
- super(TracingBackendTest, self).setUp() |
- self._tracing_controller = self._browser.platform.tracing_controller |
- if not self._tracing_controller.IsChromeTracingSupported(): |
- self.skipTest('Browser does not support tracing, skipping test.') |
- if not self._browser.supports_memory_dumping: |
- self.skipTest('Browser does not support memory dumping, skipping test.') |
- |
- @decorators.Disabled('win') # crbug.com/570955 |
- def testDumpMemorySuccess(self): |
- # Check that dumping memory before tracing starts raises an exception. |
- self.assertRaises(Exception, self._browser.DumpMemory) |
- |
- # Start tracing with memory dumps enabled. |
- config = tracing_config.TracingConfig() |
- config.tracing_category_filter.AddDisabledByDefault( |
- 'disabled-by-default-memory-infra') |
- config.enable_chrome_trace = True |
- self._tracing_controller.StartTracing(config) |
- |
- # Request several memory dumps in a row and test that they were all |
- # successfully created with unique IDs. |
- expected_dump_ids = [] |
- for _ in xrange(self._REQUESTED_DUMP_COUNT): |
- dump_id = self._browser.DumpMemory() |
- self.assertIsNotNone(dump_id) |
- self.assertNotIn(dump_id, expected_dump_ids) |
- expected_dump_ids.append(dump_id) |
- |
- trace_data = self._tracing_controller.StopTracing() |
- |
- # Check that dumping memory after tracing stopped raises an exception. |
- self.assertRaises(Exception, self._browser.DumpMemory) |
- |
- # Test that trace data is parsable. |
- model = model_module.TimelineModel(trace_data) |
- self.assertGreater(len(model.processes), 0) |
- |
- # Test that the resulting model contains the requested memory dumps in the |
- # correct order (and nothing more). |
- actual_dump_ids = [d.dump_id for d in model.IterGlobalMemoryDumps()] |
- self.assertEqual(actual_dump_ids, expected_dump_ids) |
- |
- @decorators.Disabled('win') # crbug.com/570955 |
- def testDumpMemoryFailure(self): |
- # Check that dumping memory before tracing starts raises an exception. |
- self.assertRaises(Exception, self._browser.DumpMemory) |
- |
- # Start tracing with memory dumps disabled. |
- config = tracing_config.TracingConfig() |
- config.enable_chrome_trace = True |
- self._tracing_controller.StartTracing(config) |
- |
- # Check that the method returns None if the dump was not successful. |
- self.assertIsNone(self._browser.DumpMemory()) |
- |
- trace_data = self._tracing_controller.StopTracing() |
- |
- # Check that dumping memory after tracing stopped raises an exception. |
- self.assertRaises(Exception, self._browser.DumpMemory) |
- |
- # Test that trace data is parsable. |
- model = model_module.TimelineModel(trace_data) |
- self.assertGreater(len(model.processes), 0) |
- |
- # Test that the resulting model contains no memory dumps. |
- self.assertEqual(len(list(model.IterGlobalMemoryDumps())), 0) |
- |
- |
-class TracingBackendUnitTest(unittest.TestCase): |
- |
- def setUp(self): |
- self._mock_timer = simple_mock.MockTimer(tracing_backend) |
- self._inspector_socket = fakes.FakeInspectorWebsocket(self._mock_timer) |
- |
- def tearDown(self): |
- self._mock_timer.Restore() |
- |
- def testCollectTracingDataTimeout(self): |
- self._inspector_socket.AddEvent( |
- 'Tracing.dataCollected', {'value': [{'ph': 'B'}]}, 9) |
- self._inspector_socket.AddEvent( |
- 'Tracing.dataCollected', {'value': [{'ph': 'E'}]}, 19) |
- self._inspector_socket.AddEvent('Tracing.tracingComplete', {}, 35) |
- backend = tracing_backend.TracingBackend(self._inspector_socket) |
- |
- # The third response is 16 seconds after the second response, so we expect |
- # a TracingTimeoutException. |
- with self.assertRaises(tracing_backend.TracingTimeoutException): |
- backend._CollectTracingData(10) |
- self.assertEqual(2, len(backend._trace_events)) |
- self.assertFalse(backend._has_received_all_tracing_data) |
- |
- def testCollectTracingDataNoTimeout(self): |
- self._inspector_socket.AddEvent( |
- 'Tracing.dataCollected', {'value': [{'ph': 'B'}]}, 9) |
- self._inspector_socket.AddEvent( |
- 'Tracing.dataCollected', {'value': [{'ph': 'E'}]}, 14) |
- self._inspector_socket.AddEvent('Tracing.tracingComplete', {}, 19) |
- backend = tracing_backend.TracingBackend(self._inspector_socket) |
- |
- backend._CollectTracingData(10) |
- self.assertEqual(2, len(backend._trace_events)) |
- self.assertTrue(backend._has_received_all_tracing_data) |
- |
- def testCollectTracingDataFromStream(self): |
- self._inspector_socket.AddEvent( |
- 'Tracing.tracingComplete', {'stream': '42'}, 1) |
- self._inspector_socket.AddAsyncResponse( |
- 'IO.read', {'data': '[{},{},{'}, 2) |
- self._inspector_socket.AddAsyncResponse( |
- 'IO.read', {'data': '},{},{}]', 'eof': True}, 3) |
- backend = tracing_backend.TracingBackend(self._inspector_socket) |
- |
- backend._CollectTracingData(10) |
- self.assertEqual(5, len(backend._trace_events)) |
- self.assertTrue(backend._has_received_all_tracing_data) |
- |
- def testDumpMemorySuccess(self): |
- self._inspector_socket.AddResponseHandler( |
- 'Tracing.requestMemoryDump', |
- lambda req: {'result': {'success': True, 'dumpGuid': '42abc'}}) |
- backend = tracing_backend.TracingBackend(self._inspector_socket) |
- |
- self.assertEqual(backend.DumpMemory(), '42abc') |
- |
- def testDumpMemoryFailure(self): |
- self._inspector_socket.AddResponseHandler( |
- 'Tracing.requestMemoryDump', |
- lambda req: {'result': {'success': False, 'dumpGuid': '42abc'}}) |
- backend = tracing_backend.TracingBackend(self._inspector_socket) |
- |
- self.assertIsNone(backend.DumpMemory()) |
- |
-class DevToolsStreamPerformanceTest(unittest.TestCase): |
- def setUp(self): |
- self._mock_timer = simple_mock.MockTimer(tracing_backend) |
- self._inspector_socket = fakes.FakeInspectorWebsocket(self._mock_timer) |
- |
- def _MeasureReadTime(self, count): |
- mock_time = self._mock_timer.time() + 1 |
- payload = ','.join(['{}'] * 5000) |
- self._inspector_socket.AddAsyncResponse('IO.read', {'data': '[' + payload}, |
- mock_time) |
- startClock = time.clock() |
- |
- done = {'done': False} |
- def mark_done(data): |
- del data # unused |
- done['done'] = True |
- |
- reader = _DevToolsStreamReader(self._inspector_socket, 'dummy') |
- reader.Read(mark_done) |
- while not done['done']: |
- mock_time += 1 |
- if count > 0: |
- self._inspector_socket.AddAsyncResponse('IO.read', {'data': payload}, |
- mock_time) |
- elif count == 0: |
- self._inspector_socket.AddAsyncResponse('IO.read', |
- {'data': payload + ']', 'eof': True}, mock_time) |
- count -= 1 |
- self._inspector_socket.DispatchNotifications(10) |
- return time.clock() - startClock |
- |
- def testReadTime(self): |
- t1k = self._MeasureReadTime(1000) |
- t10k = self._MeasureReadTime(10000) |
- # Time is an illusion, CPU time is doubly so, allow great deal of tolerance. |
- toleranceFactor = 5 |
- self.assertLess(t10k / t1k, 10000 / 1000 * toleranceFactor) |