| OLD | NEW |
| (Empty) |
| 1 # Copyright 2013 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 telemetry.core.timeline.event_container as event_container | |
| 6 import telemetry.core.timeline.counter as tracing_counter | |
| 7 import telemetry.core.timeline.thread as tracing_thread | |
| 8 | |
| 9 class Process(event_container.TimelineEventContainer): | |
| 10 ''' The Process represents a single userland process in the trace. | |
| 11 ''' | |
| 12 def __init__(self, parent, pid): | |
| 13 super(Process, self).__init__('process %s' % pid, parent) | |
| 14 self.pid = pid | |
| 15 self._threads = {} | |
| 16 self._counters = {} | |
| 17 | |
| 18 @property | |
| 19 def threads(self): | |
| 20 return self._threads | |
| 21 | |
| 22 @property | |
| 23 def counters(self): | |
| 24 return self._counters | |
| 25 | |
| 26 def IterChildContainers(self): | |
| 27 for thread in self._threads.itervalues(): | |
| 28 yield thread | |
| 29 for counter in self._counters.itervalues(): | |
| 30 yield counter | |
| 31 | |
| 32 def IterAllSlicesOfName(self, name): | |
| 33 for thread in self._threads.itervalues(): | |
| 34 for s in thread.IterAllSlicesOfName(name): | |
| 35 yield s | |
| 36 | |
| 37 def IterAllAsyncSlicesOfName(self, name): | |
| 38 for thread in self._threads.itervalues(): | |
| 39 for s in thread.IterAllAsyncSlicesOfName(name): | |
| 40 yield s | |
| 41 | |
| 42 def IterEventsInThisContainer(self): | |
| 43 return | |
| 44 yield # pylint: disable=W0101 | |
| 45 | |
| 46 def GetOrCreateThread(self, tid): | |
| 47 thread = self.threads.get(tid, None) | |
| 48 if thread: | |
| 49 return thread | |
| 50 thread = tracing_thread.Thread(self, tid) | |
| 51 self._threads[tid] = thread | |
| 52 return thread | |
| 53 | |
| 54 def GetCounter(self, category, name): | |
| 55 counter_id = category + '.' + name | |
| 56 if counter_id in self.counters: | |
| 57 return self.counters[counter_id] | |
| 58 raise ValueError( | |
| 59 'Counter %s not found in process with id %s.' % (counter_id, | |
| 60 self.pid)) | |
| 61 def GetOrCreateCounter(self, category, name): | |
| 62 try: | |
| 63 return self.GetCounter(category, name) | |
| 64 except ValueError: | |
| 65 ctr = tracing_counter.Counter(self, category, name) | |
| 66 self._counters[ctr.full_name] = ctr | |
| 67 return ctr | |
| 68 | |
| 69 def AutoCloseOpenSlices(self, max_timestamp, thread_time_bounds): | |
| 70 for thread in self._threads.itervalues(): | |
| 71 thread.AutoCloseOpenSlices(max_timestamp, thread_time_bounds[thread].max) | |
| 72 | |
| 73 def FinalizeImport(self): | |
| 74 for thread in self._threads.itervalues(): | |
| 75 thread.FinalizeImport() | |
| 76 for counter in self._counters.itervalues(): | |
| 77 counter.FinalizeImport() | |
| OLD | NEW |