Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / timeline / process.py
index aa94a9c..dbf9212 100644 (file)
@@ -2,10 +2,12 @@
 # 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.
   '''
@@ -14,6 +16,15 @@ class Process(event_container.TimelineEventContainer):
     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):
@@ -29,19 +40,13 @@ class Process(event_container.TimelineEventContainer):
     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)
@@ -70,6 +75,11 @@ class Process(event_container.TimelineEventContainer):
     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()