# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import telemetry.timeline.event_container as event_container
import telemetry.timeline.counter as tracing_counter
+import telemetry.timeline.event as event_module
+import telemetry.timeline.event_container as event_container
import telemetry.timeline.thread as tracing_thread
+
class Process(event_container.TimelineEventContainer):
''' The Process represents a single userland process in the trace.
'''
self.pid = pid
self._threads = {}
self._counters = {}
+ self._trace_buffer_overflow_event = None
+
+ @property
+ def trace_buffer_did_overflow(self):
+ return self._trace_buffer_overflow_event is not None
+
+ @property
+ def trace_buffer_overflow_event(self):
+ return self._trace_buffer_overflow_event
@property
def threads(self):
for counter in self._counters.itervalues():
yield counter
- def IterAllSlicesOfName(self, name):
- for thread in self._threads.itervalues():
- for s in thread.IterAllSlicesOfName(name):
- yield s
-
- def IterAllAsyncSlicesOfName(self, name):
- for thread in self._threads.itervalues():
- for s in thread.IterAllAsyncSlicesOfName(name):
- yield s
-
- def IterEventsInThisContainer(self):
- return
- yield # pylint: disable=W0101
+ def IterEventsInThisContainer(self, event_type_predicate, event_predicate):
+ if (not self.trace_buffer_did_overflow or
+ not event_type_predicate(event_module.TimelineEvent) or
+ not event_predicate(self._trace_buffer_overflow_event)):
+ return
+ yield # pylint: disable=W0101
+ yield self._trace_buffer_overflow_event
def GetOrCreateThread(self, tid):
thread = self.threads.get(tid, None)
for thread in self._threads.itervalues():
thread.AutoCloseOpenSlices(max_timestamp, thread_time_bounds[thread].max)
+ def SetTraceBufferOverflowTimestamp(self, timestamp):
+ # TODO: use instant event for trace_buffer_overflow_event
+ self._trace_buffer_overflow_event = event_module.TimelineEvent(
+ "TraceBufferInfo", "trace_buffer_overflowed", timestamp, 0)
+
def FinalizeImport(self):
for thread in self._threads.itervalues():
thread.FinalizeImport()