| 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 """Monitor tracing events on chrome via chrome remote debugging.""" | 5 """Monitor tracing events on chrome via chrome remote debugging.""" |
| 6 | 6 |
| 7 import bisect | 7 import bisect |
| 8 import itertools | 8 import itertools |
| 9 import logging | 9 import logging |
| 10 import operator | 10 import operator |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 sample and counter) events are never included. Event end times are | 84 sample and counter) events are never included. Event end times are |
| 85 exclusive, so that an event ending at the usec parameter will not be | 85 exclusive, so that an event ending at the usec parameter will not be |
| 86 returned. | 86 returned. |
| 87 """ | 87 """ |
| 88 self._IndexEvents() | 88 self._IndexEvents() |
| 89 return self._interval_tree.EventsAt(msec) | 89 return self._interval_tree.EventsAt(msec) |
| 90 | 90 |
| 91 def ToJsonDict(self): | 91 def ToJsonDict(self): |
| 92 return {'events': [e.ToJsonDict() for e in self._events]} | 92 return {'events': [e.ToJsonDict() for e in self._events]} |
| 93 | 93 |
| 94 def TracingTrackForThread(self, pid_tid): | 94 def Filter(self, pid=None, tid=None, categories=None): |
| 95 """Returns a new TracingTrack with only the events from a given thread. | 95 """Returns a new TracingTrack with a subset of the events. |
| 96 | 96 |
| 97 Args: | 97 Args: |
| 98 pid_tid: ((int, int) PID and TID. | 98 pid: (int or None) Selects events from this PID. |
| 99 | 99 tid: (int or None) Selects events from this TID. |
| 100 Returns: | 100 categories: (set([str]) or None) Selects events belonging to one of the |
| 101 A new instance of TracingTrack. | 101 categories. |
| 102 """ | 102 """ |
| 103 (pid, tid) = pid_tid | 103 events = self._events |
| 104 events = [e for e in self._events | 104 if pid is not None: |
| 105 if (e.tracing_event['pid'] == pid | 105 events = filter(lambda e : e.tracing_event['pid'] == pid, events) |
| 106 and e.tracing_event['tid'] == tid)] | 106 if tid is not None: |
| 107 events = filter(lambda e : e.tracing_event['tid'] == tid, events) |
| 108 if categories is not None: |
| 109 events = filter( |
| 110 lambda e : set(e.category.split(',')).intersection(categories), |
| 111 events) |
| 107 tracing_track = TracingTrack(None) | 112 tracing_track = TracingTrack(None) |
| 108 tracing_track._events = events | 113 tracing_track._events = events |
| 109 return tracing_track | 114 return tracing_track |
| 110 | 115 |
| 111 @classmethod | 116 @classmethod |
| 112 def FromJsonDict(cls, json_dict): | 117 def FromJsonDict(cls, json_dict): |
| 113 assert 'events' in json_dict | 118 assert 'events' in json_dict |
| 114 events = [Event(e) for e in json_dict['events']] | 119 events = [Event(e) for e in json_dict['events']] |
| 115 tracing_track = TracingTrack(None) | 120 tracing_track = TracingTrack(None) |
| 116 tracing_track._events = events | 121 tracing_track._events = events |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 self._left = _IntervalTree(self.start, left_end, left_events) | 494 self._left = _IntervalTree(self.start, left_end, left_events) |
| 490 self._right = _IntervalTree(right_start, self.end, right_events) | 495 self._right = _IntervalTree(right_start, self.end, right_events) |
| 491 | 496 |
| 492 def _IsLeaf(self): | 497 def _IsLeaf(self): |
| 493 return self._left is None | 498 return self._left is None |
| 494 | 499 |
| 495 @classmethod | 500 @classmethod |
| 496 def _Overlaps(cls, event, start, end): | 501 def _Overlaps(cls, event, start, end): |
| 497 return (min(end, event.end_msec) - max(start, event.start_msec) > 0 | 502 return (min(end, event.end_msec) - max(start, event.start_msec) > 0 |
| 498 or start <= event.start_msec < end) # For instant events. | 503 or start <= event.start_msec < end) # For instant events. |
| OLD | NEW |