OLD | NEW |
1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import collections | 5 import collections |
6 import copy | 6 import copy |
7 import logging | 7 import logging |
8 import operator | 8 import operator |
9 import unittest | 9 import unittest |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 {'ts': 10, 'ph': 'X', 'dur': 2, 'pid': 2, 'tid': 2, | 35 {'ts': 10, 'ph': 'X', 'dur': 2, 'pid': 2, 'tid': 2, |
36 'args': {'name': 'D'}}, | 36 'args': {'name': 'D'}}, |
37 {'ts': 13, 'ph': 'X', 'dur': 1, 'pid': 2, 'tid': 1, | 37 {'ts': 13, 'ph': 'X', 'dur': 1, 'pid': 2, 'tid': 1, |
38 'args': {'name': 'F'}}, | 38 'args': {'name': 'F'}}, |
39 {'ts': 12, 'ph': 'X', 'dur': 3, 'pid': 2, 'tid': 1, | 39 {'ts': 12, 'ph': 'X', 'dur': 3, 'pid': 2, 'tid': 1, |
40 'args': {'name': 'E'}}] | 40 'args': {'name': 'E'}}] |
41 | 41 |
42 def setUp(self): | 42 def setUp(self): |
43 self.tree_threshold = _IntervalTree._TRESHOLD | 43 self.tree_threshold = _IntervalTree._TRESHOLD |
44 _IntervalTree._TRESHOLD = 2 # Expose more edge cases in the tree. | 44 _IntervalTree._TRESHOLD = 2 # Expose more edge cases in the tree. |
45 self.track = TracingTrack(None, additional_categories=('A', 'B', 'C', 'D')) | 45 self.track = TracingTrack(None, ['A', 'B', 'C', 'D']) |
46 | 46 |
47 def tearDown(self): | 47 def tearDown(self): |
48 _IntervalTree._TRESHOLD = self.tree_threshold | 48 _IntervalTree._TRESHOLD = self.tree_threshold |
49 | 49 |
50 def EventToMicroseconds(self, event): | 50 def EventToMicroseconds(self, event): |
51 result = copy.deepcopy(event) | 51 result = copy.deepcopy(event) |
52 if 'ts' in result: | 52 if 'ts' in result: |
53 result['ts'] *= 1000 | 53 result['ts'] *= 1000 |
54 if 'dur' in result: | 54 if 'dur' in result: |
55 result['dur'] *= 1000 | 55 result['dur'] *= 1000 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 self.assertListEqual([tracing_events[0], tracing_events[3]], | 353 self.assertListEqual([tracing_events[0], tracing_events[3]], |
354 filtered_events) | 354 filtered_events) |
355 filtered_events = self.track.Filter(categories=set(['Z'])).GetEvents() | 355 filtered_events = self.track.Filter(categories=set(['Z'])).GetEvents() |
356 self.assertEquals(0, len(filtered_events)) | 356 self.assertEquals(0, len(filtered_events)) |
357 filtered_events = self.track.Filter(categories=set(['B', 'C'])).GetEvents() | 357 filtered_events = self.track.Filter(categories=set(['B', 'C'])).GetEvents() |
358 self.assertEquals(3, len(filtered_events)) | 358 self.assertEquals(3, len(filtered_events)) |
359 self.assertListEqual(tracing_events[1:], filtered_events) | 359 self.assertListEqual(tracing_events[1:], filtered_events) |
360 self.assertSetEqual( | 360 self.assertSetEqual( |
361 set('A'), self.track.Filter(categories=set('A')).Categories()) | 361 set('A'), self.track.Filter(categories=set('A')).Categories()) |
362 | 362 |
363 def testAdditionalCategories(self): | |
364 track = TracingTrack(None, additional_categories=('best-category-ever',)) | |
365 self.assertIn('best-category-ever', track.Categories()) | |
366 # Cannot re-enable a category. | |
367 with self.assertRaises(AssertionError): | |
368 TracingTrack(None, additional_categories=('cc',)) | |
369 # Cannot disable categories via |additional_categories|. | |
370 with self.assertRaises(AssertionError): | |
371 TracingTrack(None, additional_categories=('-best-category-ever',)) | |
372 | |
373 def testDisabledCategories(self): | |
374 track = TracingTrack(None, disabled_categories=('toplevel',)) | |
375 self.assertNotIn('toplevel', track.Categories()) | |
376 self.assertIn('-toplevel', track.Categories()) | |
377 # Can only disable categories that are enabled by default. | |
378 with self.assertRaises(AssertionError): | |
379 TracingTrack(None, disabled_categories=('best-category-ever',)) | |
380 with self.assertRaises(AssertionError): | |
381 TracingTrack(None, disabled_categories=('cc',)) | |
382 | |
383 def _HandleEvents(self, events): | 363 def _HandleEvents(self, events): |
384 self.track.Handle('Tracing.dataCollected', {'params': {'value': [ | 364 self.track.Handle('Tracing.dataCollected', {'params': {'value': [ |
385 self.EventToMicroseconds(e) for e in events]}}) | 365 self.EventToMicroseconds(e) for e in events]}}) |
386 | 366 |
387 | 367 |
388 class IntervalTreeTestCase(unittest.TestCase): | 368 class IntervalTreeTestCase(unittest.TestCase): |
389 class FakeEvent(object): | 369 class FakeEvent(object): |
390 def __init__(self, start_msec, end_msec): | 370 def __init__(self, start_msec, end_msec): |
391 self.start_msec = start_msec | 371 self.start_msec = start_msec |
392 self.end_msec = end_msec | 372 self.end_msec = end_msec |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 'cat': 'bar,baz,bizbiz', | 439 'cat': 'bar,baz,bizbiz', |
460 'ph': 'X', | 440 'ph': 'X', |
461 'ts': 0, 'dur': 0}) | 441 'ts': 0, 'dur': 0}) |
462 self.assertTrue(event.Matches('bar', 'foo')) | 442 self.assertTrue(event.Matches('bar', 'foo')) |
463 self.assertTrue(event.Matches('baz', 'foo')) | 443 self.assertTrue(event.Matches('baz', 'foo')) |
464 self.assertFalse(event.Matches('bar', 'biz')) | 444 self.assertFalse(event.Matches('bar', 'biz')) |
465 self.assertFalse(event.Matches('biz', 'foo')) | 445 self.assertFalse(event.Matches('biz', 'foo')) |
466 | 446 |
467 if __name__ == '__main__': | 447 if __name__ == '__main__': |
468 unittest.main() | 448 unittest.main() |
OLD | NEW |